我把以前由 Git 跟踪的文件放在.gitignore 列表中. 但是,文件在编辑后仍然显示在 git 状态。


当前回答

例如,在使用 CVS 时,这个问题不存在, CVS 将信息存储为基于文件的变更列表。

这两篇文章对我很有帮助:

git assume-unchanged vs skip-worktree 以及如何用 Git 忽略跟踪文件的变化

git update-index --skip-worktree <file>

从此,此文件中的所有本地变更将被忽视,不会去远程。如果文件在远程中被更改,冲突将发生,当 git pull. Stash 不会工作。

git update-index --no-skip-worktree <file>
git stash
git pull

文件内容将被远程内容取代. 将您的更改从安全地点调整到文件,然后再次执行:

git update-index --skip-worktree <file>

其他回答

我知道这个答案已经迟到了很多年,但是我决定我想在注意到可能有不同的答案后做出贡献,取决于用户想要的结果。

如何强迫Git完全忘记这一点?

这取决于下列哪个是所需的结果:

停止跟踪文件并将其从存储库中删除,或停止跟踪文件,而不会从存储库中删除(可能其他合作伙伴可以下载)

因为(一),解决方案就像上面的马特的答案一样;因为(二),请参见康斯坦丁的答案。

来源: https://stackabuse.com/git-stop-tracking-file-after-adding-to-gitignore/

移动或复制文件到一个安全的位置,所以你不会失去它。

文件仍然会出现,如果你转到以前的任务之一,或另一个分支,它没有被删除. 但是,在所有未来的任务,你不会再看到文件. 如果文件在 Git 忽略,那么你可以将其返回文件夹, Git 不会看到它。

要总结一下:

您的应用程序正在寻找一个被忽略的文件 config-overide.ini 并使用它在承诺的文件 config.ini (或替代,寻找 ~/.config/myapp.ini,或 $MYCONFIGFILE) 承诺文件 config-sample.ini 并忽略文件 config.ini,有脚本或类似的复制文件如有必要。

答案来自Matt Frear是最有效的IMHO. 下面只是一个PowerShell脚本给那些在Windows只删除文件从他们的Git存储库,符合他们的排除列表。

# Get files matching exclusionsfrom .gitignore
# Excluding comments and empty lines
$ignoreFiles =  gc .gitignore | ?{$_ -notmatch  "#"} |  ?{$_ -match  "\S"} | % {
                    $ignore = "*" + $_ + "*"
                    (gci -r -i $ignore).FullName
                }
$ignoreFiles = $ignoreFiles| ?{$_ -match  "\S"}

# Remove each of these file from Git
$ignoreFiles | % { git rm $_}

git add .

如果你不想使用 CLI 并在 Windows 上工作,一个非常简单的解决方案是使用 TortoiseGit. 它在菜单中有“删除(保持本地)”操作,它工作得很好。