如何设置一个Git钩子,然后推到ssh://peter@foo.com/~/bar.com.git,它会去〜/ bar.com并做一个git pull?
我被build议在远程服务器上设置
foo.com/~/bar.com # live webpage content foo.com/~/bar.com.git # a bare repo
所以,从我的本地机器上,我可以做一个
git push
并将它推送到远程机器上的foo.com/~/bar.com.git
(完整path是ssh://peter@www.foo.com/~/bar.com.git
如何添加一个钩子 ,以便推后,远程服务器将cd ~/bar.com
并做一个git pull
以便所有的内容被更新(本地机一样)? (不需要像Mercurial那样运行git update
?)
(这是相关的不能git克隆服务器上的文件夹,然后编辑和git推?现在我可以ssh到foo.com
和cd ~/bar.com
然后在那里等着做一个git pull
本地机器,但自动完成会很高兴)
更新 :如果您知道具体细节并且怎么做,请只发布一个答案。 如果你谷歌和发布第一或第二谷歌的结果在这里,它不会帮助。
更新2 :我去了~/bar.com.git/hooks
并添加一个新的文件post-receive
的内容:
#!/bin/bash cd ~/bar.com git pull ../bar.com.git master
还有chmod 755 post-receive
,如果我在本地机器上编辑一个文件,然后git com -m "ok"
和git push
,它不会把这个改变放到远程机器的文件夹~/bar.com
你可以添加一个post-receive
钩子到这个~/bar.com.git
。 要做到这一点,添加到~/bar.com.git/hooks/
目录的一个可执行文件post-receive
与内容:
#!/bin/sh unset $(git rev-parse --local-env-vars) cd ~/bar.com git pull
确保 post-receive
文件具有可执行位(例如755)。
现在,无论什么东西推到~/bar.com.git
回购, ~/bar.com
回购是自动更新。
也可以看看
- 得到“致命的:不是一个混帐存储库:'。'”当使用后更新钩执行'git拉'在另一个回购
- Git – 后接收钩与git拉“无法find一个有效的git目录”
了解为什么取消设置一些环境variables是必要的。
我使用下面post-update
脚本(请确保您设置可执行位):
#!/bin/sh rm -rf ~/public_html/xxx git-archive --format=tar --prefix=xxx master | tar x -C ~/public_html
它做的事情,但有一个简短的窗口,当网站不可用。 直接在你的~/bar.com
做git pull
会暴露git的.git
目录,所以要确保你在http服务器上阻止它,或者把.git
保留在目录层次结构中更高的地方。 就像是:
~ \ - repo \ - .git - bar.com \ - your content