Overview

Subtree 允許 Subprojects 包含在 Mainproject 的子目錄中,可以選擇包含 Subprojects 的整個 Commit 記錄或只保留一筆(squash)。

舉例來說,可以將某一個儲存庫的 Source code 包含在另一個儲存庫的子目錄中。

Subtree 不要與 Submodules 混淆,Submodules 用於同一任務。並且 Subtree 不需要在儲存庫中存在任何特殊的構造(例如 .gitmodules 文件或 gitlinks),也不會強迫使用儲存庫的用戶做其他事情或需要了解 Subtree 的工作方式。Subtree 只是一個子目錄,可以按照想要的任何方式與 Project 一起提交,分支和合併。

也不要與 Subtree merge 混淆。主要區別在於,除了將另一個 Project 合併為子目錄之外,您還可以從 Project 中提取子目錄的整個 Commit 記錄,並將其製作為獨立項目。與 Subtree merge 不同,Subtree 可以在這兩個操作之間來回切換。如果獨立儲存庫得到更新,則可以自動將更改 Merge 到 Project 中;如果在 Project 內部更新儲存庫,則可以再次 Split 更改,然後將其 Merge 回 Project 。

例如,如果為一個 Project 建立的 Subtree 之後在其他地方有被使用,則可以提取其整個歷史記錄並將其發佈為自己的 git 存儲庫,而不會意外地混入 Project 的歷史記錄。

<aside> 💡 為了使的 Commit 記錄保持乾淨,建議可能在 Subprojects 和 Mainproject 之間劃分 Commit 內容。也就是說,如果您進行的更改會影響 Subprojects 和 Mainproject ,就分兩部分提交。這樣當以後拆分庫(Split )時,Commit 記錄的描述仍然有意義。然而,如果這對你來說不重要,則沒有必要。 Git Subtree 在以後將其拆分到 Subprojects 中時,只會忽略提交中與 Subprojects 無關的部分。

</aside>

Usage

Options:


Options for 「add, merge, push, pull」:


Options for 「split」: