我的公司只想用KDiff3从Microsoft VSS切换到Git,我们遇到了问题。
众所周知,Git跟踪内容而不是文件。这是一个很棒的功能,我们喜欢这个。但实际上,同一文件的两个不同部分必须由两个程序员同时编辑。 Git试图做一个diff和一个合并,如果它可以将两个编辑插入到final中,它就会这样做。 但有很多时候这两个编辑是相互排斥的。
实施例: 原始版本:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
</Grid>
编辑#1:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Button Content="Click here" Grid.Row="1" />
</Grid>
编辑#2:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<CheckBox Content="Check it!" Grid.Row="1" />
</Grid>
正如您所看到的,这两个版本并没有创建合并冲突,但是 - 如果您对WPF,XAML有点熟悉 - Grid.Row属性将相互“杀死”,从而导致视觉尴尬。
所以这个“冲突”不是在文本中,而是在逻辑中。 当然,这是一个简单的例子,并且具有严格的编码风格,它可以解决。但是我们正在改变版本控制系统,所以我们有很多像这样的代码,所以我们根本无法用新的编码风格重写整个项目。
是否可以告诉Git或KDiff3只检查文件本身是否不同,这是否意味着冲突而不是内容?
谢谢, SANTA
答案 0 :(得分:1)
由于文件的性质(例如数据库文件或代码生成的文件),有些情况下不应对文本文件进行比较。有了这个想法,人们可以将文件看作git作为未比较的二进制数据文件。
在.gitattributes
文件中指定此项以设置比较忽略类型签入情况:
*.xaml binary
有些文件看起来像文本文件,但出于所有意图和目的 被视为二进制数据。例如,Xcode在Mac上投影 包含一个以.pbxproj结尾的文件,它基本上是一个JSON (纯文本JavaScript数据格式)数据集由磁盘写入磁盘 IDE,记录您的构建设置等。虽然是的 技术上是一个文本文件(因为它都是UTF-8),你不想这样做 这样对待它是因为它真的是一个轻量级的数据库 - 你 如果两个人改变它就不能合并内容,并且通常会有差异 没用该文件旨在由机器使用。在 本质上,你想把它当成二进制文件。