.gitignore 基于内容的文件
.gitignore files based on their content
我正在寻找一种方法来忽略 git 中具有特定路径的文件。这些是XML个文件,全部放在一起,但是一些引用文件夹在.git中忽略。我想排除引用这些文件夹的 XML 个文件。
仅使用 .gitignore 是否可行?我可以想象其他方法来实现这一点,比如用脚本强制保留这些文件,但这并不有利。
不,Git 不允许您根据内容忽略文件。这将涉及读取工作树中的每个文件以确定它是否具有特定字符串,并且在许多情况下,您可能拥有大量生成的大型文件,因此这样的操作将非常昂贵。 .gitignore
的目标之一是通过不考虑不感兴趣的文件来提高性能。
您需要采用其他解决方案,例如将这些文件放在一个文件夹中或按照特定约定命名它们,以便您可以使用 path-based 模式忽略它们。
老实说,我不太明白你所说的“用脚本强制保存这些文件”是什么意思,所以也许这是你不喜欢的方式:
我建议通过 pre-commit hook 和 git add
自动生成(第二个).gitignore
文件所需的 XML 文件,例如:
grep -l <referenceToFolderToAvoid_1> <pathToXmls>/*.xml > <pathToXmls>/.gitignore
...
grep -l <referenceToFolderToAvoid_N> <pathToXmls>/*.xml >> <pathToXmls>/.gitignore
git add <pathToXmls>/*.xml
第二个 .gitignore
文件可以使用您已经存在的 .gitignore
文件的内容生成,而不是手动输入所有路径。
我正在寻找一种方法来忽略 git 中具有特定路径的文件。这些是XML个文件,全部放在一起,但是一些引用文件夹在.git中忽略。我想排除引用这些文件夹的 XML 个文件。
仅使用 .gitignore 是否可行?我可以想象其他方法来实现这一点,比如用脚本强制保留这些文件,但这并不有利。
不,Git 不允许您根据内容忽略文件。这将涉及读取工作树中的每个文件以确定它是否具有特定字符串,并且在许多情况下,您可能拥有大量生成的大型文件,因此这样的操作将非常昂贵。 .gitignore
的目标之一是通过不考虑不感兴趣的文件来提高性能。
您需要采用其他解决方案,例如将这些文件放在一个文件夹中或按照特定约定命名它们,以便您可以使用 path-based 模式忽略它们。
老实说,我不太明白你所说的“用脚本强制保存这些文件”是什么意思,所以也许这是你不喜欢的方式:
我建议通过 pre-commit hook 和 git add
自动生成(第二个).gitignore
文件所需的 XML 文件,例如:
grep -l <referenceToFolderToAvoid_1> <pathToXmls>/*.xml > <pathToXmls>/.gitignore
...
grep -l <referenceToFolderToAvoid_N> <pathToXmls>/*.xml >> <pathToXmls>/.gitignore
git add <pathToXmls>/*.xml
第二个 .gitignore
文件可以使用您已经存在的 .gitignore
文件的内容生成,而不是手动输入所有路径。