乾貨|如何讓同事不再吐槽自己的git管理技術

語言: CN / TW / HK

       程式碼作為程式設計師辛苦加班的結晶,同時也是平時交流最多的方式,"低眉信手續續彈,說盡心中無限事"。她低著頭手在鍵盤上連續地敲個不停;像是用滿屏的程式碼把心中無限的往事說盡,"輕攏慢捻抹復挑,初為《霓裳》後《六么》",初為然而此刻他並沒有像久別重逢的老友一般,嘰嘰喳喳的說個不停,而是輕輕地攏,慢慢地捻,一會兒抹,一會兒挑,一會兒寫策略,一會兒又琢磨起了觀察者。現在話鋒一轉,又談起了git:
 
想了解git命令,來一個help看看都有哪些命令:
git help <command>
git <command> -h
git <command> --help
瞭解之後,想進入git,怎麼辦?一般我們都不需要重新搭建一個內網git,因為不可能說每個人來到單位,都要把git平臺重新搞一遍,而且大多數時候,我們作為開發,是不會有管理員許可權的。管理員許可權一般由運維把控。所以現在需要找運維童鞋給你開一個賬號,開完後,他會把賬號密碼還有登入地址都發給你(溝通方式看各個公司規定)。
 
到這裡你已經拿到自己的git資訊,假設realname="王小風",username="wangxiaofeng",password=wxf20220623
 
配置下使用者的賬號資訊:
git config --global user.name "wangxiaofeng"
git config --global user.email [email protected]
配置級別
–local(預設,高階優先):隻影響本地倉庫
–global(中優先順序):隻影響所有當前使用者的git倉庫
–system(低優先順序):影響到全系統的git倉庫
 
剛進公司,環境搭建好之後,也沒啥需求。摸會兒魚?好想法。。。悄咪咪的刷會抖音,開啟收藏的歌單,播放《那女孩對我說》,看著影片中的畫面,聽著一句句熟悉的歌詞,腦海中漸漸浮現出她的音容笑貌:
 
那年那時,跟她談音樂休養,聊娛樂八卦,相約帝都,共戰峽谷。時時醉心於她那機智的言辭,爽朗的笑聲。曾經無數次以為可以這樣一直開心的聊天。卻沒想到因為自己的一再猶疑不決,最終導致分道揚鑣,天各一方。。。小宅,你最近還好嗎?
 
好!現在你要獨立完成一個新專案,要先把專案加到git管理,要不然當你碼了幾天重要業務邏輯後,電腦出現不可修復故障,不是要哭暈在廁所?
 
進入專案所在目錄,然後
git init
初始化專案。
git init newProject
這樣git就會幫你建立好一個專案
 
但是專案中的檔案還沒有上傳上去,怎麼辦呢,提交程式碼分三步走,要一步步來:
呼叫
git add #將當前工作目錄的所有檔案新增到暫存區
git add -u # 把修改之後的檔案(這些檔案已經被管理起來了)一次性提交到暫存區
這裡要注意下,add命令呼叫之後,程式碼已經加入git管理,就是提交了三分之一。
 
然後在呼叫git commit 命令進行提交,提交的歷史會被記錄下來:
 
$ git commit -m 'MainApplication.java' # -m 指定 commit 的資訊
$ git commit # 這時候會跳出一個文字輸入介面,讓你輸入更多的 commit 資訊
又向前買了一步,現在程式碼儲存的位置我們稱之為暫存區。
 
你覺得一個檔案的名字不好聽,想換一個,可以:
git mv MainApplication.java UserApplication.java
最後一步,是把程式碼推送到git遠端分支:
$ git push
此時程式碼是推送到master上面的。一個人寫完程式碼直接推送到master上面,簡直不要太爽!
 
現在我們知道,程式碼檔案從建立到提交一路要經過四個地方,分別是本地(local)-->加入程式碼管理-->暫存區-->遠端倉庫。第二步和第三步是已經新增到git管理,程式碼存在暫存區,第四步程式碼在git遠端倉庫。
 
協作開發
 
剛開始這個專案由你一個人單獨開發,一天接到訊息:兩週後要給領導演示。但是根據現在進度,以及剩餘工作亮評估後需要三週左右時間。而進度壓縮只有兩種方式:趕工和快速跟進。一個人快速跟進,肯定是不行了,只能增加人手,用趕工的方式來完成了。OK,現在一個新的小夥伴王小悠到位。
 
