关于在服务器上设置git repo的教程之后的教程基本上都是一样的 - 它们是这样的:
git/project.git
git/project.git
git init --bare
git/project.git/hooks
然后touch post-receive
#!/bin/bash\n 2 GIT_WORK_TREE=/path/to/your/vc'd/project git checkout -f
chmod +x post-receive
git clone ssh://user@host.com/git/project.git
这一切都很好,我确实可以推送到git/project.git
并最终获得path/to/your/vc'd/project
中的文件,但我希望了解...
为什么要使用这个钩子?
它使您无法在本地计算机上提取path/to/your/vc'd/project/
。
为什么不只是git init
本地计算机上的path/to/your/vc'd/project
和clone
?
此外,如果有人能够解释如何使用此挂钩方法在git pull
本地获取path/to/your/vc'd/project
功能,那将非常感谢
谢谢:)
答案 0 :(得分:2)
最佳做法是推送一个裸仓库,而不是使用工作树的仓库。
这样,用户不会惊讶地看到推送不的文件,因为目标仓库将检出一个分支并且用户正在推送另一个分支。
根据用户推送的内容使目标回购更新自动工作树可能过于危险:如果您推错了分支,则立即替换工作树内容。
这不同于推送到一个裸仓库和updating an external working tree through a hook:你可以在所述钩子中做一些控制。
有关详情,请参阅“all about "bare" repos -- what, why, and how to fix a non-bare push”。