Git:为什么要使用钩子在服务器上设置repo?

时间:2014-03-08 22:53:35

标签: git version-control web-hosting githooks bluehost

关于在服务器上设置git repo的教程之后的教程基本上都是一样的 - 它们是这样的:

  1. 在您的服务器上安装git
  2. 从服务器的根目录创建git/project.git
  3. 使用git/project.git
  4. 初始化git init --bare
  5. git/project.git/hooks然后touch post-receive
  6. 添加到收件后:#!/bin/bash\n 2 GIT_WORK_TREE=/path/to/your/vc'd/project git checkout -f
  7. 然后制作post-recieve可执行文件:chmod +x post-receive
  8. 返回本地计算机git clone ssh://user@host.com/git/project.git
  9. 添加文件,提交并推送
  10. 这一切都很好,我确实可以推送到git/project.git并最终获得path/to/your/vc'd/project中的文件,但我希望了解...

    为什么要使用这个钩子?

    它使您无法在本地计算机上提取path/to/your/vc'd/project/。 为什么不只是git init本地计算机上的path/to/your/vc'd/projectclone

    此外,如果有人能够解释如何使用此挂钩方法在git pull本地获取path/to/your/vc'd/project功能,那将非常感谢

    谢谢:)

1 个答案:

答案 0 :(得分:2)

最佳做法是推送一个裸仓库,而不是使用工作树的仓库。

这样,用户不会惊讶地看到推送的文件,因为目标仓库将检出一个分支并且用户正在推送另一个分支。

根据用户推送的内容使目标回购更新自动工作树可能过于危险:如果您推错了分支,则立即替换工作树内容。
这不同于推送到一个裸仓库和updating an external working tree through a hook:你可以在所述钩子中做一些控制。

有关详情,请参阅“all about "bare" repos -- what, why, and how to fix a non-bare push”。