克隆倉庫
標準化克隆流程
- 基本命令
git clone <父倉庫遠程URL> [本地文件名] cd <本地倉庫名> git submodule init # 初始化子模塊配置 git submodule update # 拉取子模塊內容
一次性完成克隆和初始化流程
- 基本命令
git clone --recurse-submodules <父倉庫遠程URL> [本地文件名]
其他克隆流程
- 基本命令
git clone <遠程倉庫URL> [本地文件名] cd <本地倉庫名> git submodule update --init --recursive
添加子模塊配置
標準化添加流程
- 添加倉庫命令
git submodule add <子目錄遠程倉庫URL> [子模塊名] # 例: git submodule add $(cd blog && git remote get-url origin) blog # 將blog這個模塊作為子模塊添加到當前git倉庫中;使用 git remote get-url <本地倉庫名>
- 成功添加后的表現
- 生產或修改
.gitmodules
文件,若已有此文件,則直接寫入新增的子模塊配置,否則新建一個名為.gitmodules
的文件并寫入第一關配置 - 提交時,子模塊以特殊模式(
160000
)記錄,表示其指向某個具體提交而非普通文件。
- 生產或修改
移除子模塊配置
標準化寫在流程
- 命令行卸載子模塊
git submodule deinit <子模塊的相對路徑> # 在.git/config 和 .gitsubmodule中移除配置 # 例: git submodule deinit "blog"
- 刪除子模塊并暫存變更
git rm <子模的相對塊路徑>
- 清理殘留文件:徹底刪除子模塊的Git緩存
rm -rf .git/modules/<子模塊名稱>
- 提交變更
修改子模塊配置
更新子模塊路徑以及名稱
- 使用命令移動或重命名子模塊目錄
執行完畢后git mv old/path new/path # 將舊的路由更名為新的路由
.gitmodules
中的路由配置信息會自動更新git config -f .gitmodules submodule.<submodule-neme>.path new/path # 如果沒有自動更新可使用此命令更新,或手動編輯 .gitmodules 文件
- 使用文件編輯器方式更新子模塊名稱
修改vim .gitmodules # 使用任何編輯方式均可
[submodule "<子模塊名>"]
中的配置[submodule "old-name"] => [submodule "new-name"] # 將名稱配置修改為新的名稱(最好與路徑字符串統一) path = <new/path> url = <URL保持不變>
- 在其他地方使用最新的倉庫
git pull # 拉取最新內容,修改后的路徑會以一個全新的文件夾的方式新增在這里 rm -rf old/path # 移除掉以及被淘汰的舊路徑 git submodule update # 更新子模塊內容,如果此命令無效可先輸入 git submoduel init cd new/path git switch <目標分支> # 新克隆的子模塊的分支處于游離狀態,所以需呀切換到有效分支在做操作
更新子模塊遠程地址
- 使用命令更新子模塊路徑
自動更新git config -f .gitmodules submodule.<submodule-name>.url <new-url>
.gitmodules
文件中的呢日歐能夠,或使用文本編輯系做如下修改[submodule "submodule-name"] path = <路徑保持不變> url = <old-url> => url = <new-url> # 將URL配置修改為新的URL
- 使用命令更新子模塊
git submodule update --remote
- 在其他地方使用最新的倉庫
git pull # 拉取最新內容,修改后的路徑會以一個全新的文件夾的方式新增在這里 git submodule update # 更新子模塊內容,如果此命令無效可先輸入 git submoduel init
更新子模塊內容,以及同步父模塊
- 從本地更新到遠程
cd path git add . git commit -m "<提交信息>" git pull [倉庫名稱] [目標分支] # 提交之前拉取一次最新版的遠程倉庫,防止提交沖突 git push [倉庫名稱] [目標分支] cd <父倉庫的根目錄> git commit -am "更新子模塊" git pull git push
- 從遠程更新到本地
cd path git switch <分支名稱> git pull [倉庫名稱] [目標分支] git submodule update --remote [--init] [--recursive] # 遠程指令(必填)、初始化指令(選填)、遞歸指令(選填)