git 操作以及submodule模式詳解,附加jenkins對submodule方式的集成

git常用命令

注意:請確保已經安裝里git客戶端

git使用幫助

git --help? ? //git使用幫助,可以查看git使用指令

一般配置

git --version ???? //查看git的版本信息

git config --global user.name 'username'? ?????//配置當前登錄的用戶

git config --global user.email 'email'? ?//配置當前登錄用戶的郵箱

git初始化

git init

查看目錄

ls? 或者 ls -al

查看文件

cat filename

增加到暫存區、取消增加

git add filename? ? //添加單個文件

git add . 或者git add -a? ? ?//添加所有未被忽略的文件

git reset HEAD index.html? ? ? //取消

增加到版本庫中

git commit -m "提交備注信息"

查看歷史提交

git log

比較差異

git diff? ?//比較的是暫存區和工作區的差異

git diff --cached? ? ?//比較的是暫存區和歷史區的差異

git diff master? ? //比較的是歷史區和工作區的差異(修改)

刪除

rm fileName? ? ?//刪除文件

git rm index.html --cached? ? //刪除暫存區

回滾

git reset --hard HEAD/commit_id

分支管理

git branch dev? ? //創建分支

git check dev? ? ?//切換分支

git checkout -b dev? ? //創建分支并切換分支

git branch -d dev? ? //刪除分支

git commit -a -m 'dev1' //分支上提交

git merge dev? //合并分支

git stash? ? //保留改動

git stash drop? ? //廢棄保留的內容

git stash pop? ? ?//使用保留的內容

git rebase? ? //合并分支

添加到遠程倉庫

git push -u origin master???? //獲取最新代碼

git remote add origin 倉庫的地址? ? //連接遠程倉庫

git remote -v? ? //查看遠程倉庫

git remote rm origin? ? //刪除遠程倉庫

更新代碼,合并沖突

git pull? ? ?//更新代碼

解決沖突(具體遇到時再貼圖完善)

根據更新代碼時的沖突日志,找到沖突文件,合并代碼,重新提交

以上為基礎的使用方式,以后有時間再完善。


git submodule 管理項目子模塊

使用場景:

當項目越來越龐大之后,不可避免的要拆分成多個子模塊,我們希望各個子模塊有獨立的版本管理,并且由專門的人去維護,這時候我們就要用到git的submodule功能。

什么是Submodule?

git Submodule是一個很好的多項目使用共同類庫的工具,他允許類庫項目做為repository,子項目做為一個單獨的git項目存在父項目中,子項目可以有自己的獨立的commit,push,pull。而父項目以Submodule的形式包含子項目,父項目可以指定子項目header,父項目中會的提交信息包含Submodule的信息,再clone父項目的時候可以把Submodule初始化。

常用指令:

git clone git地址?--recursive 遞歸的方式克隆整個項目

git submodule add 添加子模塊

git submodule init 初始化子模塊

git submodule update 更新子模塊

git submodule foreach git pull 拉取所有子模塊

使用:

1. 創建帶子模塊的版本庫

例如我們要創建如下結構的項目

project??

|--moduleA

|--readme.txt

創建project版本庫,并提交readme.txt文件

git init --bare project.git

git clone project.git project1

cd project1

echo"This is a project."> readme.txt

git add .

git commit -m "add readme.txt"

git push origin master

cd..

創建moduleA版本庫,并提交a.txt文件

git init --bare moduleA.git

git clone moduleA.git moduleA1

cd moduleA1

echo"This is a submodule."> a.txt

git add .

git commit -m"add a.txt"

git push origin master

cd..

在project項目中引入子模塊moduleA,并提交子模塊信息

cd project1

git submodule add ../moduleA.git moduleA

git status

git diff

git add .

gitcommit-m"add submodule"

git push originmastercd ..

使用git status可以看到多了兩個需要提交的文件,其中.gitmodules指定submodule的主要信息,包括子模塊的路徑和地址信息,moduleA指定了子模塊的commit id,使用git diff可以看到這兩項的內容。這里需要指出父項目的git并不會記錄submodule的文件變動,它是按照commit id指定submodule的git header,所以.gitmodules和moduleA這兩項是需要提交到父項目的遠程倉庫的。

