Git學習第六天

2021-09-25 20:52:08 字數 2525 閱讀 4619

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 複寫...