在已经跟踪大量文件的现有存储库上应用.gitignore

我的存储库中有一个现有的Visual Studio项目。我最近在我的项目下添加了一个.gitignore文件,我假设它告诉Git忽略文件中列出的文件。

我的问题是,所有这些文件都已经被跟踪,据我所知,Git不会忽略一个已经被跟踪的文件,直到一个规则被添加到这个文件中来忽略它。

建议使用:git rm --cached并手动取消跟踪它们,但这将花费我很长时间来逐个查看它们。

我考虑过删除存储库并重新创建它,但这次使用.gitignore文件,但一定有更好的方法来做到这一点。

361708 次浏览

下面是一种“取消跟踪”任何文件的方法,否则在当前的排除模式集下将被忽略:

(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 statusgit diff中。

要再次开始跟踪文件,您可以运行:

git update-index --no-assume-unchanged /path/to/file
< p >使用git clean < br > 在此运行

获得帮助
git clean -h

如果你想先看看会发生什么,请确保传递-n开关进行演练:

git clean -xn

清除被忽视的垃圾

git clean -xdf

注意:您可能会忽略本地配置文件,如数据库。Yml也会被删除。使用风险自负。

然后

git add .
git commit -m ".gitignore is now working"
git push
  1. 创建一个。gitignore文件,所以要做到这一点,你只需要创建任何空白的。txt文件。

  2. 然后你必须在cmd上写下面的行来改变它的名字(其中git.txt是你刚刚创建的文件名):

rename git.txt .gitignore

  1. 然后您可以打开文件并写入您想要永远忽略的所有未跟踪文件。例如,我的是这样的:

    操作系统垃圾文件 (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文件

  1. 一旦你有了这个文件,你需要把它添加到你的git存储库中,就像任何其他文件一样,只是它必须在存储库的根目录中。

  2. 然后在你的终端中,你必须写以下一行:

    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帐户。

步骤

  1. 在您需要的(现有)项目中创建一个新文件,并将其命名为< em > .gitignore < / em >。一旦你将文件命名为.gitignore,你就会得到.gitignore模板的提示性提示。要么使用这些模板,要么使用gitignore.io生成你的gitignore文件的内容。
  2. 提交更改。
  3. 现在克隆这个存储库。

玩得开心!

如果你添加.gitignore太晚,git将继续跟踪已经提交的文件。要解决这个问题,您总是可以删除不需要的文件的所有缓存实例。

首先,要检查你实际上在跟踪哪些文件,你可以运行:

git ls-tree --name-only --full-tree -r HEAD

假设你在cache/这样的目录中发现了不需要的文件,那么,将目标指向该目录而不是所有文件会更安全。

所以不要:

git rm -r --cached .

锁定不需要的文件或目录会更安全:

git rm -r --cached cache/

然后继续添加所有更改,

git add .

和提交…

git commit -m ".gitignore is now working"

参考:https://amyetheredge.com/code/13.html