我把以前由 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 filter-branch 完成了这一点,我所使用的准确命令从 man 页面上取出:

警告:此将从您的整个历史中删除文件

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' HEAD

这个命令将恢复整个命令历史,在每个命令之前执行 git rm 以便摆脱所指定的文件. 不要忘记在运行命令之前备份它,因为它将失去。

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

我总是使用这个命令去删除那些未追踪的文件. 单线,Unix风格,清洁输出:

git ls-files --ignored --exclude-standard | sed 's/.*/"&"/' | xargs git rm -r --cached

它列出所有被忽略的文件,取代每个输出线与引用的线,而不是处理路径的空间,并将一切转移到 git rm -r -cached 以从指数中删除路径 / 文件 / 指南。

要总结一下:

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

BFG 专门用于从 Git 存储库中删除不需要的数据,如大文件或密码,因此它有一个简单的旗帜,将删除任何大历史文件(不属于您的当前文件):‘--strip-blobs-bigger-than’

java -jar bfg.jar --strip-blobs-bigger-than 100M

如果你想按名称指定文件,你也可以这样做:

java -jar bfg.jar --delete-files *.mp4

BFG 比 git 过滤器行业快 10 至 1000 倍,通常更容易使用 - 查看完整使用指示和示例,以获取更多详细信息。

来源:库存大小减少