發布分佈式源代碼控制系統 Git 2.22

介紹 發布分散式原始碼控制系統 Git 2.22.0。 Git 是最受歡迎、可靠和高效能的版本控制系統之一,提供基於分支和合併的靈活的非線性開發工具。 為了確保歷史記錄的完整性和對追溯更改的抵抗力,在每次提交中使用整個先前歷史記錄的隱式哈希,並且還可以使用開發人員的數位簽名來驗證各個標籤和提交。

與先前版本相比,新版本包含 745 個變更,由 74 名開發人員參與準備,其中 18 名開發人員首次參與開發。 主要的 創新:

  • 自版本 1.18 起,新的提交變基模式「git rebase --rebase-merges」取代了舊的「--preserve-merges」選項,該選項現已棄用。 「git rebase」操作用於以新的基礎提交替換一系列提交,例如,將正在開發某些新功能的單獨分支移動到主分支的當前狀態,其中包括在分支之後添加的修復:

    o - o - o(我的功能)

    /

    o - o - o - o - o(主)

    o - o - o(我的功能)

    /

    o - o - o - o - o(主)

    為了保留遷移分支中的分支結構,以前可以使用“--preserve-merges”選項,當以交互模式運行時(git rebase -i --preserve-merges),允許編輯提交歷史記錄,但不保證存儲庫結構的完整保存。 新的「--rebase-merges」模式可讓您保留正在遷移的分支中的變更結構,同時提供全方位的互動式操作,包括刪除、重新分組和重新命名提交。

    例如,“--rebase-merges” 它允許 將提交從單獨的分支重新上傳到較新的主分支,同時維護遷移分支中的分支結構,並即時對提交註釋進行一些更改。

  • 新增了對使用結構「git Branch new A...B」和「git checkout -b new」確定其他兩個分支的合併基礎(合併基礎,綁定到共同祖先)的結果創建新分支的支援A. ..B”,其中“A ...B”涉及在兩個指定提交之間定義合併基礎,類似於“git checkout A..​​.B”將HEAD 轉移到基礎提交和“diff A.A.A.B”如何將HEAD 轉移到基礎提交。 ..B”顯示了提交“B”和提交“A”之間的更改“Ancestor.

    例如,在處理單獨的 my-feature 分支時,如果您想要從不同的分支開始,例如從 master 分支中簽出 my-feature 分支的相同位置開始,則可以使用此功能。 以前,這需要手動檢查更改日誌,如果您有大量更改歷史記錄,這會很不方便,然後運行“git merge-base master my-feature”來計算master 和my-feature 分支之間的合併基礎的哈希值並創建一個相對於共同祖先“gitbranchmy-other-featurehash”的新分支。 在 Git 2.22 中,您可以使用語法「gitbranch my-other-feature A...B」來建立相對於其他兩個分支的合併基礎的分支;

  • 新增「gitbranch --show-current」選項,用於顯示結帳作業時取得的分支名稱;
  • 新增了「git checkout —no-overlay —dir」選項,該選項允許在執行簽出操作時將 dir 目錄的內容轉換為完全對應於 master 分支狀態的形式。 例如,如果 dir 目錄的本機副本中有一個檔案不在 master 分支中,那麼預設執行「git checkout master - dir」時它將被保留,如果「--no-overlay」 」 選項被指定,它將被刪除;
  • 「git diff」命令使用通用 API 來解析選項,這使得可以與其他 git 實用程式統一選項處理。 例如,在「git diff」中,所有選項現在都有其對立面(“--function-context”和“--no-function-context”);
  • 新增了過濾附加到「git log」輸出中的提交的擴充標籤的功能(「trailer」 - 附加資訊標誌,例如 Signed-off-by 和 Co-authored-by)。 可以按鍵和值過濾標籤,例如:
    "git log --pretty="%(預告片:key=審核者,valueonly)";

  • 新增了新的追蹤引擎 Trace2,提供更靈活和結構化的輸出格式。 Trace2可讓您收集有關已執行操作和效能資料的遙測數據,以進行更詳細的分析和偵錯(處理程序由使用者分配,不會向外部發送資料);
  • 「git bisect」報告變得更具可讀性,其中有問題的提交現在更清晰地突出顯示,並顯示每個檔案更改的摘要統計資料(在更改的行數層級);
  • 用於確定目錄重命名的啟發式方法已重新設計,以消除重命名標籤的錯誤安裝。 如有疑問,此類目錄現在會被標記為衝突;
  • 當您嘗試在另一個標籤上安裝一個標籤時,會顯示一條警告,這通常是錯誤的,可能會導致在錯誤的提交上設定標籤(例如,像“git tag -f -m “updated message”這樣的結構) my-tag1 my- tag2」將導致在舊標籤上建立標籤,而開發人員希望將新標籤安裝在舊標籤指向的提交上);
  • 啟用了位圖儲存庫(基於磁碟的「可達性位圖」結構)的生成,它儲存有關每次提交可用的物件集的數據,並允許您快速確定基礎物件是否存在。 這種結構顯著減少了資料檢索操作(git fetch)的執行時間。

來源: opennet.ru

添加評論