git submodules 如何容納百川

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章