0

我有这样的结构

SDI
|-.gitignore
\-webapp

在 SDI/webapp/app 目录中,当我运行时git rm -r --cached .,我看到这样的文件已删除

rm 'webapp/app/views/MyStuff/myGroups.html'
rm 'webapp/app/views/MyStuff/userAdd.html'
rm 'webapp/app/views/MyStuff/userEdit.html'
rm 'webapp/app/views/auth/Secure/login.html'
rm 'webapp/app/views/errors/404.html'
rm 'webapp/app/views/errors/500.html'
rm 'webapp/app/views/main.html'
rm 'webapp/app/views/tags/auth/check.tag'
rm 'webapp/app/views/tags/generic.html'
rm 'webapp/app/views/tags/text.html'

.gitignore contents的如下

eclipse/
tmp/
bin/
tools/play-1.2.5/framework/pym/

为什么它会删除我的所有文件?git config file.mode false与我过去做过的其他存储库相比,我确实拥有这个存储库中唯一独一无二的东西。

4

2 回答 2

4
  • In 实际上并没有删除文件,它只是从索引中删除更改。您的工作空间保持不变。
  • 它这样做,因为你告诉它这样做。

http://www.kernel.org/pub/software/scm/git/docs/git-rm.html

从索引中删除文件,或者从工作树和索引中删除文件。git rm 不会仅从您的工作目录中删除文件。(没有选项可以仅从工作树中删除文件并将其保留在索引中;如果您想这样做,请使用 /bin/rm。)被删除的文件必须与分支的尖端相同,并且不能在索引中暂存对其内容的更新,尽管可以使用 -f 选项覆盖默认行为。当给出 --cached 时,暂存的内容必须匹配分支的尖端或磁盘上的文件,从而允许仅从索引中删除文件。

-r 给定前导目录名称时允许递归删除。

--cached 使用此选项仅从索引中取消暂存和删除路径。工作树文件,无论是否修改,都将被单独保留。

我不知道,您想要实现什么(因为您没有告诉),但是该命令确实可以做到,它应该做什么以及应该以它应该的方式。

.gitignoregit add“just”告诉 git 在递归调用(例如git add .,或)时不要向索引添加更改git commit -a,或者在git status(可能还有其他工具,但这是最常见的用例)中显示它们。因为无论如何都不应该暂存对此文件的更改,因此git rm不会影响它们。

于 2012-08-14T20:15:47.630 回答
3

它不是删除您的文件,而是取消暂存它们。您忽略的文件将被忽略。所以不用担心。如果要删除忽略的文件,可以

git clean -xdf

更新:

如果您确实有一个您关心的文件,一种更安全的方法(如评论中所述)是

git stash -u && git clean -xdf
于 2012-08-14T20:34:38.627 回答