将gitignore应用于已经存储了大量文件的存储库

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

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

有人build议使用: git rm --cached并手动取消跟踪,但是这将永远需要我一个接一个的完成。

我想删除存储库,并重新创build它,但这次与.gitignore文件存在,但必须有一个更好的方法来做到这一点。

这个答案解决了我的问题:

提交所有待处理的更改,然后运行以下命令:

 git rm -r --cached . 

这将从索引中删除所有内容,然后运行:

 git add . 

承诺:

 git commit -m ".gitignore is now working" 
  1. 创build一个.gitignore文件,所以要创build任何空白的.txt文件。

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

    rename git.txt .gitignore

  3. 然后你可以打开这个文件并写好所有你想忽略的未跟踪文件。 例如,我的看起来像这样:

“`

 OS junk files [Tt]humbs.db *.DS_Store #Visual Studio files *.[Oo]bj *.user *.aps *.pch *.vspscc *.vssscc *_i.c *_p.c *.ncb *.suo *.tlb *.tlh *.bak *.[Cc]ache *.ilk *.log *.lib *.sbr *.sdf *.pyc *.xml ipch/ obj/ [Bb]in [Dd]ebug*/ [Rr]elease*/ Ankh.NoLoad #Tooling _ReSharper*/ *.resharper [Tt]est[Rr]esult* #Project files [Bb]uild/ #Subversion files .svn # Office Temp Files ~$* 

GitHub有一整套有用的.gitignore文件

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

  2. 然后在你的terminal你必须写下面的行:

    git config –global core.excludesfile〜/ .gitignore_global

来自官方文件:

您也可以创build一个全局的.gitignore文件,这是一个忽略计算机上每个Git存储库中文件的规则列表。 例如,您可以在〜/ .gitignore_global中创build文件,并为其添加一些规则。

打开terminal。 在terminal中运行以下命令:git config –global core.excludesfile〜/ .gitignore_global

如果存储库已经存在,那么你必须运行这些命令:

 git rm -r --cached . git add . git commit -m ".gitignore is now working" 

如果第2步不起作用,那么你应该写出你想添加的文件的空洞path。

如此处所指定的您可以更新索引:

 git update-index --assume-unchanged /path/to/file 

通过这样做,文件将不会显示在git statusgit diff

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

 git update-index --no-assume-unchanged /path/to/file 

这里有一种方法可以“解开”在当前一组排除模式下被忽略的任何文件:

 (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文件,以便它认为没有跟踪的文件。 上面的shell代码要求所有的文件将被忽略,如果索引是空的,然后用git rm从实际索引中删除它们。

在文件被“untracked”后,使用git状态来validation没有重要的东西被删除(如果是这样调整你的排除模式,并使用git reset – path来恢复删除的索引条目)。 然后做一个新的承诺,抛弃了“泥沼”。

“crud”将仍然在任何旧的承诺。 如果你真的需要一个干净的历史logging,你可以使用git filter-branch生成旧提交的干净版本(使用git filter-branch将“重写历史logging”,所以如果你有任何合作者第一次介绍“crud”之后的任何历史承诺)。

使用git clean
得到这个运行的帮助

 git clean -h 

如果你想看看会发生什么事情,一定要通过-n开关进行空运行:

 git clean -xn 

去除gitingnored垃圾

 git clean -xdf 

小心:您可能会忽略本地configuration文件,如database.yml,这也将被删除。 使用风险自负。

然后

 git add . git commit -m ".gitignore is now working" git push