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



这个问题不是特定于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>
...

其中"0.0.4-release"是git流分支名称,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,因为它很酷地表明了我在项目中付出的努力,我想保留它!我知道这个数字只表示完成的最小构建数量,但这对我来说已经足够了。

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

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

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

相关内容

  • 没有找到相关文章

最新更新