sumodules
git submodules測試
1.使用場景
子模塊 有種情況我們經常會遇到:某個工作中的項目需要包含並使用另一個項目。 也許是第三方庫,或者你獨立開發的,用於多個父項目的庫。
現在問題來了:你想要把它們當做兩個獨立的項目,同時又想在一個項目中使用另一個。我們舉一個例子。 假設你正在開發一個網站然後創建了 Atom 訂閱。 你決定使用一個庫,而不是寫自己的 Atom 生成代碼。
你可能不得不通過 CPAN 安裝或 Ruby gem 來包含共享庫中的代碼,或者將源代碼直接拷貝到自己的項目中。
如果將這個庫包含進來,那麼無論用何種方式都很難定製它,部署則更加困難,因爲你必須確保每一個客戶端都包含該庫。
如果將代碼複製到自己的項目中,那麼你做的任何自定義修改都會使合併上游的改動變得困難。Git 通過子模塊來解決這個問題。 子模塊允許你將一個 Git 倉庫作爲另一個 Git 倉庫的子目錄。
它能讓你將另一個倉庫克隆到自己的項目中,同時還保持提交的獨立。
2.submodules 添加(git submodules add)
$ git submodule add https://github.com/holidaying/typescriptVue.git src/apps/typescriptVue
Cloning into 'E:/liudan/sumodules/src/apps/typescriptVue'...
remote: Enumerating objects: 57, done.
remote: Counting objects: 100% (57/57), done.
remote: Compressing objects: 100% (41/41), done.
remote: Total 57 (delta 7), reused 57 (delta 7), pack-reused 0
Unpacking objects: 100% (57/57), done.
warning: LF will be replaced by CRLF in .gitmodules.
The file will have its original line endings in your working directory.
進入typescriptVue
可以執行自己的pull push
3. 下載已經關聯submodules的項目
下載主項目 git clone
git submodule init -> git submodule update 或者(git clone --recurse-submodules https://github.com/holidaying/typescriptVue.git)
$ git submodule init
Submodule 'src/apps/typescriptVue' (https://github.com/holidaying/typescriptVue.git) registered for path 'src/apps/typescriptVue'
ld289@DESKTOP-DU7527P MINGW64 /e/liudan/sumodules (master)
$ git submodule update
Cloning into 'E:/liudan/sumodules/src/apps/typescriptVue'...
4. 常用命令
- git submodule foreach pull 遍歷更新子模塊
- git config alias.spush 'push --recurse-submodules=on-demand'
- git config alias.supdate 'submodule update --remote --merge'
- git spush
- git supdate
- cat .gitmodules
- git submodule deinit <子模塊名> git rm --cached <子模塊名>
-
vi .gitmodules (手動刪除連接)
$ git supdate ld289@DESKTOP-DU7527P MINGW64 /e/liudan/sumodules (master) $ git spush fatal: AggregateException encountered. Username for 'https://github.com': ld289@DESKTOP-DU7527P MINGW64 /e/liudan/sumodules (master) $ git supdate remote: Enumerating objects: 4, done. remote: Counting objects: 100% (4/4), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From https://github.com/holidaying/typescriptVue 66be908..a5f8bba master -> origin/master Updating 66be908..a5f8bba Fast-forward test | 1 + 1 file changed, 1 insertion(+) create mode 100644 test Submodule path 'src/apps/typescriptVue': merged in 'a5f8bba35547cd54f859cc4d955691b6c5da5798'
參考項目:submodules