459

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

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

建议使用:git rm --cached并手动取消跟踪它们,但这将花费我永远的时间来逐一浏览它们。

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

4

7 回答 7

1208

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

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

然后运行这个命令:

git rm -r --cached .

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

git add .

提交它:

git commit -m ".gitignore is now working"

请注意,当您将其推送到存储库并从其他地方拉入仍然跟踪这些文件的状态时,这些文件将被删除

于 2013-11-03T20:51:31.550 回答
70
  1. 创建一个 .gitignore 文件,为此,您只需创建任何空白 .txt 文件。

  2. 然后您必须在 cmd 上写入以下行来更改其名称(git.txt您刚刚创建的文件的名称在哪里):

rename git.txt .gitignore

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

    操作系统垃圾文件 [Tt]humbs.db *.DS_Store

    #Visual Studio 文件 *.[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

    #项目文件 [Bb]uild/

    #Subversion 文件 .svn

    办公室临时文件

    ~$*

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"

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

于 2015-02-17T14:17:12.107 回答
40

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

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

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

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

git update-index --no-assume-unchanged /path/to/file
于 2014-05-29T18:49:57.017 回答
31

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

于 2018-09-27T14:53:32.597 回答
2

这是“取消跟踪”任何文件的一种方法,这些文件在当前的排除模式下会被忽略:

(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 生成旧提交的干净版本(nb 使用 git filter-branch 将“重写历史记录”,所以如果你有任何合作者已经拉在首次引入“crud”之后您的任何历史提交)。

于 2013-10-29T15:54:38.613 回答
-4

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
于 2014-12-02T14:24:32.427 回答
-5

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

先决条件

您需要一个浏览器来访问您的 github 帐户。

脚步

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

玩得开心!

于 2018-09-10T21:25:57.920 回答