[英]Why does Git need to design Index /Stage?
暫存的文件用作顯示,使提交者可以看到他將要添加到該特定提交的更改。 它還有助於鍵入git commit -a
,這是@Romain所提到的一種不好的做法。
以下是另一種用例,您在a.txt
和b.txt
中進行了更改,但是無論出於何種原因都需要對這些文件執行兩次單獨的提交(也許將a.txt推送到另一個分支,將b.txt推送到另一個分支)科!)。 想象一下要承擔的工作!
建立索引文件只會使開發人員的工作變得輕松,這不是一個盲目的設計決定。
Mercurial是存在證明,不需要Git的索引/暫存區域。 Mercurial和Git具有同樣強大的功能(至少就存儲修訂而言),但是在Mercurial中,工作樹是暫存區/建議的下一個提交。 在Git中,工作樹無關緊要,索引是暫存區/建議的下一個提交。
也就是說,Git比Mercurial 快得多 。 這種速度的很大一部分是因為Git保持了其單獨的索引(盡管很多也歸因於Mercurial在Python中而不是C中的實現)。 因此,如果您願意的話,索引的存在會使Git變得“快速”。
有些人發現單獨的暫存區僅是一件令人煩惱的事情,而另一些人(如您在其他答案中所見)發現該單獨的暫存區非常方便。 特別是,您可以分階段進行工作-將文件的某個版本從工作樹復制到暫存區中-然后進一步或以其他方式修改工作樹文件,例如添加不在目錄中的調試信息。 -提交該文件的副本。 使用git add -p
和git reset -p
,您可以添加和刪除特定的修復程序,同時使調試部分僅存在於工作樹中。
因此,這提供了使用索引的兩個動機:您可以擁有一個故意不同於您的工作樹的暫存區,並且Git的運行速度要快得多, 因為 Git的暫存區已經適合提交 。 (Mercurial 尚未准備好提交:必須先將工作樹按摩成適合提交的形式,並且不管哪種語言實現了按摩或您為此問題投入了多少緩存,仍然會有一些計算努力)。
一旦您了解了一個單獨的暫存區的概念,這便提供了第三種動力:現在,如果對某些特定目的有用,您可以隨時創建其他暫存區。 例如,這就是git stash
的實現方式。 (它也涉及git worktree add
,盡管其他工作樹是成對添加的:您將獲得一個帶有新索引的新工作樹。如果有的話,這表明該新工作樹應為新索引,即,則Mercurial模型更好!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.