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:忽略跟踪的文件的主要内容,如果未能解决你的问题,请参考以下文章