我克隆了GHC(格拉斯哥Haskell编译器)存储库.为了构建编译器,您需要几个库,它们都可以作为git存储库使用.为了方便现场使用,GHC黑客包括一个脚本sync-all,在执行时会更新所有相关的存储库.
现在我的问题是:./sync-all pull我git pull自动完成后如何让git执行?我听说过使用挂钩,但我真的不知道,我该怎么办.
Von*_*onC 27
如果您需要git pull在客户端(您的机器)之后执行脚本,那么就没有可靠的解决方案.
在合并后的客户端钩(这里所说的)不会被每个拉触发(例如,不是在拉底垫中,而不是在快进合并的情况下)
因此,包装两个命令的别名仍然是一种可能的解决方法.
原始答案(2011)
如果您需要在服务器端,那么在每次推送到裸仓库(在服务器上)之后,您将检查裸仓库并从工作树(在服务器上)拉出:
A post-receive或post-update钩子通常用于这种任务,在每次推送后执行.
差异及其后的接收和更新后的钩子是在参数:一个post-receive将获得两老除了自己的名字所有裁判的新值.
缺少的部分是:钩子在哪里执行?
来自(伟大的)SO撰稿人Mark Longair的博客文章" Missing git hooks documentation " 对此有所了解:
当前工作目录将是git目录.
- 所以,如果这是一个名为"
/src/git/test.git/" 的裸存储库,那将是当前的工作目录 - 如果这是一个非裸存储库并且工作树的顶层是"/home/mark/test/"那么当前工作目录将是"/home/mark/test/.git/"克里斯·约翰森细节在他的SO回答:"如果
–-git-dir或GIT_DIR有规定,但没有的-–work-tree,GIT_WORK_TREE并且core.worktree,被指定,当前的工作目录被认为是你的工作树的顶端目录"换句话说,您的工作树也将是当前目录("
.git"目录),这几乎肯定不是您想要的.
确保您的hook/post-receive脚本一旦创建并可执行,就会设置GIT_WORK_TREE正确的路径,以便您./sync-all pull在正确的目录中执行(即不是" xxx.git").
nul*_*ity 15
当你运行时git pull,git实际上会进行一次提取,然后进行合并.这意味着您可以在post-merge完成提取时使用挂钩执行脚本.
要进行此设置,您只需在存储库的.git/hooks/目录中创建一个可执行脚本即可post-merge.
请注意,如果合并因冲突而失败,则不会运行此脚本.
| 归档时间: |
|
| 查看次数: |
25331 次 |
| 最近记录: |