我在我的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
操作必须“附加”到某个提交,这将是有问题的提交。
答案 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也可以。