Git:忽略跟踪的文件

Posted

技术标签:

【中文标题】Git:忽略跟踪的文件【英文标题】:Git: Ignore tracked files 【发布时间】:2012-06-01 02:37:28 【问题描述】:

我在存储库中有一些跟踪文件,这些文件在构建代码时会自动修改。我不想取消跟踪它们,我只是不希望它们显示为已修改,也不希望它们在我 git add 时被暂存。

这可能吗?

【问题讨论】:

git: can i commit a file and ignore the content changes?的可能重复 如果这些文件是由构建自动生成,那么它们不应该在git中被跟踪。 这里有一个关于 gitignore 的快速教程,您可能会觉得有用:learningpassion.wordpress.com/2016/06/17/… 【参考方案1】:

当然。

git update-index --assume-unchanged [<file> ...]

撤消并重新开始跟踪:

git update-index --no-assume-unchanged [<file> ...]

【讨论】:

如果我对处于这种状态的文件进行修改,会发生什么情况? @haymansfield 命令的帮助页面显示以下内容Git will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually. 有什么方法可以在克隆时应用--assume-unchanged?这样所有用户都会拥有这些文件,但不会在差异中看到对它们的本地更改。 @Tyler - 不,一旦文件被 git 跟踪,它将始终被跟踪,即使该文件出现在 .gitignore 中。我的用例类似于“这是一个文件的基本模板,您将在其中存储您的凭据,现在永远不要提交它”。 @watbywbarif 我将命令 git update-index --no-assume-unchanged $(git ls-files $(git rev-parse --show-toplevel)) 设置为 git 别名。每当我怀疑这是其中的一些恶作剧时,我都会这样做。【参考方案2】:

另一种方法(来自 Seth Robertson 现在已删除的答案,但我发现它很有帮助,因此重新启用它)是维护一个“跟踪”模板文件,然后拥有它的本地未跟踪版本,例如:“config.sample.ini " 或 "config.ini.template" 请参阅 https://gist.github.com/canton7/1423106 以获取完整示例。

那么,如果文件在 git 等中发生更改,则不会有任何问题,您可以在本地未跟踪的文件上使用 .gitignore(最终)。

【讨论】:

【参考方案3】:

在过滤命令中使用 git 属性和 %f 的另一种解决方案:

git config filter.orig.clean "cat %f.orig"
cp filename filename.orig
echo "filename filter=orig" >> .git/info/attributes
echo "filename.orig" >> .git/info/exclude

【讨论】:

您能否详细说明这意味着什么以及它正在做什么? 这为从具有原始文本的“.orig”文件中读取内容的文件添加了过滤器

以上是关于Git:忽略跟踪的文件的主要内容,如果未能解决你的问题,请参考以下文章

git 仅添加修改过的更改并忽略未跟踪的文件

Git设置文件或目录忽略跟踪的三种方式

git update-index --assume-unchanged忽略跟踪

如何忽略未跟踪文件中的 .DS_Store? [复制]

命令告诉 git 不要跟踪某些文件

git:配置要忽略的文件和目录