Git 正在执行合并驱动程序,某些文件没有冲突
Git merge driver is beeing executed without a conflict on some files
我们的自定义合并驱动程序有时会在不冲突的文件上执行(如果您删除合并驱动程序,它们不会有任何冲突,因此在合并驱动程序中您可以只执行 git 合并文件,一切正常。
我们正在使用 Git 2.5.1
我对 Git 合并驱动程序的看法是它们仅针对冲突文件执行?
.git属性:
* merge=keeplocalversion
.git配置条目:
[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
echo
echo
echo
# CURRENT = destination branch (checked out branch)
CURRENT=
# OTHER = source branch
OTHER=
# ANCESTOR = common parent commit
ANCESTOR=
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.
两个冲突的文件有真正的冲突,两个合并的文件没有。
为什么要为这两个文件执行合并驱动程序?
只要需要 3 路合并,自定义合并驱动程序就是 运行,即无论何时自合并基础以来两个合并父项中的文件都已更改。如果您只想 运行 您的逻辑以防发生冲突,您可以调用 git merge-file -p
并且(如果退出代码为 0)用结果覆盖 $1 或(如果退出代码不为 0)运行 你的特殊冲突解决逻辑。
我们的自定义合并驱动程序有时会在不冲突的文件上执行(如果您删除合并驱动程序,它们不会有任何冲突,因此在合并驱动程序中您可以只执行 git 合并文件,一切正常。
我们正在使用 Git 2.5.1
我对 Git 合并驱动程序的看法是它们仅针对冲突文件执行?
.git属性:
* merge=keeplocalversion
.git配置条目:
[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
echo
echo
echo
# CURRENT = destination branch (checked out branch)
CURRENT=
# OTHER = source branch
OTHER=
# ANCESTOR = common parent commit
ANCESTOR=
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.
两个冲突的文件有真正的冲突,两个合并的文件没有。
为什么要为这两个文件执行合并驱动程序?
只要需要 3 路合并,自定义合并驱动程序就是 运行,即无论何时自合并基础以来两个合并父项中的文件都已更改。如果您只想 运行 您的逻辑以防发生冲突,您可以调用 git merge-file -p
并且(如果退出代码为 0)用结果覆盖 $1 或(如果退出代码不为 0)运行 你的特殊冲突解决逻辑。