如何在推送后重置遥控器上的分阶段更改?

时间:2012-04-10 09:44:24

标签: git

我有两个非裸git存储库,一个是我开发的本地机器,另一个是服务器上的,我构建的。在本地存储库中,我有一个带有“git push -f server”的post-commit钩子。每次我在本地计算机上提交时,都会将更改推送到服务器。 不幸的是,在远程git阶段“恢复”我的更改。我必须手动在服务器上执行“git reset HEAD --hard”,这非常烦人。如何告诉git接受更改而不进行恢复或如何在服务器上自动重置?我试图在服务器上添加一个post-receive挂钩,但它不起作用。

我发现了类似的问题How do I push to the current git branch on remote, and have changes reflected immediately?,但没有帮助(

1 个答案:

答案 0 :(得分:0)

您可以选择:

  • 直接推送到非裸仓库,在这种情况下,你需要一个post-receive hook来检查新的HEAD,如“Using Git to manage a web site”中所述并在“{{3}中引用” }”。
    正如您所指出的那样,给予挂钩执行是关键。
    $ cat > hooks/post-receive
    #!/bin/sh
    GIT_WORK_TREE=/var/www/www.example.org git checkout -f
    $ chmod +x hooks/post-receive
  • 或者,你可以推送到一个裸仓库,并有一个钩子切换到实时非裸仓库,来自裸仓的新提交:
    请参阅“Git Post-Receive Hook for Website Staging”(您可以忽略子模块方面)

我倾向于采用第二种方法,这似乎比在非裸存储库上直接更改HEAD更“干净”。