Git合并驱动程序正在执行而不会在某些文件上发生冲突

时间:2016-02-18 10:25:18

标签: git git-merge merge-conflict-resolution

有时我们的自定义合并驱动程序会在没有冲突的文件上执行(如果删除合并驱动程序,它们不会有任何冲突,因此在合并驱动程序中,您只需执行git merge-file一切都很好。)

我们正在使用Git 2.5.1

我对Git合并驱动程序的看法是它们只针对冲突的文件执行?

.gitattributes:

* merge=keeplocalversion

.gitconfig条目:

[merge "keeplocalversion"]
        name = "Keep local pom version"
        driver = /home/atlstash/pommergetreiber/pommergedriver.sh %A %B %O %P

pommergedriver.sh:

#!/bin/bash
echo "==== STARTING MERGE DRIVER ===="

echo $1
echo $2
echo $3
echo $4

# CURRENT = destination branch (checked out branch)
CURRENT=$1
# OTHER = source branch
OTHER=$2
# ANCESTOR = common parent commit
ANCESTOR=$3

FULL_BRANCH_NAME="$(git symbolic-ref HEAD )"
if [ "$?" -ne "0" ]; then
        echo "Detecting branch name failed!"
        exit 1
fi
DESTINATION_BRANCH="$(echo $FULL_BRANCH_NAME | sed 's%refs/heads/%%')"
if [ "$?" -ne "0" ]; then
        echo "Transforming destination branch failed!"
        exit 1
fi

DESTINATION_BRANCH="$(echo $FULL_BRANCH_NAME | sed 's%refs/heads/%%')"
git merge-file --diff3 --marker-size=25 -L $DESTINATION_BRANCH -L "COMMON BASE" -L "SOURCE BRANCH" "${CURRENT}" "${ANCESTOR}" "${OTHER}"

导致以下行为的原因是什么:

<stash>@<machine>:<project>> git merge origin/feature/<branch>
==== STARTING MERGE DRIVER ====
.merge_file_bm9SCU
.merge_file_MU9B7n
.merge_file_IsOa8q
<project>/...BusinessLogicPositionImpl.java
==== STARTING MERGE DRIVER ====
.merge_file_RjSwel
.merge_file_WvT0MO
.merge_file_baS3FR
<project>/...AbstimmungRestServiceImpl.java
==== STARTING MERGE DRIVER ====
.merge_file_ZWlr2L
.merge_file_22faFf
.merge_file_14SIpi
<project>/...AbstimmungRestService.java
==== STARTING MERGE DRIVER ====
.merge_file_yd2o1c
.merge_file_zf9wHG
.merge_file_5UohlJ
<project>/...WPDAbstimmposten.java
Auto-merging <project>/...BusinessLogicPositionImpl.java
CONFLICT (content): Merge conflict in <project>/...BusinessLogicPositionImpl.java
Auto-merging <project>/...AbstimmungRestServiceImpl.java
CONFLICT (content): Merge conflict in <project>/...AbstimmungRestServiceImpl.java
Auto-merging <project>/...AbstimmungRestService.java
Auto-merging <project>/...WPDAbstimmposten.java
Automatic merge failed; fix conflicts and then commit the result.

两个冲突的文件存在真正的冲突,两个合并的文件没有。

为什么要为这两个文件执行合并驱动程序?

1 个答案:

答案 0 :(得分:1)

每当需要3向合并时,即每当合并基础中的两个合并父项中的文件都发生了变化时,就会运行自定义合并驱动程序。如果您只想在发生冲突时运行逻辑,可以调用git merge-file -p和(如果退出代码为0)用结果覆盖$ 1或(如果退出代码不为0)运行特殊冲突解决方案逻辑

相关问题