2011-07-28 84 views
1

我正在創建從保存的zip文件到git的歷史記錄。我很高興需要git add .文件到臨時區域,以便提交選定的文件。到現在爲止還挺好。爲什麼我需要告訴git我已經刪除了一個文件?

不過我現在在的簡單相加第一(未壓縮)文件集,提交它們,然後刪除其目錄及內容,解壓縮下一組之前,將它們添加和提交的情況下,常與變型目錄名。

我的理解問題是,我得到的「unstaged更改」顯示(Git Gui)的directorie /文件我刪除了一些提交。我明白,git拍攝目前的文件的快照,所以不應該有任何刪除的文件。

那麼,我最近的提交包含了這些被刪除文件的副本(在他們的樹中)嗎?何時/爲什麼需要使用git rm而不是簡單的rm(或等效窗口)?我應該忽略這個信息嗎?即是否有解釋git如何處理競爭性刪除跟蹤機制。

回答

1

你猜對了 - 最近的提交包含了這些被刪除文件的副本。

嘗試git add -A .,它也刪除階段。

如果你想知道爲什麼.....因爲這就是最好的使用臨時區域:git有一個「舞臺區域」的概念,它允許你只提交部分修改 - 這使得分割塊更容易。

+0

它的想法,臨時區域保持的副本你的文件,直到你積極刪除分段的時間a的副本,我沒有讚賞。這是git的暗示但未陳述的領域之一。這可能意味着我不得不重新啓動歷史版本。 –

+1

你可以使用'git alias'爲你喜歡的任何地方做一個別名。 –

+0

@ J-16 SDiZ:一個小錯字:你把'-A'放在錯誤的地方 - 它需要在'add'之後進行。 –

4

如果您只是通過使用rm刪除然後提交,那麼刪除不會暫存,所以git只是忽略了該文件已經消失的事實。

如果你想git識別刪除該文件並相應地更新存儲庫,你必須要git rm文件。在你的情況下,git add -A .刪除舊的解壓縮後會給你你想要的。它將所有添加,刪除和更改添加到暫存區域。

使用您當前的計劃,您在存儲庫中肯定有許多不需要的文件。您最好的選擇是重新開始,使用以下策略。

  1. 創建回購
  2. 解壓文件
  3. git add -A .
  4. git commit
  5. 刪除所有文件
  6. 重複2
+0

凱爾:我已經使用你的循環,但增加了'git commit -a -m「消息」--date「2009-12-25 13:00:00」'提交,所以我得到明智的日期和'-a '再檢查一下git通知並記錄所有的清除。 –

相關問題