.git根据文件内容忽略文件

.git根据文件内容忽略文件,git,gitignore,Git,Gitignore,我正在寻找一种方法来忽略git中文件中有特定路径的文件。这些都是存储在一起的XML文件,但有些引用文件夹位于.gitignore中。我想排除引用这些文件夹的XML文件 完全使用.gitignore是否可以实现这一点?我可以想象其他方法来实现这一点,比如强制使用脚本保存这些文件,但这并不有利。不,Git不允许您根据文件内容忽略文件。这将涉及读取工作树中的每个文件,以确定它是否具有特定的字符串,并且在许多情况下,您可以拥有大量生成的大型文件,因此这样的操作将非常昂贵。.gitignore的目标之一是

我正在寻找一种方法来忽略git中文件中有特定路径的文件。这些都是存储在一起的XML文件,但有些引用文件夹位于.gitignore中。我想排除引用这些文件夹的XML文件


完全使用.gitignore是否可以实现这一点?我可以想象其他方法来实现这一点,比如强制使用脚本保存这些文件,但这并不有利。

不,Git不允许您根据文件内容忽略文件。这将涉及读取工作树中的每个文件,以确定它是否具有特定的字符串,并且在许多情况下,您可以拥有大量生成的大型文件,因此这样的操作将非常昂贵。
.gitignore
的目标之一是通过不考虑不感兴趣的文件来提高性能


您需要采用另一种解决方案,例如将这些文件放在一个文件夹中,或使用特定的约定命名它们,以便您可以使用基于路径的模式忽略它们。

老实说,我不太理解您所说的“用脚本强制保存这些文件”的意思,因此可能这是您不喜欢的方式: 我建议通过和
git自动生成(第二个)
.gitignore
文件,添加所需的XML文件,如:

grep -l <referenceToFolderToAvoid_1> <pathToXmls>/*.xml > <pathToXmls>/.gitignore
...
grep -l <referenceToFolderToAvoid_N> <pathToXmls>/*.xml >> <pathToXmls>/.gitignore

git add <pathToXmls>/*.xml
grep-l/*.xml>/.gitignore
...
grep-l/*.xml>>/.gitignore
git add/*.xml

第二个
.gitignore
文件可以使用已经存在的
.gitignore
文件的内容生成,而不是手动输入所有路径。

是的,我也这么认为。不过,如果您能够标记具有特定扩展名的文件夹或文件,性能问题就不会那么严重了。我的意思是,按照您描述的方式,通过批处理文件查找这些文件。尽管我将把它挂在与我的用例相关的其他地方,而不是预先提交。谢谢你的建议!