2012-08-14 99 views
0

我有像這樣混帳刪除不在的.gitignore使用git rm命令文件

SDI 
|-.gitignore 
\-webapp 

在SDI/Web應用程序/應用程序目錄結構中,當我運行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/ 

爲什麼刪除了所有Google文件?我確實有git config file.mode false作爲唯一在這個資源庫中與我過去做過的其他資源相比唯一的東西。

回答

4
  • 在實際上並沒有刪除文件,它只是從索引中刪除更改。你的工作空間保持不變。
  • 它這樣做,因爲你告訴它這樣做。

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

從索引中刪除文件,或者從工作樹和索引。 git rm不會從你的工作目錄中刪除一個文件。 (沒有選擇只從工作樹中刪除一個文件,而是將它保留在索引中;如果你想這樣做,可以使用/ bin/rm。)被刪除的文件必須與分支端相同,並且不會更新其內容,但可以使用-f選項覆蓋默認行爲。當給定緩存時,分階段內容必須匹配分支的頂端或磁盤上的文件,從而允許從索引中刪除文件。

-r 允許遞歸刪除時被賦予了領先的目錄名。

--cached 使用此選項unstage只有從索引中刪除路徑。工作樹文件,無論是否修改,都將被單獨保留。

我不知道,你想達到什麼(因爲你沒有告訴),但是命令完全按照它應該的和應該的方式進行。

.gitignore「只是」告訴蠢貨,git status不改變添加到索引,調用git add當遞歸(例如git add .,或git commit -a),或顯示他們(也可能是其他工具,但那是最常見的用例)。因爲無論如何都不應該對這個文件進行更改,git rm不會影響它們。

3

它不會刪除您的文件,它將取消它們。您忽略的文件被忽略。所以不要擔心這一點。如果你想刪除您忽略的文件,你可以

git clean -xdf 

UPDATE:

一個更安全的方式做到這一點(如在評論中提到的)的情況下,你有你關心的一個文件是

git stash -u && git clean -xdf 
+0

值得注意的是:這也刪除了每個未經過檢查的未跟蹤文件。除非你知道你在做什麼,否則我不會推薦它。 – KingCrunch 2012-08-14 20:40:25

+0

是的。當構建文物被緩存並且由於您的環境不知道您轉換了分支時,您構建的文檔很糟糕,也就是說,它不會檢查源文件的修改是否足夠好,還是取決於修改日期時間,因此非常方便。 – 2012-08-14 20:45:21

+0

因爲你提到了「構建」:爲此我推薦一個單獨的構建任務'clean';)在我看來,鬆散變化的風險並沒有超過這個便利。 – KingCrunch 2012-08-14 20:52:16

相關問題