Git:忽略跟踪的文件

hay*_*eld 161 git

我在存储库中有一些跟踪文件,这些文件在构建代码时会自动修改.我不想解开它们,我只是不希望它们显示为已修改,我不希望它们在我git add时上演.

这可能吗?

Nic*_*eys 253

当然.

git update-index --assume-unchanged [<file> ...]
Run Code Online (Sandbox Code Playgroud)

要撤消并再次开始跟踪:

git update-index --no-assume-unchanged [<file> ...]
Run Code Online (Sandbox Code Playgroud)

  • @Tyler - 不,一旦git跟踪文件,它将始终被跟踪,即使该文件出现在.gitignore中.我的用例类似于"这里是您存储凭据的文件的基本模板,现在永远不会提交它". (9认同)
  • 这非常好,直到您忘记了这一点,几年后,当您忘记了这个命令的存在以及您为什么要这样做之后,它就会给您带来打击。 (6认同)
  • @watbywbarif我将命令git update-index --no-assume-unchanged $(git ls-files $ {git rev-parse --show-toplevel))设置为git别名。每当我怀疑是其中一些恶作剧时,我都会这样做。 (5认同)
  • 如果我对它们进行修改,这种状态下的文件会发生什么? (3认同)
  • 有什么方法可以在克隆时应用`--assume-unchanged`吗?这样所有用户都可以拥有这些文件,但不会在差异中看到对它们的本地更改. (3认同)
  • @haymansfield命令的帮助页面说下面的```Git将失败(优雅),以防它需要在索引中修改这个文件,例如在提交时合并; 因此,如果假定未跟踪的文件在上游被更改,您将需要手动处理该情况.`` (2认同)
  • 这有一个令人讨厌的问题。如果您修改了这样的文件,那么您尝试切换分支,git 会说 nuh-uh,如果您这样做,您的更改将被覆盖。所以你去git stash,但当然你没有什么可藏的。我不知道除了重新开始跟踪之外是否还有其他方法可以解决此问题。 (2认同)
  • 有一个替代的“--skip-worktree”标志代替“--assume-unchanged”,以防其他人修改该文件。更多这里 /sf/ask/954159461/ Between-assume-unchanged-and-skip-worktree (2认同)

Ger*_*ard 30

接受的答案不正确。--assume-unchanged只会导致 Git 跳过某些(有时是昂贵的)文件系统检查 - 它不能保证 Git 将文件显示为“未更改”。

然而,相同的命令但带有选项--skip-worktree确实有效。因此,为了防止已跟踪但已更改的文件在 Git 状态中显示为已更改,请使用

git update-index --skip-worktree [<file> ...]
Run Code Online (Sandbox Code Playgroud)

要撤消并开始再次将其显示为更改:

git update-index --no-skip-worktree [<file> ...]
Run Code Online (Sandbox Code Playgroud)

另请参阅本答案中引用的 Git 维护者的电子邮件、Git 文档git-update-index以及FallenGameR 的博客文章,了解两者如何对不同场景做出反应。


rog*_*ack 7

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

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


koc*_*t9i 5

在filter命令中使用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
Run Code Online (Sandbox Code Playgroud)

  • 您能否详细说明这意味着什么以及它在做什么? (16认同)