Onbranch masterYour branchisup-to-datewith'origin/master'.Changestobe committed:? (use"git reset HEAD ..."tounstage)newfile:? .gitmodulesnewfile:? moduleA

2. 克隆帶子模塊的版本庫

方法一,先clone父項目,再初始化submodule,最后更新submodule,初始化只需要做一次,之后每次只需要直接update就可以了,需要注意submodule默認是不在任何分支上的,它指向父項目存儲的submodule commit id。

git clone project.git project2

cd project2

git submodule init

git submodule update

cd..

方法二,采用遞歸參數--recursive,需要注意同樣submodule默認是不在任何分支上的,它指向父項目存儲的submodule commit id。

git clone project.git project3 --recursive

3. 修改子模塊

修改子模塊之后只對子模塊的版本庫產生影響,對父項目的版本庫不會產生任何影響,如果父項目需要用到最新的子模塊代碼,我們需要更新父項目中submodule commit id,默認的我們使用git status就可以看到父項目中submodule commit id已經改變了,我們只需要再次提交就可以了。

先提交子模塊

cd project1/moduleA

git add .git commit -m"add b.txt"

git push origin master

再提交project

cd..

git status

git diff

git add .

git commit -m"update submodule add b.txt"

git push origin mastercd..

4. 更新子模塊

更新子模塊的時候要注意子模塊的分支默認不是master。

方法一,先pull父項目,然后執行git submodule update,注意moduleA的分支始終不是master。

cd project2

git pull

git submodule update

cd..

方法二,先進入子模塊,然后切換到需要的分支,這里是master分支,然后對子模塊pull,這種方法會改變子模塊的分支。

cd project3/moduleA

git checkout master

cd..

git submodule foreach git pull

cd..

5. 刪除子模塊

網上有好多用的是下面這種方法

git rm--cached moduleA

rm -rf moduleA

rm .gitmodules

vim .git/config

刪除submodule相關的內容,例如下面的內容

[submodule"moduleA"]? ? ? url =/Users/nick/dev/nick-doc/testGitSubmodule/moduleA.git

然后提交到遠程服務器

git add .

gitcommit-m"remove submodule"

但是我自己本地實驗的時候,發現用下面的方式也可以,服務器記錄的是.gitmodules和moduleA,本地只要用git的刪除命令刪除moduleA,再用git status查看狀態就會發現.gitmodules和moduleA這兩項都已經改變了,至于.git/config,仍會記錄submodule信息,但是本地使用也沒發現有什么影響,如果重新從服務器克隆則.git/config中不會有submodule信息。

git rm moduleA

git status

gitcommit-m"remove submodule"

git push origin master



Jenkins應用git submodule

Jenkins用來做項目的持續集成,如果使用了Git Submodule,每次Jenkins更新版本庫的時候還需要更新submodule的內容。

1、確保你已經下載并能使用Jenkins,如果沒有,自己去下載Jenkins

2、具體配置

新建自由風格項目,設置項目更新submodule


?Add Credentials(訪問git用到的用戶配置,不然會連接不上git倉庫)



其他構建配置:

具體構建問題可以通過構建日志去查看,排查,解決,這里就不做詳細說明了。


可以在jenkins的工作空間中查看git submodule 代碼是否拉取成功


最后構建


總的步驟已經說明完了。good luck~~~~~~~~~~~~


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • rebase 多人在同一個分支上協作時,很容易出現沖突。即使沒有沖突,后push的童鞋不得不先pull,在本地合并...
    七夏呀閱讀 169評論 0 0
  • 獲取與創建項目 創建倉庫的途徑有:在本地已有的目錄,初始化一個新的;克隆復制一份別人的項目。 git init 在...
    daking閱讀 6,610評論 3 48
  • git教程 git簡介 git是一個開源的分布式版本控制系統,用于敏捷高效的處理任何大小的項目。 git工作流程相...
    阿貍404閱讀 285評論 0 0
  • 配置 首先是配置帳號信息ssh -T git@github.com # 登陸 github 修改項目中的個人信息 ...
    guanguans閱讀 755評論 0 3
  • Add & Commit git init 初始化一個 Git 倉庫(repository),即把當前所在目錄變成...
    冬絮閱讀 4,880評論 0 9