submodule、subtree、注意事項
主要應用於多模組開發,舉個例子:有個大型專案,a模組依賴於b模組,a和b分別作為不同的工程進行開發。此時就需要用到submodule,即:a倉庫中引入b倉庫。
1.假設本地只有乙個a倉庫,遠端有a倉庫和b倉庫
2.進入a倉庫,將遠端b倉庫作為子模組拉取下來
git submodule add bmodule
git會在a倉庫下自動建立資料夾bmodule,用於存放b倉庫的**
3.將生成的submodule檔案,提交到倉庫,並推送遠端
git add .
git commit -m 'add bmodule'
git push
4.拉取b倉庫的最新**
#進入bmodule
cd bmodule
#拉取即可
git pull
需要知道的是:a倉庫下的bmodule也是git倉庫,它對應的是遠端b倉庫
5.若是a倉庫下,不止乙個子模組,有b倉庫、c倉庫…多個子模組,都要更新
git submodule foreach git pull
6.拉取完子模組的更新,會被a倉庫感知到子模組檔案變化,因此a倉庫也需要將變化提交
git add .
git commit -m 'update bmodule'
git push
7.此時另乙個新加入的開發者要clone a倉庫到本地
git clone
需要注意的是:clone操作預設不會自動拉取子模組的**,需要手動初始化更新子模組
git submodule init
git submodule update --recursive
當然,可以不必這麼麻煩,clone時加上–recursive即可完成上述所有操作
git clone --recursive
8.刪除子模組(工作區、暫存區、版本庫、遠端倉庫逐一刪除)
#刪除bmodule
gitrm --cache bmodule
rm -rf bmodule
git add .
git commit -m 'remove bmodule'
git push
#刪除.gitmodule
gitrm .gitmodule
git commit -m 'remove .gitmodule'
git push
主要應用於多模組開發,優於submodule,解決了submodule存在的多種弊端
以a倉庫和b倉庫為例,a倉庫引用b倉庫
1.假設本地只有乙個a倉庫,遠端有a倉庫和b倉庫
2.進入a倉庫,增加遠端b倉庫為subtree-origin
git remote add subtree-origin
#增加遠端b倉庫,名字為subtree-origin
此時本地有兩個遠端倉庫,a為origin,b為subtree-origin
3.從subtree-origin上拉取master分支上的**,即將b倉庫作為a的子模組
git subtree add --prefix=subtree subtree-origin master --squash
#推薦使用--squash,它會把子模組的多次提交合併成乙個後拉取下來,這樣就不會汙染a倉庫的提交歷史了
4.將生成的子模組目錄提交,並推送到遠端a倉庫
git push
5.拉取子模組的最新**,並推送到遠端a倉庫
git subtree pull --prefix=subtree subtree-origin master --squash
#--squash表示壓縮,即將多個提交合併成乙個拉取下來
git push
因為subtree與submodule不同,submodule中a倉庫的子模組b倉庫只是乙個引用,而在subtree中,這個子模組b倉庫卻是實實在在存在於a倉庫中的,所以從b倉庫pull下來後,還得push到a倉庫中的b倉庫
6.進入子模組b倉庫,修改檔案後提交
#修改完子模組檔案後,回到a倉庫
cd..
#提交**到遠端a倉庫下的b倉庫
git push
#同時也需要提交**到遠端b倉庫
git subtree push --prefix=subtree subtree-origin master
若是使用了–squash,則在以後所有的關於子模組的拉取操作,都得加上–squash,否則會出現詭異的問題。
若是沒有使用–squash,則在以後所有的關於子模組的拉取操作,都不能加上–squash,否則會出現詭異的問題。
第六天學習
變數的作用域 區域性變數 在函式內部定義的變數,這個變數只能在函式內部使用,在全域性當中不能使用。使用就報錯了。全域性變數 在函式外部定義的變數,這個變數可以在全域性使用。但是我們一般不推薦使用全域性變數 因為可能會意外的修改掉變數的值。迫不得已不要用全域性變數 衝突處理原則 就近原則。而不是從上到...
學習第六天
還有九天,我就要去參加北大3日遊了。滑稽 像我這樣的蒟蒻去那也就是旅遊模式吧!無所謂了,隨便去考考,說不定有優秀營員呢?滑稽 不可能,絕對不可能 相信自己好了。這麼多天,好像把面試給忘了,雖然有人說面試是瞎 但是還是要準備準備的 明天看吧!還有什麼知識點沒看嗎?我們來看看st表和hash表吧!先看看...
學習android第六天
activity簡介 當在乙個activity中按下返回時,android os會自動銷毀activity物件 當在乙個activity中啟動另乙個activity時,當前activity不會被銷毀,而是被壓入activity棧中 activity的建立 1 自定義類,繼承activity 2 複寫...