【问题标题】:How to detect conflicts between branches in the bare git repository如何检测裸 git 存储库中分支之间的冲突
【发布时间】:2018-09-09 16:06:29
【问题描述】:

目前我需要在服务器端的裸仓库中找到分支之间的冲突(git 无法自动解决)。

我正在尝试使用git read-tree -i -m ${merge_base} ${branch_a} ${branch_b} 生成索引文件,然后通过git ls-files --stage 读取其内容。但是通过阶段号来识别文件的冲突仍然是不够的,因为即使在两个分支上都修改了文件的同一行,如果修改完全相同,git仍然可以自动解决冲突。

如果有人有解决这个问题的想法,或者知道如何使用 git Plumbing Commands 进行 merge 操作,请告诉我。

感谢您的帮助!

【问题讨论】:

  • 识别冲突意味着处理内容,查看哪些部分以冲突的方式发生了变化。内容工作在工作树中完成。您可以使用核心命令实现工作树并运行合并操作,但要获得对您的问题的一个好的答案,您必须确定您究竟想要什么,克隆非常便宜,它就是为此而构建的。做一个本地克隆,做合并,推送结果。完成。

标签: git github merge diff


【解决方案1】:

试试git merge-tree

这是一个 bash 函数示例,它以两个分支作为参数。如果有任何冲突,则输出“冲突”,否则输出“无冲突”。功能不够健壮。

function testconflict() {
    foo=$1
    bar=$2
    mergebase=$(git merge-base $foo $bar)
    if [ "$mergebase" = "" ];then
        #in case foo and bar have no common ancestor, use the empty tree as the merge base
        mergebase=4b825dc642cb6eb9a060e54bf8d69288fbee4904
    fi
    #test if the output has conflict markers of "merge" style
    git merge-tree $mergebase $foo $bar | xargs | 
        if grep -oe '<<<<<<<.*=======.*>>>>>>>';then
            echo conflict
        else
            echo no conflict
        fi 
}

【讨论】:

  • 在第二个命令中:“git merge-base $mergebase $foo $bar”你可能的意思是“git merge-tree...”
  • 这个答案正是我要找的!非常感谢您的帮助。@ElpieKay @max630
  • @zyang 此功能并未涵盖所有情况。请调整grep 部分。它可能不适用于冲突的二进制文件。
  • @ElpieKay 感谢提醒我有关冲突的二进制文件,我会小心处理。但是,git merge-tree 似乎在没有冲突的情况下会输出二进制文件的所有内容,这在二进制文件很大时可能会出现问题。有什么方法可以控制git merge-tree 命令的输出格式吗?关于这个命令的信息太少了,git官网甚至在Plumbing Commands列表中都没有提及。
  • @zyang 我用两个小二进制文件做了一个测试。输出不包括二进制文件的任何内容。它只打印 warning: Cannot merge binary files: foo.img (.our vs. .their) 没有冲突标记。我对命令的所有了解都在帮助文档中。
【解决方案2】:

我只会检查 git merge otherbranch --no-ff --no-commit。然后你会看到会发生什么,如果你面临一个大混乱,你可以恢复。 我不会使用管道命令。如果这很关键,请看一下 合并的作用。

【讨论】:

  • 也感谢您的回复@Christoph。考虑到git merge 在裸仓库中不可用,所以git merge-tree 对我更有帮助。
  • @zyang 谢谢你让我意识到了裸回购的细微差别;-)
猜你喜欢
  • 2012-05-04
  • 2015-02-22
  • 2015-09-30
  • 2022-11-03
  • 2013-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多