2018年4月23日 星期一

git submodule 複製現有的副本

Git 有提供一個 submodule 的功能
可以把另外的 Git repo 引入現在的 project 使用
然而,有時候我們會需要複製包含 submodule 的 repo 給別人
如果是遇到超大型 project 或是 project 裡面放超大 test data
這時候 clone ~100MB 的時間就會超級久
(有時候 Github 的連線 < 100KBps)

當然,直接把資料夾整個 copy 過去或是壓縮成一包是最快的方法
然而有時候 workspace 下充滿了 GB 等級的 log、暫存檔等等
你又不想為了把檔案壓給別人把這些移除掉
這時候,就可以用 git clone 整個 project 過去
然後把必須的 submodule 用複製的方式塞過去了
以下示範一下這樣的流程
首先,我們要複製我們想要的 project
$ git clone project project_backup
Cloning into 'project_backup'...
done.

$ cd project_backup
接著把檔案必要的複製過去
最重要的是 .git/modules 這個資料夾
$ cd .git
$ cp ../../project/.git/modules . -r
$ cd ..
這樣我們就不用再次 clone 了
$ git submodule init
Submodule 'OOO' (...) registered for path 'OOO'
Submodule 'XXX' (...) registered for path 'XXX'

$ git submodule sync
Synchronizing submodule url for 'OOO'
Synchronizing submodule url for 'XXX'

$ git submodule update
Submodule path 'OOO': checked out '...'
Submodule path 'XXX': checked out '...'
submodule sync 那個步驟不確定是否必要
但總之這樣會動就對了

沒有留言:

張貼留言