在Git basic terminology中有一個概念快照。快照的概念
這個概念在Git的工作流程中使用:
您修改工作目錄下的文件。
您將舞臺文件添加到快照您的舞臺 區域。
你做了承諾,這需要的文件,因爲它們是在 臨時區域並存儲快照永久您的Git 目錄。
你能不能解釋一下什麼是快照,並顯示文件的一些小例子,它的快照,爲什麼Git使用他們,而不是讓差異在其他VCSS的?
在Git basic terminology中有一個概念快照。快照的概念
這個概念在Git的工作流程中使用:
您修改工作目錄下的文件。
您將舞臺文件添加到快照您的舞臺 區域。
你做了承諾,這需要的文件,因爲它們是在 臨時區域並存儲快照永久您的Git 目錄。
你能不能解釋一下什麼是快照,並顯示文件的一些小例子,它的快照,爲什麼Git使用他們,而不是讓差異在其他VCSS的?
快照只是表示文件內容在給定時間點的內容。所有版本控制系統都在概念上在快照上運行。您希望能夠看到過去任何時候您的源代碼的樣子。它們也都存儲差異以節省存儲空間。 git的獨特之處在於兩個方面:差異計算和內部存儲的方式與文件的歷史沒有直接關係,差異不會每過一次都重新計算。
比方說,你有一個1000字節的文件,幾乎每一個版本都會得到更新。如果你改變它的一個字節,git將暫時存儲一個全新的文件副本,並改變一個字節。這是人們翻出來說「OMG,git是如此愚蠢,它應該馬上存儲差異,我堅持顛覆。」
然而,想想你是如何實際使用你的源代碼管理。幾乎所有你想要進行比較的事物都是自上次推送以來發生變化的事情。因爲它還沒有計算出差異,所以git恰好有一個完整的,容易訪問的所有那些最近更改過的文件的緩存,其中的版本控制系統必須從版本1開始,並應用數百個差異來重構相同的內容。
然後,當您推送共享您的更改時,git gc
會自動運行,以便更有效地存儲這些文件以便通過網絡傳輸,然後計算並存儲差異。但是,它不一定是從版本n-1到版本n的文件差異。如果內容在許多文件中重複,git可以考慮這一點。如果在多個分支中進行相同的更改,git可以考慮到這一點。如果文件被移動,git可以考慮到這一點。如果將來發現一些啓發式方法可以使事情變得更加高效,那麼git可以在不破壞現有客戶端的情況下考慮到這一點。它不符合差異必須始終從一個連續版本到下一個版本的想法。
這些基本的設計決策使得git與其他版本控制軟件相比如此之快。