我有一个已经初始化的Git存储库,我添加了一个.gitignore文件。我如何刷新文件索引,以便忽略我想要忽略的文件?


当前回答

如果.gitignore似乎没有忽略未跟踪的文件,还需要记住的一点是,您不应该在忽略的行上有注释。所以这没关系

# ignore all foo.txt, foo.markdown, foo.dat, etc.
foo*

但这行不通:

foo*   # ignore all foo.txt, foo.markdown, foo.dat, etc.

.gitignore将后一种情况解释为“忽略名为“foo*#忽略所有foo.txt、foo.markdown、foo.dat等”的文件,当然,您没有。

其他回答

如果您试图忽略对存储库中已跟踪的文件所做的更改(例如,您需要为本地环境更改的dev.properties文件,但您永远不想签入这些更改),那么您要做的是:

git update-index --assume-unchanged <file>

如果你想再次开始跟踪更改

git update-index --no-assume-unchanged <file>

参见git更新索引(1)手册页。

如果您需要在git重置后继续使用,请查看更新索引的跳过工作树和无跳过工作树选项(通过)


更新:由于人们一直在问,这里有一个方便的(并在下面评论后进行了更新)别名,用于查看本地工作区中哪些文件当前被“忽略”(--假设未更改)

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"

我遇到的另一个问题是我放置了一个内联注释。

tmp/*   # ignore my tmp folder (this doesn't work)

这行得通

# ignore my tmp folder
tmp/

我不太清楚“回答”命令是什么意思,所以我运行了它,这让我非常沮丧。它递归地从git repo中删除每个文件。

Stackoverflow救援。。。如何还原“git rm-r”?

git reset HEAD

做到了这一点,因为我有未提交的本地文件,我不想覆盖这些文件。

我遵循了这些步骤

git rm -r --cached .
git add .
git reset HEAD

之后,git删除所有应该忽略的文件(在我的例子中是*.swp)。

这里没有提到的另一个问题是,如果你已经在Windows记事本中创建了.gitignore,我发现它在其他平台上看起来像是胡言乱语。关键是确保在记事本中将编码设置为ANSI(或者像我一样在linux上创建文件)。

根据我的回答:https://stackoverflow.com/a/11451916/406592