這個時候,你們的程式碼管理需要用到分支,分支相當於一個獨立的開發空間,團隊成員以同一套release程式碼作為依託,新建功能分支,但是彼此在不同工作空間裡面工作的時候是互不影響的,當需要整合的時候又可以把他們整合到一個公共的分支上面去。
 
多人開發git管理模式:從master上拉取並新建release分支程式碼,release分支作為正式上線和團隊中開發人員拉取專案功能分支的分支,這個分支名稱命名我建議用這種格式:dev_公司名稱簡稱全拼_功能名稱_分支建立時間(年月日),例如:dev_digndang_userPay_20220529。後面我們再通過dev_digndang_userPay_20220529拉取最新程式碼並建立自己的功能分支。

    

下面是有關分支的操作:
HEAD->feature_wangxiaofeng_20220530_userLogin
表示當前的 HEAD 指向的是 feature_wangxiaoyou_20220530_userLogin分支,其實真正指向的是該分支最後一次 commit。
 
【建議】分支建立的命名規則:使用者名稱全拼音_分支建立時間(年月日)_功能名稱
 
git branch #檢視分支情況、建立分支、刪除分支
git branch -v # 檢視本地分支的詳細情況
git branch -a # 檢視所有分支,包括遠端分支,但沒有過於詳細的資訊
git branch -av # 檢視所有分支情況
git branch branch_name hash_value # 建立一個新的分支,基於 hash_value 的這個 commit 建立一個新的分支,hash_value 可以省略,那麼預設是基於當前分支的最後一個 commit 建立。
git branch -d branch_name
git branch -D branch_name # 這個分支已經有了一些 commit
git checkout branch_name # 切換分支
例如:你想切換到王小悠的支付分支上:
git checkout feature_wangxiaoyou_20220530_pay

git checkout -b branch_name git_id # 建立一個新的分支並切換過去,git_id可以是hash_value,也可以是某個分支的名字(分支的名字其實就指向了某個 commit)
如果你現在寫完一個需求,程式碼commit到暫存區,還沒有推送到遠端倉庫,現在使用
git diff --cached 命令,可以比較暫存區程式碼和本分支最新分支程式碼中間的差異;
 
如果你繼續提交程式碼到程式碼分支的遠端倉庫,push完成後,覺得還是不放心,擔心影響release程式碼,這時,你可以拿自己分支的程式碼跟release程式碼作比較,需要用到
比較:git diff命令:
 
git diff feature_wangxiaofeng_20220530_userLogin release # feature_wangxiaofeng_20220530_userLogin對應的 comimit 和 release 對應的 commit 進行比較(暫存區的比較)
git diff feature_wangxiaofeng_20220530_userLogin release -- file_name1 file_name2 # 在上述基礎之上,只比較 file_name1、file_name2 這兩個檔案(暫存區的兩個檔案比較)
git diff branch_name1 branch_name2 # 對兩個分支進行比較(遠端倉庫的比較)
git diff branch_name1 branch_name2 -- file_name1 file_name2(遠端倉庫的兩個檔案比較)
10天后專案開發完了,王小風和王小悠的程式碼統一提交到dev_digndang_userPay_20220529分支,然後根據產品童鞋的上線日期,合併程式碼到release分支,最後通知運維童鞋部署release程式碼到正式服。
 
接下來,就是等著發專案獎金了。。哈哈。。。
 
彩蛋福利
 
相逢即是有緣,再給大家推薦一個超炫的git管理工具:gitkraken
左側欄有LOCAL(本地倉庫)、REMOTE(遠端倉庫)、STASHES(修改點)、TAGS(標籤)、SUBMODULES(子模組),相當於省去 git branch,直接一目瞭然所有分支

gitkraken6.5.3本地庫開始收費,舊版本下載地址
 
收費版本
{
"version": "6.5.3",
"url_deb": "http://release.axocdn.com/linux/GitKraken-v6.5.3.deb",
"url_rpm": "http://release.axocdn.com/linux/GitKraken-v6.5.3.rpm",
"url_targz": "http://release.axocdn.com/linux/GitKraken-v6.5.3.tar.gz",
"url_exe": "http://release.axocdn.com/win64/GitKrakenSetup-6.5.3.exe"
}
免費版本
{
"version": "6.5.1",
"url_deb": "http://release.axocdn.com/linux/GitKraken-v6.5.1.deb",
"url_rpm": "http://release.axocdn.com/linux/GitKraken-v6.5.1.rpm",
"url_targz": "http://release.axocdn.com/linux/GitKraken-v6.5.1.tar.gz",
"url_exe": "http://release.axocdn.com/win64/GitKrakenSetup-6.5.1.exe"
}
再放一個免費版本下載連結: