2010-02-19 37 views
5

我一直在嘗試在我的個人項目上使用Git將近一個月。Git的索引概念如何改進或改變您的工作流程?

我對基本的命令集有很好的理解,雖然它的用戶體驗並不棒,但我仍然發現自己比以前使用的其他VCS更喜歡Git。

然而,我仍然認爲我沒有「得到」的一個概念是索引的真正目的。我有這種感覺,我沒有利用它打算賦予的一些好處。

有一個臨時區域的目的是什麼?來自SVN的土地,我很習慣把我的工作副本當作我的集結地區,我的快照也從我這裏拿走。

所以,我的問題是:

這種額外的間接程度給你什麼?指數如何改善或改變您的正常工作流程?你能否提供任何情況,讓索引允許你做一些沒有它的麻煩事情?

+0

另請參閱http://stackoverflow.com/questions/1836801/git-should-i-ignore-the-index-or-is-there-a-killer-application-for-it – 2010-02-19 02:21:35

+0

+1用於短語標題問題如此之好。 – WinWin 2012-01-13 19:33:55

回答

7

當我開始研究功能或錯誤修復,然後注意到一個快速的錯字或其他一些微小(可能是一行)的東西來修復時,肯定有很多次。我沒有放棄所有的工作,甚至沒有使用git stash,我只是通過索引承諾只是微小的變化;我所有的其他工作仍然在那裏,但現在提交更具體:它只顯示了小的修復,而不是埋在其他幾十個其他的變化。這是爲了更清晰的歷史記錄,因爲它們沒有與其他提交混合在一起,所以可以輕鬆地搜索日誌以進行更改。

如果發生(複雜的,大的)合併衝突,能夠將我對索引所做的每個更改都添加進去,這樣我就知道我已經修復了哪些衝突以及哪些衝突要處理。

3

就我個人而言,目前我正在經歷一場大規模的合併衝突,我不得不逐一修復這些物品。在這種情況下,我可以對已合併的文件執行'git add',並且仍然保留需要修復的文件的單獨跟蹤。

一旦我經歷了這些,我可以執行測試編譯,然後在我提交存儲庫之前重新添加所需的任何其他更改。

1

有時我會做一個'git cherry-pick -n'或'git merge --squash'從外部分支引入一堆更改,然後我將取消所有這些更改並使用git interactive add (git add -i)只播放我想要的作品。你甚至可以選擇差異化的「hunk」,並將剩下的狀態保持在一個改變的狀態(對於本來應該是單獨提交的事情來說是非常重要的)。

當你編輯一大堆文件時,同樣很棒,但是你決定在你繼續下一步之前,你真的應該把所有與X有關的文件都作爲一個單獨的提交提交,所以你只需要進行階段,提交併繼續工作其他文件。

我也喜歡暫存區域與合併的方式,以顯示您沒有自動上演的內容。當然,索引區域並不是絕對必要的,但我發現diff的默認行爲只顯示非索引項目的差異,因此您不會爲查看舞臺劇而煩惱,除非您使用diff - -cached。