如何使用Git设置特定于文件的默认合并策略?

时间:2014-04-17 08:46:02

标签: git merge git-merge branching-strategy

此问题不是针对iOS的,但为了清晰起见,我在此处包含了实际用例

我运行一个名为Foobar的iOS项目,显然是在版本控制之下。 在iOS项目环境中的项目文件中,有一个名为Foobar-Info.plist的东西,一个XML文件,存储有关项目的有趣信息,如版本和我已经建立的版本数。

每次构建项目时,我都会将存储在此文件中的构建计数增加到:

...
<key>BuildCount</key>
<string>2203</string>
<key>CFBundleShortVersionString</key>
<string>0.0.4</string>
<key>CFBundleVersion</key>
<string>0.0.4-release/0.0.4.2203</string>
...

其中&#39; 0.0.4-release&#39;是git-flow分支名称,2203是内部版本号。这在CFBundleVersion字段中使用,因此对于构建来自的地方来说,这一点非常明显。

想象一下,在另一个分支中,自发布以来我已经取得了很多进展,并且相同的字段看起来像:

...
<key>BuildCount</key>
<string>2754</string>
<key>CFBundleShortVersionString</key>
<string>0.0.4</string>
<key>CFBundleVersion</key>
<string>0.0.4-feature/add-quux-and-baz.2754</string>
...

我们说我完成了发布,并将其合并到主线develop分支。

问题

为了获得发布分支中的最新更改,我想将功能分支重新绑定到develop

发生这种情况时,Foobar-Info.plist将在rebase进程中的每次提交时引发冲突。这是因为每次提交都会增加构建号;我必须手动合并,选择手动指定行的最新版本。请注意,3向差异的基本版本也会有所不同。

<string>2000</string>  // Base
<string>2754</string>  // Local   ** always pick this one; it's the latest
<string>2203</string>  // Remote

我如何告诉git对于一个特定文件Foobar-Info.plist,我希望它通过最新的更改来解决我的冲突?

编辑:文件必须保留在源代码管理下。我想保留BuildCount,因为它很好地表明我的项目付出的努力,我想保留它!我知道这个数字只表示完成的最小构建数量,但这对我来说已经足够了。

1 个答案:

答案 0 :(得分:2)

我意识到这是一个迟到的答案,但如果我理解你的问题,那么你要找的是一个.gitattributes文件。

您可以使用.gitattributes文件中的相对路径为特定文件或文件夹指定合并策略,如下所示:

* text=auto
path/to/your/file.plist merge=union