我想使用git来管理远程服务器上的一些数据,所以我在那里设置了一个非裸存储库.我可以毫无问题地推送它,并且存储库本身会更新,但实际文件不会被更改/添加/删除.我必须ssh到服务器并做一个
git reset --hard HEAD
获取文件结构以实际更新.
该怎么办?
你不应该这样做.建议使用裸存储库.换句话说,没有文件签出,只有.git目录本身.然后,您可以将存储库签出到服务器上的其他位置 - 例如,您的Web根目录.这样,你得到:
git最佳实践.根据Git文档,如果你不遵循它,你可以得到"意想不到的结果".任何做过一些编程工作的人都知道"意外的结果"代码"可能会吃掉你的孩子,应该不惜一切代价避免".
如果您计划从Web服务器访问服务器上的签出文件,则可以提高安全性.
您签出的代码的本地修改,以及快速更改实时签出代码的功能.您可以尝试直接在存储库上执行此操作,但它会很麻烦并且更容易出错.
无需更新实时服务代码即可更新服务器存储库.这非常重要,如果您正在远程工作并需要向服务器发送内容,然后在为您的实时服务做好准备之前进行进一步的工作,或者您的实时服务代码发生了变化(例如,不同的配置设置)并且需要将这些更改与repo中的更改合并,但不能立即执行.
我建议采取以下步骤:
关于设置裸存储库的git文档
查看您的回购中的代码到您的实时服务目标目录
在更新存储库时,设置一个git hook(post-commit应该是正确的IIRC)来更新您的实时服务.它应该cd到实时服务目录,并执行git pull --rebase,并可能设置一些文件权限.
从现在开始,只需将代码从开发框推送到repo.
幸运的是,现在可以直接在git中支持了!你可以在这个答案中找到我刚刚赞成的详细信息:
/sf/ask/17360801/
它建议配置遥控器
git config receive.denyCurrentBranch updateInstead
所以推送导致更新的工作副本!