如何让git只在超过一组特定行发生更改时才将文件识别为已更改?

如何让git只在超过一组特定行发生更改时才将文件识别为已更改?,git,rhapsody,Git,Rhapsody,在我当前的项目中,我试图使用git来控制文本文件的版本,这些文本文件由生成代码的软件使用。这本身并不是问题,问题在于每次我生成代码时,它都会自动使用诸如代码生成日期以及我的姓名之类的属性更新此文件 你可以想象它看起来像这样: SomeHeader{ -SomeProperty : x -NameOfUserThatGenerateCode: myName -DateTimeCodeGenerated: 2013-07-23 06:28 -SomeOtherProperty: y

在我当前的项目中,我试图使用git来控制文本文件的版本,这些文本文件由生成代码的软件使用。这本身并不是问题,问题在于每次我生成代码时,它都会自动使用诸如代码生成日期以及我的姓名之类的属性更新此文件

你可以想象它看起来像这样:

SomeHeader{
  -SomeProperty : x
  -NameOfUserThatGenerateCode: myName
  -DateTimeCodeGenerated: 2013-07-23 06:28
  -SomeOtherProperty: y
}
我想要的是,告诉git,如果名称和代码生成时间都改变了,“没关系”(即:忽略发生了改变),但要关心“SomeProperty”是否改变为“z”

在第二种情况下,它将提交整个文件(使用更新的自动生成文件)

有什么办法吗?我认识到git在“文件”级别进行更改,但我希望可能会有某种预处理挂钩,我可以将其绑定到其中,只有当git尝试比较文件更改时,这种挂钩才会起作用

对于那些关心的人,这将使我能够正确地控制rhapsody文件的版本。

我建议:

  • 保留这些文件的副本(作为私有文件,意味着没有版本控制):您的软件将在这些副本中生成代码
  • a中声明的
    clean
    脚本,如a所示(详细信息请参见)

这个想法是让脚本在git add上检测:

  • “SomeHeader”属性文件的内容
  • 如果该文件的副本已按您需要保留的方式更改(在这种情况下,您将使用该副本的内容覆盖版本化文件)
  • 如果该文件的副本没有显著更改,则不修改实际的属性文件

请注意,“保留副本”部分也可以由内容过滤器驱动程序自动执行,在
git checkout

上自动激活
smudge
脚本。有人已经问过:我看到了stackoverflow文章。。。它不完全符合我的要求,因为我无法摆脱“特殊”属性。我将尝试VonC的回应,看看这是否可行。仔细考虑,虽然我认为这种方法可能可行,但实现Rhapsody似乎是一件令人头痛的事情,因为Rhapsody在不同的目录中有许多文件。我想我要做的是找到一种方法,通过过滤器“删除”不同的部分,这样存储库中只有未更改的部分。