我目前正在为我的私人项目托管我自己的 git-repos。为此,我使用 Apache 和标准的 git http-backend。
现在,可以在如下 URL 下访问存储库:
http://vcs.myserver.lc/git/Repo.git
Run Code Online (Sandbox Code Playgroud)
有了这个 URL,我可以使用git向/从这个 repo 推送、获取和克隆。然而,在浏览器中打开这个 URL 只会给我一个空白页面,现在我正在寻找一种方法来避免这种情况。
相反,我希望 Apache 显示一个页面,其中包含一些信息,例如:
这不是网页,这是一个 git-repo。您可以使用
git clone [URL]...
如果[URL]将其替换为当前 URL(例如使用 PHP)会很好,但是纯 HTML 也可以。
我知道这应该是可能的,因为
github 对他们的回购做同样的事情。
我设法vcs.myserver.lc通过DocumentRoot在 VHost-config 文件中指定 a来为-domain做类似的事情:
DocumentRoot /srv/http/vcs/
Run Code Online (Sandbox Code Playgroud)
在此路径中,我放置了一个index.html带有基本说明的简单文件。
那么,当 git-client 仍然可以使用 repo 时,他们是否有任何简单的方法来显示浏览器的信息端?我可以将浏览器重定向到特定的信息站点吗?
我正在尝试使用 Nginx 设置 git-http-backend,但是在浪费了 24 小时的时间并阅读了我所能阅读的所有内容之后,我认为这个配置应该可以工作,但没有。
server {
listen 80;
server_name mydevserver;
access_log /var/log/nginx/dev.access.log;
error_log /var/log/nginx/dev.error.log;
location / {
root /var/repos;
}
location ~ /git(/.*) {
gzip off;
root /usr/lib/git-core;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params2;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
fastcgi_param DOCUMENT_ROOT /usr/lib/git-core/;
fastcgi_param SCRIPT_NAME git-http-backend;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
fastcgi_param GIT_PROJECT_ROOT /var/repos;
fastcgi_param PATH_INFO $1;
#fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}
}
Run Code Online (Sandbox Code Playgroud)
/etc/nginx/fastcgi_params2 的内容
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Git、GitHub 和 SSH的Perfect Workflow,但似乎无法运行git pull. 我试过了git status,没问题。
当git pull 2>&1我得到:
错误:无法打开 .git/FETCH_HEAD:权限被拒绝
我试图 chmod .git dir 到 777 没有运气。
当我whoami从浏览器运行时,它向我显示:apache
- - 编辑 - -
我刚刚做了chown apache:apache -R .git,现在我得到:
无法创建目录“/.ssh”。主机密钥验证失败。致命:远端意外挂断
我在内存不足的服务器上使用 gitosis,特别是大约 512 MB。当我尝试推送一个大文件夹(恰好是来自 android 手机的备份)时,我得到:
me@corellia:~/Configs/$ git push origin master
Counting objects: 18, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (14/14), done.
fatal: Out of memory, malloc failed MiB | 685 KiB/s
error: pack-objects died of signal 13
error: failed to push some refs to 'git@dagobah:Configs'
Run Code Online (Sandbox Code Playgroud)
我一直在寻找的网站,并特别发现:http://www.mail-archive.com/git-users@googlegroups.com/msg01747.html以及HTTP://git.661346.n2.nabble。 com/Out-of-memory-error-during-git-push-td5443705.html但这些似乎对我没有帮助,原因有两个:1)我推送时实际上并没有内存不足。当我在推送期间运行 'top' 时,我得到:
24262 git 18 0 16204 6084 1096 S 2 1.2 0:00.12 git-unpack-obje
Run Code Online (Sandbox Code Playgroud)
此外,在推送期间,如果我运行 /head/meminfo,我会得到:
MemTotal: 524288 kB
MemFree: 289408 kB
Buffers: …Run Code Online (Sandbox Code Playgroud) 我们希望我们的部署过程直接从我们的 git 存储库中提取,但只有在签名时才激活新的更改(通过 git
tag -s在使用 GPG 签名)签名。我发现很少有使用 GPG 验证 git 标签的工作流示例,所以我不确定是否有此类事情的“最佳实践”。
到目前为止,我们所拥有的看起来是这样的:
# discard erroneous local changes
git reset --hard HEAD
# get changes
git fetch
start=$(git rev-parse FETCH_HEAD)
# get new tags
git fetch --tags
# find most recent release tag
tag=$(git describe --abbrev=0 --match "release-*" $start)
if git tag -v $tag; then
git checkout $tag
...do stuff...
fi
Run Code Online (Sandbox Code Playgroud)
这有意义吗?特别是,为了避免在部署过程中进行错误的本地更改git reset --hard
HEAD,这样做是正确的吗?此外,记住FETCH_HEAD似乎是必要的,其他明智的标签随后HEAD不会出现在git describe. 有没有另一种方法可以做到这一点?
或者,如果您有一个使用签名标签进行验证的文档化部署工作流程,我会对指向它的链接感兴趣。
我们希望从 svn 永久迁移到 git,以便能够在分支和协作方面使用 git 更好的功能。
我们当前的 svn 存储库看起来像这样
svnrepo/
frontend/
trunk
branches/
ng/
...
tags/
1.x
...
backend/
trunk
branches/
ng/
...
tags/
1.x
...
Run Code Online (Sandbox Code Playgroud)
工作布局是我们检出前端项目,并在其中创建一个后端文件夹并检出后端项目。
我们现在想迁移到 git,并放弃前端和后端之间的拆分(就独立项目而言),因为它给我们带来的问题多于优势。我们希望它们都在一个 git 存储库中。
我想使用svn2git进行转换。不幸的是,最新的开发都发生在一个分支中,而不是在主干中,但我认为这对于 svn2git 来说应该不是问题。因此,新的 git 存储库布局应如下所示:
/ => svnrepo/frontend/branches/ng
/backend => svnrepo/backend/branches/ng
Run Code Online (Sandbox Code Playgroud)
其中 => 表示“迁移/转换自”。
对于转换,我们没有必要将 svn 存储库中的所有标签和分支转换为 git。这对我们来说并不重要。然而重要的是,我们拥有所有提交到分支/ng 目录中的所有文件的完整历史记录,返回到主干分支以及之前发生在主干中的所有提交。我们希望所有这些提交都在单个 git 存储库中具有上述布局。这甚至可能吗?我们将如何做到这一点?
我试图通过 ssh 门设置 ssh/git 访问,但 googleing 已经空了。基本上,我希望将用户 git 到我的 ssh 门的任何连接转发到我的 ssh 服务器,以便我可以远程进行推和拉。但是,如果任何其他用户连接,我希望他们像往常一样登录。
internet--(git)-->gate--(git)--> git-server
internet--(user)-->gate
Run Code Online (Sandbox Code Playgroud)
任何帮助或建议将不胜感激。
在客户端执行此操作的一种方法是将以下内容添加到您的 .ssh/config:
Host git.life-hack.org
HostName git.life-hack.org
ProxyCommand ssh darkclown@www.life-hack.org nc %h %p
User git
Run Code Online (Sandbox Code Playgroud)
但我希望有一种方法可以做到这个服务器端。
我在一家大型跨国公司担任软件工程师,目前我正在与 IT 和其他开发人员就采用 DVCS(Mercurial 和/或 Git)进行非常愉快的对话。
IT 提出的问题之一是合规性和知识产权(顺便说一句,Perforce 大声谈论了这一点以及与 Git 相关的问题)。在我看来,IT 的印象是因为 Mercurial/Git 是分布式的,所以在每台开发人员机器上都有存储库是一种失控的情况,他们必须审核每个存储库。
我认为 IT 部门担心的另一件事是现在拥有“100”个存储库而不是“10”个庞大的存储库,我的印象是他们认为维护/监控它们的管理工作会增加“10-折叠”。我认为存储库管理软件(Rhodecode、Atlassian Stash)将是实现访问控制和可追溯性的第一步。
我的问题是:
存储库管理软件是否足以满足这种规模的公司(比方说约 2000 名开发人员和约 10 个服务器上的约 50 个 Perforce 仓库)是否合规(并满足其他企业要求?)
这个“合规性”要求到底包含什么?,您是否可以提供任何参考资料(例如 IEEE 标准或类似标准)?
我的公司已经使用 Perforce 大约 10 年了
我正在一个有几个管理员用户的服务器上工作。它们中的每一个都可以sudo用来进行配置更改。我们正在/etc使用etckeeper保持我们的目录版本控制。
但是,当我或其他管理员调用 时sudo etckeeper commit COMMITMESSAGE,git 使用root用户的名称和电子邮件作为提交消息。git config user.name在这种情况下,在 etc 存储库上的设置不起作用,因为每次etckeeper commit调用时,都将使用相同的数据。
我想要的是实际用户名和电子邮件出现在etckeeper git 存储库中,以便从提交日志中我可以追踪谁做了哪些更改。
任何帮助是极大的赞赏!
git ×10
apache-2.2 ×2
debian ×2
ssh ×2
arch-linux ×1
deployment ×1
etckeeper ×1
forwarding ×1
gitolite ×1
mercurial ×1
migration ×1
nginx ×1
perforce ×1
permissions ×1
php ×1
redmine ×1
sudo ×1
svn ×1
ubuntu ×1