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

时间:2013-10-29 15:50:13

标签: git gitignore

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

我的问题是所有这些文件都已被跟踪,据我所知,Git不会忽略在将规则添加到此文件之前已被跟踪的文件以忽略它。

建议使用:git rm --cached并手动取消跟踪它们,但这将永远让我一个接一个地浏览它们。

我考虑删除存储库并重新创建它,但这次使用.gitignore文件,但必须有更好的方法来执行此操作。

8 个答案:

答案 0 :(得分:694)

answer解决了我的问题:

首先,提交所有待处理的更改。

然后运行此命令:

git rm -r --cached .

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

git add .

承诺:

git commit -m ".gitignore is now working"

推它:

git push origin master

答案 1 :(得分:50)

  1. 创建.gitignore文件,为此,您只需创建任何空白的.txt文件。

  2. 然后你必须更改其名称,在cmd上写下以下行(其中git.txt是你刚刚创建的文件的名称):

    rename git.txt .gitignore

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

  4. ```

    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
    ~$*
    

    有一个whole collection of useful .gitignore files by GitHub

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

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

      git config --global core.excludesfile~ / .gitignore_global

    3. 来自官方文件:

        

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

           

      打开终端。在终端中运行以下命令:git config   --global core.excludesfile~ / .gitignore_global

      如果存储库已经存在,那么您必须运行以下命令:

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

      如果步骤2不起作用,那么您应该编写要添加的文件的孔路径。

答案 2 :(得分:28)

按照指定here您可以更新索引:

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

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

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

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

答案 3 :(得分: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

答案 4 :(得分:1)

这是一种“解锁”任何在当前排除模式下将被忽略的文件的方法:

(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将它们从实际索引中删除。

文件“未跟踪”后,使用git status验证没有删除任何重要内容(如果是,请调整排除模式并使用git reset - path来恢复已删除的索引条目)。然后创建一个新的提交,省略“crud”。

“crud”仍将在任何旧提交中。如果你真的需要一个干净的历史记录,你可以使用git filter-branch来生成旧提交的干净版本(使用git filter-branch的nb将“重写历史记录”,所以如果你有任何合作者已经拉过它,就不应该轻易做到这一点在“crud”首次介绍之后你的任何历史承诺。

答案 5 :(得分:1)

从临时区域中删除文件

pod install

添加所有更改

git reset HEAD .

提交:

git add .

答案 6 :(得分:0)

我认为这是将 .gitignore 文件添加到现有存储库的简便方法。

先决条件

您需要浏览器才能访问您的github帐户。

步骤

  1. 在所需的(现有)项目中创建一个新文件,并将其命名为 .gitignore 。将文件命名为 .gitignore 后,您将对.gitignore模板产生提示性提示。使用这些模板或使用gitignore.io生成 gitignore 文件的内容。
  2. 提交更改。
  3. 现在克隆此存储库。

玩得开心!

答案 7 :(得分:-3)

使用git clean
获得有关此次运行的帮助

git clean -h

如果你想先看看会发生什么,请确保通过-n开关进行干运行:

git clean -xn

删除gitingnored垃圾

git clean -xdf

小心:您可能忽略了像database.yml这样的本地配置文件,这些文件也会被删除。使用风险自负。

然后

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