git subtree教程

關(guān)于子倉庫或者說是倉庫共用显晶,git官方推薦的工具是git subtree道伟。 我自己也用了一段時(shí)間的git subtree敲董,感覺比git submodule好用碳竟,但是也有一些缺點(diǎn)顽染,在可接受的范圍內(nèi)漾岳。
所以對(duì)于倉庫共用,在git subtree 與 git submodule之中選擇的話粉寞,我推薦git subtree尼荆。

git subtree是什么?為什么使用git subtree

git subtree 可以實(shí)現(xiàn)一個(gè)倉庫作為其他倉庫的子倉庫唧垦。


image

使用git subtree 有以下幾個(gè)原因:

  • 舊版本的git也支持(最老版本可以到 v1.5.2).
  • git subtree與git submodule不同捅儒,它不增加任何像.gitmodule這樣的新的元數(shù)據(jù)文件.
  • git subtree對(duì)于項(xiàng)目中的其他成員透明,意味著可以不知道git subtree的存在.

當(dāng)然,git subtree也有它的缺點(diǎn)巧还,但是這些缺點(diǎn)還在可以接受的范圍內(nèi):

  • 必須學(xué)習(xí)新的指令(如:git subtree).
  • 子倉庫的更新與推送指令相對(duì)復(fù)雜鞭莽。

git subtree 的使用

git subtree的主要命令有:

git subtree add   --prefix=<prefix> <commit>
git subtree add   --prefix=<prefix> <repository> <ref>
git subtree pull  --prefix=<prefix> <repository> <ref>
git subtree push  --prefix=<prefix> <repository> <ref>
git subtree merge --prefix=<prefix> <commit>
git subtree split --prefix=<prefix> [OPTIONS] [<commit>]

準(zhǔn)備

我們先準(zhǔn)備一個(gè)倉庫叫photoshop,一個(gè)倉庫叫l(wèi)ibpng麸祷,然后我們希望把libpng作為photoshop的子倉庫澎怒。
photoshop的路徑為https://github.com/test/photoshop.git,倉庫里的文件有:

photoshop
    |
    |-- photoshop.c
    |-- photoshop.h
    |-- main.c
    \-- README.md

libPNG的路徑為https://github.com/test/libpng.git阶牍,倉庫里的文件有:

libpng
    |
    |-- libpng.c
    |-- libpng.h
    \-- README.md

以下操作均位于父倉庫的根目錄中喷面。

在父倉庫中新增子倉庫

我們執(zhí)行以下命令把libpng添加到photoshop中:

git subtree add --prefix=sub/libpng https://github.com/test/libpng.git master --squash

(--squash參數(shù)表示不拉取歷史信息,而只生成一條commit信息走孽。)

執(zhí)行git status可以看到提示新增兩條commit:

image

git log查看詳細(xì)修改:

image

執(zhí)行git push把修改推送到遠(yuǎn)端photoshop倉庫惧辈,現(xiàn)在本地倉庫與遠(yuǎn)端倉庫的目錄結(jié)構(gòu)為:

photoshop
    |
    |-- sub/
    |   |
    |   \--libpng/
    |       |
    |       |-- libpng.c
    |       |-- libpng.h
    |       \-- README.md
    |
    |-- photoshop.c
    |-- photoshop.h
    |-- main.c
    \-- README.md

注意,現(xiàn)在的photoshop倉庫對(duì)于其他項(xiàng)目人員來說融求,可以不需要知道libpng是一個(gè)子倉庫咬像。什么意思呢?
當(dāng)你git clone或者git pull的時(shí)候生宛,你拉取到的是整個(gè)photoshop(包括libpng在內(nèi)县昂,libpng就相當(dāng)于photoshop里的一個(gè)普通目錄);當(dāng)你修改了libpng里的內(nèi)容后執(zhí)行git push陷舅,你將會(huì)把修改push到photoshop上倒彰。
也就是說photoshop倉庫下的libpng與其他文件無異。

從源倉庫拉取更新

如果源libpng倉庫更新了莱睁,photoshop里的libpng如何拉取更新待讳?使用git subtree pull,例如:

git subtree pull --prefix=sub/libpng https://github.com/test/libpng.git master --squash

推送修改到源倉庫

如果在photoshop倉庫里修改了libpng仰剿,然后想把這個(gè)修改推送到源libpng倉庫呢创淡?使用git subtree push,例如:

git subtree push --prefix=sub/libpng https://github.com/test/libpng.git master

簡化git subtree命令

我們已經(jīng)知道了git subtree 的命令的基本用法南吮,但是上述幾個(gè)命令還是顯得有點(diǎn)復(fù)雜琳彩,特別是子倉庫的源倉庫地址,特別不方便記憶部凑。
這里我們把子倉庫的地址作為一個(gè)remote露乏,方便記憶:

git remote add -f libpng https://github.com/test/libpng.git

然后可以這樣來使用git subtree命令:

git subtree add --prefix=sub/libpng libpng master --squash
git subtree pull --prefix=sub/libpng libpng master --squash
git subtree push --prefix=sub/libpng libpng master

更多

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市涂邀,隨后出現(xiàn)的幾起案子瘟仿,更是在濱河造成了極大的恐慌,老刑警劉巖比勉,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劳较,死亡現(xiàn)場離奇詭異驹止,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)兴想,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門幢哨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嫂便,你說我怎么就攤上這事捞镰。” “怎么了毙替?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵岸售,是天一觀的道長。 經(jīng)常有香客問我厂画,道長凸丸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任袱院,我火速辦了婚禮屎慢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忽洛。我一直安慰自己腻惠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布欲虚。 她就那樣靜靜地躺著集灌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪复哆。 梳的紋絲不亂的頭發(fā)上欣喧,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音梯找,去河邊找鬼唆阿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛锈锤,可吹牛的內(nèi)容都是我干的酷鸦。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼牙咏,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了嘹裂?” 一聲冷哼從身側(cè)響起妄壶,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎寄狼,沒想到半個(gè)月后丁寄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氨淌,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年伊磺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盛正。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屑埋,死狀恐怖豪筝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摘能,我是刑警寧澤续崖,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站团搞,受9級(jí)特大地震影響严望,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逻恐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一像吻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧复隆,春花似錦拨匆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至轻局,卻和暖如春洪鸭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仑扑。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工览爵, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人镇饮。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓蜓竹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親储藐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俱济,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容