我正在努力实现的目标
使用Git,我正在尝试开发一个设置,以便我可以使用放置在生产服务器上的裸存储库将更改部署到我的生产服务器。
我的设置如下:
production
的本地存储库,指向生产服务器上的裸存储库。 (例如git@productionserver.com:/opt/git/caf.git
)git
以git --bare init
用户身份在生产计算机上创建裸存储库。我创建了一个post-receive钩子脚本(脚本的完整副本在下面的链接中,但省略,因为我认为这是相关部分。):
GIT_WORK_TREE="$DEPLOYDIR" git checkout -f
,其中$DEPLOYDIR
指向回购的生产副本。
设置好所有内容后,我从本地副本运行git push production +master:refs/heads/master
以使裸存储库保持最新状态。
什么在起作用
在本地提交更改并将更改推送到上述裸存储库时,生产副本中的文件会按照我的预期进行更新/删除/修改。
问题
如果我转到生产副本并运行git status
,则HEAD不是最新的,从而导致一系列未提交的未经修改的更改或来自推送的修改。 (基本上我推动的所有更改都显示为修改)
我可以通过运行git reset --hard origin master
解决此问题,但这似乎不正确。
我的问题
如何设置它以便生产回购也是最新的而无需强行更新?
供参考,我正在学习本教程:http://www.sitepoint.com/one-click-app-deployment-server-side-git-hooks/