版本控制系統Git 2.18現在已經正式發布,在使用介面、工作流程、效能以及內部實作皆有多項更新,但對用戶最有感應該就屬Google在5月公布的Git協定第二版,現在已經正式可用。

Git協定第二版主要更新的是線路協定(Wire protocol),這是點到點用來獲取資料的方法,主要規範客戶端到伺服器端資料複製與上傳等動作,而Google表示,Git協定中的線路協定存在不少效能不佳的元件,簡化HTTP客戶端傳輸處理,並增加其可擴充性。先前的版本,伺服器端會回應所有客戶端的Fetch指令,羅列程式碼儲存庫所有參照,儘管客戶端只需要少部分的資訊。Git協定第二版最佳化了這個動作,No-op Fetch操作可讓即使存在有50萬個參照的程式碼儲存庫,效能照樣增進3倍。

在Git官方更新說明文件提到,從一個存在極大量參照的程式碼儲存庫中使用Git fetch指令,到另一個更新到最新版本的程式碼儲存庫仍然花費太多週期,造因於使用許多lstat(2)呼叫以檢查這些提示中的物件是否存在本機的鬆散物件,即便這些lstat(2)呼叫已經事先藉由列舉所有鬆散物件來最佳化。官方表示,現在使用了新策略,從存在少數參照的程式碼儲存庫中獲取許多鬆散物件到另一個儲存庫中,但不太確定新方法是否會對存在的使用案例造成負面影響。

另外,重新命名偵測邏輯也得到改善,系統已經會猜測將x資料夾下的x/a、x/b和x/c檔案,一次移至z/a、z/b和z/c的動作,使用者也可以透過提示目錄由x移動到z,在過程中把新增的x/d也移動到z/d。而這項更新同時也修正了之前在合併的時候,由於重新命名造成檔案被覆寫的臭蟲,並且避免在合併後更新工作目錄裡與最初匹配相符的檔案。

熱門新聞

Advertisement