我想使用git管理远程服务器上的某些数据,因此我在那里设置了一个非裸存储库。我可以毫无问题地推送它,并且存储库本身会更新,但实际文件不会被更改/添加/删除。我必须ssh到服务器并做一个
git reset --hard HEAD
让文件结构实际更新。
要做什么?
答案 0 :(得分:7)
你不应该这样做。建议使用裸存储库。换句话说,没有文件签出,只有.git目录本身。然后,您可以将存储库签出到服务器上的其他位置 - 例如,您的Web根目录。这样,你得到:
git最佳实践。根据Git文档,如果你不遵循它,你可以得到“意想不到的结果”。任何做过一些编程工作的人都知道“意外的结果”是代码“可能会吃掉你的孩子,应该不惜一切代价避免。”
如果您计划通过网络服务器访问服务器上的签出文件,则可以提高安全性。
对已签出的代码进行本地修改,并能够快速更改实时签出的代码。您可以尝试直接在存储库上执行此操作,但它会很麻烦并且更容易出错。
无需更新实时服务代码即可更新服务器存储库。这非常重要,如果您正在远程工作并需要向服务器发送内容,然后在为您的实时服务做好准备之前进行进一步的工作,或者您的实时服务代码发生了变化(例如,不同的配置设置) )并且需要将这些更改与repo中的更改合并,但不能立即执行。
我建议采取以下步骤:
答案 1 :(得分:5)
很高兴,现在可以直接在git中支持了!你可以在这个答案中找到我刚刚赞成的详细信息:
https://stackoverflow.com/a/38363683/85360
建议使用
配置遥控器git config receive.denyCurrentBranch updateInstead
这样推送会产生更新的工作副本!
答案 2 :(得分:3)
答案 3 :(得分:1)
Git Version 1.9.1
Ubuntu Server 14.04 LTS
LAMP服务器
每当我的一个Web开发人员将更改推送到服务器时,我将LAMP服务器设置为更新我的Git repo的工作目录。我注意到日志会记录新的提交,但不会更新工作目录。而不是每次更新都手动执行此操作(git checkout -f),这可以在收到推送后自动设置。
使用以下内容在“hooks”文件夹中创建名为“post-receive”的文件:
#!/ bin / sh的
#从远程客户端接收推送后更新工作目录
#这应该指向git工作目录。
GIT_WORK_TREE = / var / www / dev_site git checkout -f
通过在“hooks”文件夹中键入“chmod + x post-receive”来启用执行文件的权限。
现在,当提交被推送到Git仓库时,它将更新工作目录。我的网站现在会在浏览器中访问时显示更改。
我的工作目录是/ var / www / dev_site