防止git自动文件合并

时间:2015-09-14 13:19:26

标签: wpf git xaml

我的公司只想用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

1 个答案:

答案 0 :(得分:1)

由于文件的性质(例如数据库文件或代码生成的文件),有些情况下不应对文本文件进行比较。有了这个想法,人们可以将文件看作git作为未比较的二进制数据文件。

.gitattributes文件中指定此项以设置比较忽略类型签入情况:

*.xaml binary

引用Git - Git Attributes

  

有些文件看起来像文本文件,但出于所有意图和目的   被视为二进制数据。例如,Xcode在Mac上投影   包含一个以.pbxproj结尾的文件,它基本上是一个JSON   (纯文本JavaScript数据格式)数据集由磁盘写入磁盘   IDE,记录您的构建设置等。虽然是的   技术上是一个文本文件(因为它都是UTF-8),你不想这样做   这样对待它是因为它真的是一个轻量级的数据库 - 你   如果两个人改变它就不能合并内容,并且通常会有差异   没用该文件旨在由机器使用。在   本质上,你想把它当成二进制文件。