Git:如何在推送到远程目录时更新?

Fel*_*xyz 7 git version-control git-push

我想使用git来管理远程服务器上的一些数据,所以我在那里设置了一个非裸存储库.我可以毫无问题地推送它,并且存储库本身会更新,但实际文件不会被更改/添加/删除.我必须ssh到服务器并做一个

git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)

获取文件结构以实际更新.

该怎么办?

Lee*_*e B 8

你不应该这样做.建议使用裸存储库.换句话说,没有文件签出,只有.git目录本身.然后,您可以将存储库签出到服务器上的其他位置 - 例如,您的Web根目录.这样,你得到:

  • git最佳实践.根据Git文档,如果你不遵循它,你可以得到"意想不到的结果".任何做过一些编程工作的人都知道"意外的结果"代码"可能会吃掉你的孩子,应该不惜一切代价避免".

  • 如果您计划从Web服务器访问服务器上的签出文件,则可以提高安全性.

  • 您签出的代码的本地修改,以及快速更改实时签出代码的功能.您可以尝试直接在存储库上执行此操作,但它会很麻烦并且更容易出错.

  • 无需更新实时服务代码即可更新服务器存储库.这非常重要,如果您正在远程工作并需要向服务器发送内容,然后在为您的实时服务做好准备之前进行进一步的工作,或者您的实时服务代码发生了变化(例如,不同的配置设置)并且需要将这些更改与repo中的更改合并,但不能立即执行.

我建议采取以下步骤:

  • 关于设置裸存储库的git文档
  • 查看您的回购中的代码到您的实时服务目标目录
  • 在更新存储库时,设置一个git hook(post-commit应该是正确的IIRC)来更新您的实时服务.它应该cd到实时服务目录,并执行git pull --rebase,并可能设置一些文件权限.
  • 从现在开始,只需将代码从开发框推送到repo.


Bra*_*des 6

幸运的是,现在可以直接在git中支持了!你可以在这个答案中找到我刚刚赞成的详细信息:

/sf/answers/2685457841/

它建议配置遥控器

git config receive.denyCurrentBranch updateInstead
Run Code Online (Sandbox Code Playgroud)

所以推送导致更新的工作副本!

  • 万分感谢!我真的很感激 SO 让我能够跟踪我忘记询问过的事情。我认为已接受的答案中的许多观点仍然有效(也许不是“签出代码的实时更改”),但对于许多可能不是“生产使用”的情况来说,这确实很有用。 (2认同)