簡體   English   中英

為什么Git需要設計Index / Stage?

[英]Why does Git need to design Index /Stage?

下圖是Git流程圖,我很奇怪Git為什么需要設計Index / Stage

您知道存儲庫工作區之間的通信是本地的,在存儲庫工作區之間進行提交或回滾很容易。

為什么Git需要設計Index / Stage?

圖片

在此處輸入圖片說明

這是對即將提交的更改的預覽。 您可以逐步地或一次性地在此專用空間中構成將來的提交,檢查其中的內容,然后僅在對內容滿意時才提交。

有些人幾乎忽視它的存在,從不使用add ,依靠-a為他們提交盲目添加的一切,但是這被認為是不好的做法,因為它設置了未來的頭痛時,在更復雜的情況下,指數的理解是關鍵。

我建議您在其他文章中查看內容。

暫存的文件用作顯示,使提交者可以看到他將要添加到該特定提交的更改。 它還有助於鍵入git commit -a ,這是@Romain所提到的一種不好的做法。

以下是另一種用例,您在a.txtb.txt中進行了更改,但是無論出於何種原因都需要對這些文件執行兩次單獨的提交(也許將a.txt推送到另一個分支,將b.txt推送到另一個分支)科!)。 想象一下要承擔的工作!

建立索引文件只會使開發人員的工作變得輕松,這不是一個盲目的設計決定。

Mercurial是存在證明,不需要Git的索引/暫存區域。 Mercurial和Git具有同樣強大的功能(至少就存儲修訂而言),但是在Mercurial中,工作樹暫存區/建議的下一個提交。 在Git中,工作樹無關緊要,索引是暫存區/建議的下一個提交。

也就是說,Git比Mercurial 快得多 這種速度的很大一部分是因為Git保持了其單獨的索引(盡管很多也歸因於Mercurial在Python中而不是C中的實現)。 因此,如果您願意的話,索引的存在會使Git變得“快速”。

有些人發現單獨的暫存區僅是一件令人煩惱的事情,而另一些人(如您在其他答案中所見)發現該單獨的暫存區非常方便。 特別是,您可以分階段進行工作-將文件的某個版本從工作樹復制到暫存區中-然后進一步或以其他方式修改工作樹文件,例如添加不在目錄中的調試信息。 -提交該文件的副本。 使用git add -pgit reset -p ,您可以添加和刪除特定的修復程序,同時使調試部分僅存在於工作樹中。

因此,這提供了使用索引的兩個動機:您可以擁有一個故意不同於您的工作樹的暫存區,並且Git的運行速度要快得多, 因為 Git的暫存區已經適合提交 (Mercurial 尚未准備好提交:必須先將工作樹按摩成適合提交的形式,並且不管哪種語言實現了按摩或您為此問題投入了多少緩存,仍然會有一些計算努力)。

一旦您了解了一個單獨的暫存區的概念,這便提供了第三種動力:現在,如果對某些特定目的有用,您可以隨時創建其他暫存區。 例如,這就是git stash的實現方式。 (它也涉及git worktree add ,盡管其他工作樹是成對添加的您將獲得一個帶有新索引的新工作樹。如果有的話,這表明該新工作樹應新索引,即,則Mercurial模型更好!)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM