我的存储库中有一个现有的Visual Studio项目。我最近在我的项目下添加了一个.gitignore文件,我假设它告诉Git忽略文件中列出的文件。
我的问题是,所有这些文件都已经被跟踪,据我所知,Git不会忽略一个已经被跟踪的文件,直到一个规则被添加到这个文件中来忽略它。
建议使用:git rm --cached并手动取消跟踪它们,但这将花费我很长时间来逐个查看它们。
git rm --cached
我考虑过删除存储库并重新创建它,但这次使用.gitignore文件,但一定有更好的方法来做到这一点。
下面是一种“取消跟踪”任何文件的方法,否则在当前的排除模式集下将被忽略:
(GIT_INDEX_FILE=some-non-existent-file \ git ls-files --exclude-standard --others --directory --ignored -z) | xargs -0 git rm --cached -r --ignore-unmatch --
这将文件保留在工作目录中,但将它们从索引中删除。
这里使用的技巧是为git ls-files提供一个不存在的索引文件,以便它认为没有跟踪文件。上面的shell代码请求如果索引为空将被忽略的所有文件,然后使用git rm将它们从实际索引中删除。
在文件被“untracked”之后,使用git status来验证没有什么重要的东西被删除(如果是这样的话,调整你的排除模式并使用git reset——path来恢复被删除的索引项)。然后做一个新的提交,去掉“脏东西”。
“脏东西”仍然存在于任何旧提交中。如果你真的需要一个干净的历史记录,你可以使用git filter-branch来生成旧提交的干净版本(注意,使用git filter-branch会“重写历史”,所以如果你有任何合作者在“crud”第一次引入之后拉掉了你的任何历史提交,那就不应该掉以轻心)。
这个回答解决了我的问题:
首先,提交所有挂起的更改。
然后执行如下命令:
git rm -r --cached .
这将从索引中删除所有内容,然后运行:
git add .
提交:
git commit -m ".gitignore is now working"
请注意,当您将此文件推到存储库并从其他地方拉入这些文件仍然被跟踪的状态时,这些文件将被删除
当指定在这里时,可以更新索引:
git update-index --assume-unchanged /path/to/file
这样做,文件将不会显示在git status或git diff中。
git status
git diff
要再次开始跟踪文件,您可以运行:
git update-index --no-assume-unchanged /path/to/file
git clean
git clean -h
如果你想先看看会发生什么,请确保传递-n开关进行演练:
git clean -xn
清除被忽视的垃圾
git clean -xdf
注意:您可能会忽略本地配置文件,如数据库。Yml也会被删除。使用风险自负。
然后
git add . git commit -m ".gitignore is now working" git push
git.txt
rename git.txt .gitignore
然后您可以打开文件并写入您想要永远忽略的所有未跟踪文件。例如,我的是这样的:
操作系统垃圾文件 (Tt) humbs.db *。DS_Store < / p >
#Visual Studio文件 *。(Oo) bj * .user * .aps * .pch * .vspscc * .vssscc * _i.c * _p.c * .ncb * .suo 名为. tlb * * .tlh * . bak *。(Cc)疼痛 * .ilk * . log * . lib * .sbr * .sdf < em > .pyc < em > . xml ipch / obj / (Bb) (Dd) ebug < / em > / (Rr)抽< / em > / t形十字章。无载< / p > < p > #工具 _ReSharper * / < em > .resharper 在美国东部时间(Tt) (Rr) esult < / em > < / p > < p > #项目文件 (Bb) uild / < / p > < p > # Subversion文件 . svn < / p >
~ $ *
有一个GitHub收集的所有有用的。gitignore文件
然后在你的终端中,你必须写以下一行:
Git配置——全局核心。excludesfile ~ / .gitignore_global
来自官方文件:
你也可以创建一个全局的.gitignore文件,这是一个规则列表 用于忽略计算机上每个Git存储库中的文件。为 例如,您可以在~/处创建文件。Gitignore_global并添加一些 < p >打开终端。在终端上执行以下命令 ——全球核心。excludesfile ~ / .gitignore_global < / p >
如果存储库已经存在,那么你必须运行这些命令:
git rm -r --cached . git add . git commit -m ".gitignore is now working"
如果第二步不起作用,那么你应该写你想要添加的文件的hole路由。
我认为这是向现有存储库添加.gitignore文件的一种简单方法。
先决条件:
你需要一个浏览器来访问你的github帐户。
步骤
玩得开心!
如果你添加.gitignore太晚,git将继续跟踪已经提交的文件。要解决这个问题,您总是可以删除不需要的文件的所有缓存实例。
.gitignore
首先,要检查你实际上在跟踪哪些文件,你可以运行:
git ls-tree --name-only --full-tree -r HEAD
假设你在cache/这样的目录中发现了不需要的文件,那么,将目标指向该目录而不是所有文件会更安全。
cache/
所以不要:
锁定不需要的文件或目录会更安全:
git rm -r --cached cache/
然后继续添加所有更改,
和提交…
参考:https://amyetheredge.com/code/13.html