1

我已经在我的 EC2 实例上创建了一个裸 git 存储库,并且我已经将一个分支从我的开发机器推送到它。我现在可以git log在服务器上运行,它看起来是最新的。

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

但是在服务器上,repo 是一个裸 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操作必须“附加”到某个提交,这将是有问题的提交。

4

1 回答 1

1

接收后挂钩是一个很好的解决方案。

另一种选择是设置第二个非裸 repo 并 cd 进入该 repo,以便从第一个裸 repo中提取。我在“选项是否--bare等于core.bareGit 中的配置? ”中进行了解释。

正如eis 评论,如果您想直接推送到 EC2 服务器 git repo,这两种解决方案都很好。
从 EC2 中的 git 会话中直接提取 BitBucket 存储库也可以。

于 2013-04-02T05:36:02.390 回答