生产服务器上的git repo:设置裸存储库后的步骤是什么?

时间:2013-04-02 04:59:34

标签: git amazon-ec2 repository git-bare

我在我的EC2实例上创建了一个裸git repo,我已经从我的dev机器推送了一个分支到它。我现在可以在服务器上运行git log,它可以查看所有内容。

开发机器现在有两个遥控器,一个“起源”是代码所在的Bitbucket.org repo,第二个“ec2”是我为了部署代码而推送的遥控器。看起来每当我推送到“ec2”时,它基本上会将回购与我从Bitbucket抓取的任何内容同步。哪个好,虽然在我的脑海里,我想知道在不使用中间内容的情况下构建不同的历史,我必须做些什么。 (不重要。)

但是在服务器上,repo是一个裸仓库并且没有工作树。

让服务器自动部署webapp的正确方法是什么?

我希望有人帮助我比较和对比这两种方法:

 ... inside the bare repo on the server ... 
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/home/ec2-user/www/webserver-works-off-this-dir
export GIT_WORK_TREE
git checkout -f

或者我认为设置一个单独的git repo是有意义的,即

 ... also on the server ... 
$ cd /home/ec2-user/www/
$ git clone # ??? How do I clone from localhost bare repo?
 ... presumably set the post-receive hook in the bare-repo to cd to *this* dir and run git checkout or pull or something... 

哦,还有,git checkout -f做了什么?强制覆盖结帐最新的按时间顺序提交?我认为有一些隐含的东西我不确定。我想一个push操作必须“附加”到某个提交,这将是有问题的提交。

1 个答案:

答案 0 :(得分:1)

post-receive hook是一个很好的解决方案。

另一个选择是设置第二个非裸仓库并cd进入该仓库,以便从第一个裸仓库中。我在“Is --bare option equal to core.bare config in Git?”中解释它。

作为eis comments,如果您想直接推送到EC2服务器git repo,两种解决方案都很好。
直接从EC2中的git会话中拉出BitBucket repo也可以。