Git合并驱动问题

时间:2010-06-23 07:07:58

标签: git merge driver

由于我的代码方式(长篇故事,explained here),我正试图让git允许我非常手动合并。我几乎得到了我想要的方式,只是在特定情况下缺少的东西。不应该太难: 我有自定义驱动程序使用WinMerge,例如c:/wm/winmerge.exe $1 $2 $3(进入c:/wm/wmrg.sh),git config merge.mnl.driver = "c:/wm/wmrg.sh %B %A %A"echo *.xml merge=mnl > $GIT_DIR/info/attirbutes

现在当我git merge dev时,它打开了WinMerge让我做的工作 - 非常棒。它只是在以下情况下不起作用:

将我的两个分支机构( dev )提交,并在 dev 中等待一些更改合并到生产中。

  1. 返回master
  2. dev中重命名与更改无关的一些文件(例如,readme.txt到manual.txt)并提交
  3. 转到dev并合并master中的这些更改 [新驱动程序启动并询问您是否应将这些配置传递给dev中的其他文件。您在不保存的情况下退出WinMerge,因此无法迁移信息。查看完XML后,txt不会被过滤,并在dev ]中重命名
  4. 现在回到master,合并dev
  5. 在这里,我希望驱动程序再次启动,并且对XML的行为相同。但是出于某种原因,当你尝试git merge dev时,它会决定自动合并它!

    是否有任何'每个分支'配置让我来这里?也许在git意识到我在最后一次合并之后没有做任何改变它只能在某个方向覆盖文件..甚至,所使用的合并类型是基于一些“较旧的”规则,它将这种情况视为“微不足道”和无论内容是什么,都要决定保留哪个文件......

    请告知..

    感谢

2 个答案:

答案 0 :(得分:1)

Git可能会考虑:

  • 因为master已合并到dev(即使某些文件未被触及)
  • 从dev到master的合并是一个微不足道的,因为唯一的delta是新文件,而不是修改过的文件。

由于合并驱动程序仅针对常见文件启动,因此在第二次合并时不会。

答案 1 :(得分:1)

我想我弄清楚了..我这里所拥有的实际上是一个概念问题。它不能用git完成,至少不是我想要的方式。

这一切努力是为了确保在我的开发周期完成后,我在同一提交级别拥有 dev master 分支。理论上,只有几行特别适合他们的环境,但仍然,所有其余的代码是相同的。

如果我说得对,那么git中的每个提交都会从该版本中识别为SHA-1,因此如果任何文件因一个字符而异,则它不能是相同的提交。

我上面描述的问题是git是聪明的,并且根据我的行为找到一种方法来使master和dev 完全相同,从而使它进入最终状态。 / p>

正如我评论的那样,我设法使用cherry-pick来回应用特定更改,但是正确跟踪 dev 的唯一真正方法是使用关键字扩展过滤器(如VonC herehere以及其他许多其他人所述)

感谢所有帮助,

F。