Git合并冲突的钩子

20

有没有可以用于合并冲突的git钩子?在git merge失败后,编写一个脚本打开所有存在冲突的文件,这将非常好。然而,在出现冲突时,post-merge钩子不会运行,并且从我在githooks手册中看到的内容来看,也没有其他适用的钩子。

我想知道是否有遗漏的东西,或者除了将'git merge'别名化为函数之外是否还有其他选择。

谢谢, Chris


1
你可以使用一个自定义的合并工具,它只是一个编辑器而不是真正的三方合并工具,并在出现冲突时运行 git mergetool - CB Bailey
好的建议。我没有考虑过这个,因为我真的不喜欢任何合并工具,并且发现直接在编辑器中解决我的冲突更好。我在这里找到了一个可能的解决方案,我认为自定义mergetool绝对是正确的方法。问题是,我该怎么处理我的问题?我应该在页面底部点击“回答你的问题”,还是什么都不做? - flooose
问题没有直接回答,澄清可能会有所帮助。Git支持挂钩的事件包括(基于默认的.git/hook/*.sample文件):
  1. post-checkout
  2. post-commit
  3. post-merge
  4. post-receive
  5. post-update
  6. pre-applypatch
  7. pre-commit
  8. pre-push
  9. pre-rebase
在合并冲突期间,其中一个或多个适用吗?由于Git在合并冲突期间强制使用“root”所有权和有限权限,普通用户无法解决合并冲突。合并冲突挂钩将允许设置可用的所有权和权限。
- pd_au
我从来没有以root身份运行git,如果你所说的是真的,我应该会遇到权限问题。 - flooose
2个回答

2

正如Charles Bailey所建议的那样,最好的方法是通过自定义合并工具来完成。使用这个指南,我想出了一个简单的方法,可以让我的编辑器打开合并冲突:

[merge]
  tool = emacs
[mergetool "emacs"]
  cmd = $editor \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"

自从Charles Bailey没有回答我该如何给他这个功劳时,我希望这是一个合适的方式来最终关闭这个问题。

0

我认为可能有两种方法,正如floose所提到的,您可以编辑您的合并工具,或者您可以使用以下命令创建另一个别名:

for i in $(git ls-files -u | cut -f 2 | sort -u); do $EDITOR $i; done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接