如何将自托管的Git服务器用作生产服务器?

3

我正在开发一款网站,使用自己的笔记本电脑作为开发服务器,同时使用在线服务器作为生产服务器。我使用git来管理我的项目。

我以前使用过Heroku,并认为只需使用git push heroku master即可发布我的网站,这真的很酷,所以我计划自己构建一个类似的平台。

因此,这就是我所做的,我在生产服务器上安装了git(使用gitosis来管理访问权限),并在我的git存储库中,我使用git remote add git@production:myrepo.git添加了远程git存储库。

问题是如何获取生产服务器上的代码?生产服务器充当git服务器,因此我只能获取.git文件夹而不是实际的代码。我想到了一个技巧,即使用git clone --local myrepo.git myrepo来克隆生产服务器上的数据,并在myrepo.git的hooks/文件夹中,编辑post-receive文件如下:

#!/bin/sh
touch /tmp/do-we-got-here
cd /path/to/clone/myrepo
/usr/bin/git pull

我使用git push production master后,创建了do-we-got-here文件,因此我可以确认post-receive hook正在工作,但是git pull部分不起作用。当我到达myrepo文件夹并使用git pull时,它仍在从myrepo.git中pull。因此,我想知道如何处理这种情况?我知道这是可能的,因为像Heroku这样的托管站点正在工作!但问题是如何处理?

你有收到任何错误吗? - ro ko
为什么不在生产服务器上拥有整个存储库(包括文件)?在分布式版本控制系统中,没有Repo-Server概念。 - iberbeu
@roko,不,我不知道如何记录钩子的日志.. - Void Main
@iberbeu 怎样获取.git文件夹中的所有文件?我猜它们被打包在.git文件夹中,只有git客户端才能解包它们? - Void Main
你可能创建了一个镜像,所以文件不在那里。如果像平常一样克隆它 git clone repo_url,你将拥有所有东西,包括文件。 - iberbeu
@iberbeu,我知道,克隆存储库将获取文件,但在myrepo.git文件夹中,什么也没有。 - Void Main
1个回答

4
我曾经遇到过类似的问题,以下是解决方法。
#!/bin/sh
touch /tmp/do-we-got-here
cd /path/to/clone/myrepo
unset GIT_DIR
git pull

当运行git hook时,GIT_DIR被设置。这意味着您的pull命令不会在您切换到的第二个存储库目录中运行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接