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

Toh*_*hid 276 git gitignore

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

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

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

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

Toh*_*hid 776

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

首先,提交所有挂起的更改.

然后运行以下命令:

git rm -r --cached .
Run Code Online (Sandbox Code Playgroud)

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

git add .
Run Code Online (Sandbox Code Playgroud)

承诺:

git commit -m ".gitignore is now working"
Run Code Online (Sandbox Code Playgroud)

  • @ihavenoidea https://github.com/search?q=.gitignore+is+now+working&type=Commits 就这样! (14认同)
  • 谢谢,这就像一个魅力. (12认同)
  • 完美答案!请添加一个`git push origin`以反映远程存储库中的更改. (9认同)
  • 我开始使用这个答案......它几乎删除了我项目中的所有内容!显然我做错了什么.但我想警告人们不要随便遵循这个建议. (7认同)
  • 当您删除并重新添加文件时,这最终是否会丢失文件的历史记录 (4认同)
  • 我想知道有多少个提交正在使用此.gitignore现在正在工作消息。:) (3认同)
  • 每次我使用这个,我都希望你最终进入天堂或得到你生命中想要的任何东西<3 (3认同)
  • 这个方法对我来说效果很好。我创建了一个 gitignore 文件,忽略了整个目录,然后提交了创建 gitignore 的更改。然后我完全按照上面的三个命令操作。它工作得很好,但我应该说,您必须首先“提交所有待处理的更改”,如上所述。 (2认同)
  • 2020 年 6 月 github 上有 25,144 个提交结果“.gitignore is now running” (2认同)
  • 我不知道有多少次我用谷歌搜索并使用这个答案 (2认同)

小智 52

  1. 创建.gitignore文件,这样做,您只需创建任何空白的.txt文件.

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

    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
~$*
Run Code Online (Sandbox Code Playgroud)

GitHub一整套有用的.gitignore文件

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

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

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

来自官方文件:

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

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

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

git rm -r --cached .
git add .
git commit -m ".gitignore is now working"
Run Code Online (Sandbox Code Playgroud)

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

  • @Karen_Wiznia"git config ... _global"为计算机上的所有Git repos创建了一个全局gitingore.OP不想这样做. (4认同)
  • 它应该是“mv git.txt .gitignore”而不是“rename git.txt .gitignore”。 (2认同)

Pat*_*gle 29

作为指定在这里您可以更新索引:

git update-index --assume-unchanged /path/to/file
Run Code Online (Sandbox Code Playgroud)

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

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

git update-index --no-assume-unchanged /path/to/file
Run Code Online (Sandbox Code Playgroud)

  • 这是更好的答案 - 它只关注单个文件,即您不希望被存储库跟踪的文件.最高标记的答案也会起作用,但它不仅仅是忽略git跟踪的文件. (5认同)

小智 8

如果添加.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

  • 如果您只想删除几个文件而不是整个存储库,这是最好的、干净的答案。我给你竖起大拇指。 (2认同)