【问题标题】:Git merge driver problemGit合并驱动问题
【发布时间】:2010-06-23 07:07:57
【问题描述】:

由于我的代码的方式,我正在尝试让 git 允许我进行非常手动的合并(长话短说,它是 explained here)。我几乎按照我想要的方式得到了它,只是在特定情况下缺少了一些东西。不应该太难: 我有自定义驱动程序,可以将 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 并让我做这项工作 - 太棒了。它只是在以下情况下不起作用:

让我的两个分支(ma​​sterdev)提交,并在 dev 中等待一些更改合并到生产中。

  1. 返回master
  2. 重命名dev 中与更改无关的一些文件(比如说,一些 readme.txt 到 manual.txt)并提交
  3. 转到dev 并合并来自master 的这些更改 [ 新驱动程序启动并询问您是否应该将这些配置传递给dev 中的其他文件。您退出 WinMerge 而不保存,因此不会迁移信息。完成查看 XML 后,txt 不会被过滤并在 dev ] 中重命名
  4. 现在回到master,合并dev

在这里,我希望驱动程序再次启动并且对 XML 的行为相同。但由于某种原因,当您尝试 git merge dev 时,它决定自动合并所有内容!

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

请指教..

谢谢

【问题讨论】:

  • 我还没有设法避免 GIT 聪明,但我设法使用 cherry-pick 将名称更改应用到我的 dev 分支,而不会遭受自动合并。

标签: git merge driver


【解决方案1】:

Git 可能会认为:

  • 因为 master 已合并到 dev(即使某些文件未被触及)
  • 从 dev 到 master 的合并很简单,因为剩下的唯一增量是新文件,而不是修改过的文件。

而且由于合并驱动程序只会启动普通文件,因此不会在第二次合并的情况下。

【讨论】:

  • 我同意,这有点道理。想知道有没有什么办法可以防止。我正在研究 .gitattributes 手册,合并退出状态可能会产生一些影响……会做一些实验。
【解决方案2】:

我想我想通了。我这里实际上是一个概念问题。在 git 中无法真正做到,至少不是我想要的方式。

整个工作是为了确保当我的开发周期完成时,我的 devma​​ster 分支处于相同的提交级别。从理论上讲,只有几行特定于他们的环境有所不同,但其他所有代码都是相同的。

如果我猜对了,git 中的每个提交都被标识为该版本的 SHA-1,所以如果任何文件相差一个字符,它就不可能是同一个提交。

我上面描述的问题只是 git 很聪明,并根据我的操作找到一种方法使 master 和 dev 完全相同,从而使其进入最终状态。

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

感谢大家的帮助,

f.

【讨论】:

  • 有趣的反馈。我同意你的结论。
猜你喜欢
  • 2018-10-10
  • 2015-10-07
  • 2012-01-18
  • 1970-01-01
  • 2021-04-25
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多