天天看點

菜鳥git學習記錄

雖然工作中有用過git和gerrit  gitWeb,但感覺還是不夠了解git這個工具,到菜鳥網站配合公司内部一些學習資料重新學習一下。

Ubuntu18.0 中文配置

git安裝:sudo apt-get 指令    當初也是一條安裝指令解決。

配置全局使用者名和郵箱:

git config --global user.name '使用者名'

git config --global user.email '郵箱位址'

git commit指令每次都需要這兩個參數(使用者名和郵箱)

擷取SSH密鑰:ssh-keygen -t -rsa -C '賬号郵箱'            登入gitWeb後設定SSH公鑰

克隆git倉庫

先初始化目前工作倉庫:git init

然後克隆指令:git clone (遠端)代碼倉庫位址     

執行後,會在目前目錄下生成git倉庫,名字就是遠端倉庫名一樣的,存有所有版本記錄

下載下傳别人代碼:git pull 代碼倉庫位址

新初始化一個試驗用的本地git倉庫gitTest(平時項目工程目錄下git init已經運作過了)。建立完成,建立一個read.txt文檔,資料随便填一些。然後試了一下git status指令檢視狀态。

菜鳥git學習記錄

對比看一下。?? 應該就是未追蹤的意思了,就是沒有add進本地緩存庫。順便進.git目錄下看看,這些就是git所需的資源檔案了。

菜鳥git學習記錄

關于HEAD,打開檢視ref: refs/heads/master  ,這應該是完整的分支名路徑,在同級refs目錄下有相關檔案記錄。

退出.git目錄,接着操作read.txt   git add送出到本地緩存庫(暫存庫),檢視狀态,顯示标志'A',已追蹤。

gedit修改一下read.txt,此時再檢視狀态,顯示标志'AM',主要是這個M,标志檔案有改動,且尚未送出到緩存庫。

菜鳥git學習記錄

使用git diff可以檢視改動是啥,一行一行的。這裡顔色标紅到标綠,是改動的部分,相比之下新增了字元串'wuwang'。

---代表源檔案,+++代表目标檔案,一般來說目前工作目錄檔案被當做目标檔案(就是改過後的檔案),這裡目前檔案是改過之後的。空格開頭的行代表源檔案和目标檔案都存在的行,這裡就是字元串  zdy

菜鳥git學習記錄

然後使用git add . 一次性送出所有檔案到緩存庫。

然後才是送出到git倉庫指令(這裡是本地倉庫),git commit -m '關于此次送出的說明資訊'

每一次送出(commit)都會附上名字和郵箱,是以使用git才要事先就配置好使用者名和郵箱,如果僅在本倉庫設定身份辨別,則省略 --global 參數:

git config --global user.name '使用者名'

git config --global user.email '郵箱位址'

如果對送出到緩存庫的檔案感到後悔,可以撤銷操作,

git reset HEAD 想要撤銷的檔案  :比如對README和read.txt兩個檔案修改後送出到緩存庫,撤銷對read.txt的送出操作。

M标志 标紅且空了一格顯示有修改過的檔案。送出到緩存後再查的話,發現M之前是沒有空格的,且我這裡标綠色。

使用git reset HEAD read.txt 後,在檢視狀态,read.txt處于未送出狀态。

菜鳥git學習記錄

關于删除檔案:

嘗試直接使用  git rm 檔案名 ,緩存庫中和工作區域的檔案都沒了。

隻删除緩存區中的檔案,可以用,git rm --cache 檔案名

建立分支:git branch 分知名   我的了解是:把目前分支資源複制一份到新分支

切換分支:git checkout 分支名       

建立并切換到新分支下:git checkout -b 分支名 

合并分支:git merge 分支名       目前分支合并其他分支

關于合并分支

試驗後确實是如下情況:目前分支a合并其他分支b,a分支所擁有的和b分支不同的檔案(從檔案名看不同),會被删除,然後添加上b分支才有的檔案。

對于相同檔案(檔案名相同),但内容不同,會造成合并沖突,此時檔案内容已經被改動了,在不同處會有提示,手動更改目前分支檔案的内容,完成後git add 送出,commit上傳。

删除分支:git branch -d 分支名      -d 大概是delete的縮寫  分支合并後才順利删除

檢視曆史記錄

git log  一般來說内容非常多,基本資訊是commit id、送出人員、日期和送出說明(git commit -m '送出說明'),按q退出;回車一行行看比較麻煩,可以加參數--oneline,隻檢視每次送出時的說明語句和commit Id的前幾位。

菜鳥git學習記錄

也可以增加查詢條件:送出人員,--author;增加拓撲圖顯示,--graph;按時間段查詢,--before={時間}   --after={時間};

添加标簽,特别指明一個版本分支:git tag -a 标簽 -m '說明資訊'

添加一個遠端伺服器倉庫:git remote add 别名 遠端倉庫位址

比如:git remote add origin ssh://[email protected]:29418/gitTest.git

這個origin名字就可以在之後代指遠端倉庫,公司裡使用gitWeb内部區域網路,用ssh://使用者名@ip:port/倉庫名.git

本地用戶端使用:

pull伺服器代碼到本地

平時使用,想pull伺服器代碼到自己電腦,從一個空檔案夾(習慣檔案名取倉庫名)開始的話

1.初始化:git init 檔案名,cd 進入倉庫目錄

2.添加指定遠端庫位址:git remote add origin ssh://使用者名@ip:port/倉庫名.git

賬号(使用者名和密碼)是在伺服器端添加的,直接gerrit資料庫中添加。ip:port自然是伺服器的ip和監聽端口。

3.拉取代碼到本地與主分支合并:git pull origin master

push本地代碼到伺服器

剛初始化後的本地git倉庫修改代碼後,第一次push代碼到伺服器要設定

git config remote.origin.push refs/heads/*:refs/for/*        一定要這麼做,不然沒權限push

推送代碼到遠端倉庫主分支:git push origin master

即使運作了設定push權限語句,通常第一次還是會報錯:missing Change-Id in commit message footer    :  意思是沒有change-id,使用git log檢視也确實沒有。

會有提示要求輸入:gitdir=$(git rev-parse --git-dir); scp -p -P 29418 使用者名@IP:hooks/commit-msg ${gitdir}/hooks/

就是在.git/hooks/目錄下産生commit-msg檔案

這個從運作機制解釋,參考:https://blog.csdn.net/u012843873/article/details/82424514

以上輸入運作後,可以輸入 git commit --amend -m '送出說明資訊',以上指令一個倉庫運作一次後即可不用再次輸入。

然後可以推送本地分支commit檔案到遠端master分支: git push origin master

接觸了一下服務端gitWeb,上傳修改後代碼到伺服器,大體上需要經過稽核與入庫兩步,當然中間還可以有Jenkins自動化驗證。

在服務端需要涉及人員分組,權限管理等,這個也需要進一步學習使用。其中push代碼後,要經過設定好的稽核人員稽核後讓具備submit權限的人員操作入庫,就是合并到伺服器倉庫相應的分支上。這裡試驗就是合并到主分支master