Git支持對每次提交的日志信息進(jìn)行規(guī)范,可以通過設(shè)置提交模板實(shí)現(xiàn)。
建立一個gitCommitTemplate文件,內(nèi)容為:
#commit message包含三部分,header, body和footer,其中header必選,body和footer可選。
# type(<scope>): <subject>
#<body>
#<footer>
#type字段包含:
# feature:新功能開發(fā)
# update:功能修改
# bugfix:bug修復(fù)
# refactor:重構(gòu)(非新增功能、非bug修復(fù))
# docs:文檔(documentation)
# style:格式(不影響代碼運(yùn)行的變動)
# test:增加測試
# chore:構(gòu)建過程或輔助工具的變動
#scope用于說明commit影響的范圍,比如數(shù)據(jù)層、控制層、視圖層等等,不同項(xiàng)目不同。
#subject是commit目的的簡短描述,不超過50個字符。
#以動詞開頭,使用第一人稱現(xiàn)在時,比如change,而不是changed或changes。
#第一個字母小寫。
#結(jié)尾不加句號(.)。
#body部分是對本次commit的詳細(xì)描述,可以分成多行。
#使用第一人稱現(xiàn)在時,比如使用change而不是changed或changes。
#應(yīng)該說明代碼變動的動機(jī)以及與以前行為的對比。
#footer
#A、如果當(dāng)前代碼與上一個版本不兼容,則footer部分以BREAKING CHANGE開頭,
# 后跟對變動的描述、變動理由以及遷移方法。
#B、關(guān)閉Issue,關(guān)閉某個issue可以:close #issue_id,多個使用逗號分隔
Revert撤銷操作
如果當(dāng)前commit用于撤銷以前的commit,則必須以revert:開頭,后面跟著被撤銷Commit的Header。
revert: feat(pencil): add 'graphiteWidth' option
This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
Body部分的格式是固定的,必須寫成?This?reverts commit?commit_id.?,其中的hash是被撤銷commit的?SHA?標(biāo)識符?。 如果當(dāng)前commit與被撤銷的commit,在同一個發(fā)布(release)里面, 那么都不會出現(xiàn)在Change log 里面。如果兩者在不同的發(fā)布,那么當(dāng)前commit,會出現(xiàn)在Change log的Reverts小標(biāo)題下面。
設(shè)置當(dāng)前分支的提交模板
git config commit.template [模板文件名]
git config commit.template gitcommit_template
設(shè)置全局的提交模板
git config --global commit.template [模板文件名]
git config --global commit.template gitcommit_template
設(shè)置文本編輯器
git config --global core.editor [編輯器名稱]
git config --global core.editor vim
使用git commit -a提交時,Git會用設(shè)置的編輯器打開設(shè)置的提交日志模板,然后按照格式添加相應(yīng)的備注,保存提交到遠(yuǎn)程分支。
Git可以通過對log的分析進(jìn)行代碼統(tǒng)計。
git log參數(shù)說明:
--author
指定作者
--stat 顯示每次更新的文件修改統(tǒng)計信息,會列出具體文件列表
--shortstat 統(tǒng)計每個commit 的文件修改行數(shù),包括增加,刪除,但不列出文件列表:
--numstat 統(tǒng)計每個commit 的文件修改行數(shù),包括增加,刪除,并列出文件列表:
-p 選項(xiàng)展開顯示每次提交的內(nèi)容差異,用 -2 則僅顯示最近的兩次更新,例如:git log -p -2
--name-only 僅在提交信息后顯示已修改的文件清單
--name-status 顯示新增、修改、刪除的文件清單
--abbrev-commit 僅顯示SHA-1的前幾個字符,而非所有的40個字符
--relative-date 使用較短的相對時間顯示
--graph 顯示ASCII圖形表示的分支合并歷史
--since 限制顯示輸出的范圍,
例如:git log --since=2.weeks 顯示最近兩周的提交
選項(xiàng)說明
-(n) 僅顯示最近的 n 條提交
--since, --after 僅顯示指定時間之后的提交。
--until, --before 僅顯示指定時間之前的提交。
--author 僅顯示指定作者相關(guān)的提交。
--committer 僅顯示指定提交者相關(guān)的提交。
git log --until=1.minute.ago // 一分鐘之前的所有 log
git log --since=1.day.ago //一天之內(nèi)的log
git log --since=1.hour.ago //一個小時之內(nèi)的 log
git log --since=`.month.ago --until=2.weeks.ago //一個月之前到半個月之前的log
git log --since ==2013-08.01 --until=2013-09-07 //某個時間段的log
git blame //看看某一個文件的相關(guān)歷史記錄
git blame index.html --date short
--pretty 使用其它格式顯示歷史提交信息。可用的選項(xiàng)包括 oneline,short,full,fuller 和 format(后跟指定格式)。
git log --pretty=oneline ;
git log --pretty=short ;
git log --pretty=full ;
git log --pretty=fuller
--pretty=tformat: 可以定制要顯示的記錄格式,便于后期編程提取分析。
git log --pretty=format:""%h - %an, %ar : %s""
%H 提交對象(commit)的完整哈希字串
%h 提交對象的簡短哈希字串
%T 樹對象(tree)的完整哈希字串
%t 樹對象的簡短哈希字串
%P 父對象(parent)的完整哈希字串
%p 父對象的簡短哈希字串
%an 作者(author)的名字
%ae 作者的電子郵件地址
%ad 作者修訂日期(可以用 -date= 選項(xiàng)定制格式)
%ar 作者修訂日期,按多久以前的方式顯示
%cn 提交者(committer)的名字
%ce 提交者的電子郵件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式顯示
%s 提交說明git log --author="username" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'
統(tǒng)計用戶名為username的開發(fā)者增刪的代碼行數(shù)git log --author="$(git config --get user.name)" --pretty=tformat: --numstat | gawk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }'
統(tǒng)計當(dāng)前用戶增刪的代碼行數(shù)git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
統(tǒng)計每個開發(fā)者增刪的代碼行數(shù)git log --pretty='%aN' | sort | uniq -c | sort -k1 -n -r | head -n 5
統(tǒng)計倉庫提交者排名前5的開發(fā)者git log --pretty='%aN' | sort -u | wc -l
統(tǒng)計倉庫貢獻(xiàn)者的數(shù)量git log --oneline | wc -l
倉庫提交數(shù)量統(tǒng)計
目前主流的Git在線代碼托管工具如下:
GitHub:https://github.com
GitHub是一個面向開源及私有軟件項(xiàng)目的托管平臺。
Gitee(碼云):https://gitee.com
中國本土的在線代碼托管協(xié)作開發(fā)平臺。
GitLab:https://gitlab.com
GitLab是一個用于倉庫管理系統(tǒng)的開源項(xiàng)目,支持無 限公有項(xiàng)目和私有項(xiàng)目,支持在局域網(wǎng)內(nèi)使用GiLab CE搭建代碼托管服務(wù)器。
Pull Request是集成管理者工程流程在GitHub上的工程實(shí)踐,是開發(fā)者使用GitHub進(jìn)行協(xié)作開發(fā)的一種通知機(jī)制,讓開發(fā)者通知項(xiàng)目成員一個功能已經(jīng)完成。如果功能分支開發(fā)完畢,開發(fā)者使用GitHub賬號提交一個Pull Request,通知所有參與者需要進(jìn)行代碼審查,并將代碼并入master分支。Pull Request還提供了專注于某個提交功能的討論版。
Pull Request的工作流程如下:
A、開發(fā)者從某個項(xiàng)目的官方倉庫Fork一份拷貝到自己GitHub賬戶,此時開發(fā)者的GitHub賬戶會有一份項(xiàng)目官方倉庫的拷貝。
B、開發(fā)者將自己遠(yuǎn)程倉庫的項(xiàng)目副本克隆到本地
C、開發(fā)者在自己本地倉庫為某個功能創(chuàng)建一個專門的分支,并完成功能開發(fā)。
D、開發(fā)者將開發(fā)完成的功能分支推送到自己GitHub賬戶的公開倉庫。
E、開發(fā)者用GitHub發(fā)起一個Pull Request。
F、其他團(tuán)隊(duì)成員審查代碼,討論并且做出修改。
G、項(xiàng)目維護(hù)者將功能并入官方倉庫,然后關(guān)閉Pull Request。
scorpio是HyperLedger Fabric的開發(fā)者,Mary是HyperLedger Fabric項(xiàng)目的維護(hù)者。HyperLedger Fabric在GitHub的官方倉庫地址如下:
https://github.com/hyperledger/fabric
A、將HyperLedger Fabric項(xiàng)目官方倉庫fork到自己的GHub賬戶。
為了參與HyperLedger Fabric項(xiàng)目,scorpio首先要fork HyperLedger Fabric項(xiàng)目在GitHub的官方倉庫。scorpio需要注冊登錄 GitHub,找到HyperLedger Fabric的官方倉庫,點(diǎn)擊Fork按鈕。
此時,GitHub會在scorpio賬戶中派生一份HyperLedger Fabric的官方倉庫的拷貝。
B、將自己GitHub賬戶中的HyperLedger Fabric項(xiàng)目副本克隆到本地。
scorpio需要將剛剛fork的GitHub倉庫克隆到本地。
git clone https://github.com/scorpiostudio/fabric
git clone自動創(chuàng)建一個名為origin的遠(yuǎn)端倉庫,指向scorpio自己GitHub賬戶中的fabric倉庫(https://github.com/scorpiostudio/fabric)。
C、在本地倉庫創(chuàng)建feature分支
在進(jìn)行開發(fā)前,scorpio需要創(chuàng)建一個新的功能分支some-feature。
git checkout -b some-feature
D、在新建的feature分支上完成功能開發(fā)
scorpio在當(dāng)前分支some-feature上進(jìn)行功能開發(fā),最終完成。
E、將本地倉庫開發(fā)的功能分支推送到開發(fā)者自己的GitHub賬戶的遠(yuǎn)程倉庫。
在完成some-feature功能開發(fā)后,scorpio將some-feature分支推送到自己的GitHub倉庫(https://github.com/scorpiostudio/fabric)上。
git push origin some-feature
此時,scorpio開發(fā)的some-feature功能就可以被其他人看到。
F、開發(fā)者在GitHub上的項(xiàng)目官方倉庫創(chuàng)建一個Pull Request
scorpio需要找到HyperLedger Fabric項(xiàng)目的官方倉庫(https://github.com/hyperledger/fabric),點(diǎn)擊項(xiàng)目簡介下的New pull request按鈕,使用自己的GitHub帳號創(chuàng)建一個Pull Request。
scorpio的倉庫會被默認(rèn)設(shè)置為源倉庫(head fork),詢問指定源分支(compare)、目標(biāo)倉庫(base fork)和目標(biāo)分支(base)。
scorpio想要將自己開發(fā)的some-feature功能并入主代碼庫,所以源分支是scorpio的some-feature分支,目標(biāo)倉庫就是HyperLedger Fabric項(xiàng)目的官方倉庫,目標(biāo)分支為master。scorpio需要提供一個Pull Request的標(biāo)題和簡介。
在scorpio創(chuàng)建一個Pull Request后,GitHub會給HyperLedger Fabric項(xiàng)目的維護(hù)者M(jìn)ary發(fā)一個通知。
G、項(xiàng)目官方倉庫的維護(hù)者審查開發(fā)者提交的功能分支
Mary可以在自己的GitHub倉庫下的Pull Request選項(xiàng)卡中看到所有的 Pull Request。點(diǎn)擊scorpio的Pull Request會顯示Pull Request的簡介、some-feature分支的提交歷史以及包含的更改。
H、項(xiàng)目官方倉庫的維護(hù)者接受開發(fā)折提交的功能分支并關(guān)閉Pull Request
如果Mary認(rèn)為some-feature分支已經(jīng)可以合并,只需點(diǎn)擊Merge Pull Request按鈕來通過當(dāng)前的Pull Request,將scorpio提交的some-feature分支并入HyperLedger Fabric官方倉庫的master分支。
如果Mary發(fā)現(xiàn)了scorpio代碼中的一個小bug,需要scorpio在合并前修復(fù)。Mary可以評論整個Pull Request,也可以評論some-feature分支中某個特定的提交。
為了修復(fù)錯誤,scorpio在自己本地倉庫some-feature分支后面添加了另一個提交,并將它推送到了GitHub遠(yuǎn)程倉庫。此時修復(fù)bug的提交被自動添加到原來的Pull Request后面,Mary可以在評論下方再次審查scorpio的修改。
最終,經(jīng)過多次修改后,Mary接受了scorpio提交的功能,將some-feature分支并入HyperLedger Fabric官方倉庫master分支,并關(guān)閉scorpio創(chuàng)建的Pull Request?,F(xiàn)在some-feature功能現(xiàn)在已經(jīng)整合到了HyperLedger Fabric項(xiàng)目中,其他在master分支上工作的開發(fā)者可以使用標(biāo)準(zhǔn)的git pull命令將上述修改拉取到自己的本地倉庫。
Merge Request是集成管理者工程流程在GitLab上的工程實(shí)踐。
用Admin或Owner或Master賬號登錄,打開指定project -> Settings -> Repository -> Protected Branches,選擇要protect的branch (支持wildcard):
要求每個人都要通過Merge Request才能合并代碼進(jìn)入public branch:選擇”Allowed to merge”為”Developers + Masters”,選擇”Allowed to push” 為”No one“。
Merge Request工作流程如下:
A、從項(xiàng)目的官方倉庫fork一份拷貝到GitLab的個人賬戶。此時個人賬戶有一份項(xiàng)目官方倉庫的拷貝。
B、將個人賬戶的項(xiàng)目倉庫克隆到本地
C、在本地倉庫創(chuàng)建一個新的本地分支,進(jìn)行任務(wù)開發(fā),開發(fā)完成后推送到個人GitLab賬戶的遠(yuǎn)程倉庫,此時Git會提示進(jìn)行Merge Request。
D、開發(fā)者登錄GitLab賬戶,在fork的官方項(xiàng)目副本上發(fā)起Merge Request。打開項(xiàng)目,點(diǎn)擊右側(cè)的Create merge request。
選擇Source branch和Target branch,Source branch分支為個人GitLab賬戶中的遠(yuǎn)程倉庫分支,Target branch分支為GitLab官方倉庫的分支
點(diǎn)擊”Compare branches and continue“
填寫標(biāo)題和表述信息。
選擇Assignee(指派給誰) (不要選擇Assign to me)
如果是臨時branch,勾選“Remove source branch when merge request is accepted”
檢查無誤后,點(diǎn)擊“Submit merge request”按鈕。
如果發(fā)起Merge Request后,在本Merge Request關(guān)閉前,繼續(xù)往source branch分支push代碼,后續(xù)commit也會被自動包含在本Merge Request里。
E、其他人進(jìn)行代碼審查,通過Merge Request。
被指派者登錄GitLab個人賬戶,點(diǎn)擊由上角Merge Request,查看當(dāng)前的Merge Request任務(wù)。
點(diǎn)擊Merge Request任務(wù)進(jìn)入
點(diǎn)擊Commit查看詳細(xì)信息
點(diǎn)擊Changes查看具體的改動
寫comment,并和代碼提交者討論。
審查通過后,點(diǎn)擊”Merge”按鈕
如果審查不通過,寫清楚comment,并在和代碼提交者討論后,要求其進(jìn)行修改。
F、結(jié)果查看
點(diǎn)擊GitLab上的項(xiàng)目官方倉庫,選擇相應(yīng)的分支,可以看到,開發(fā)者M(jìn)erge Request申請合并的分支已經(jīng)并入了官方倉庫。
上述實(shí)驗(yàn)在GitLab CE(社區(qū)版)中進(jìn)行,因此實(shí)際上發(fā)起Merge Request申請的人或是其他人,只要具有Merge權(quán)限都可以進(jìn)行Merge。
GitLab CE(社區(qū)版)發(fā)起Merge Request時,所有具備Merge的項(xiàng)目成員都可以Merge;
GitLab EE(企業(yè)版)加入了權(quán)限管理審批機(jī)制(Merge Request Approvals),只有指派的成員才可以Merge。
選擇分支策略的原則:
A、始終保持master處在可發(fā)布狀態(tài)
B、始終保持構(gòu)建處在成功狀態(tài)
C、降低代碼合并的復(fù)雜度和風(fēng)險
D、降低團(tuán)隊(duì)溝通成本
E、符合團(tuán)隊(duì)的現(xiàn)狀
代碼審查的原則:
A、不要既當(dāng)運(yùn)動員,又當(dāng)裁判員。
B、審查代碼是否滿足功能、規(guī)范、測試結(jié)果、測試覆蓋等。
C、借助自動化代碼審查工具來提升代碼審查的效率。
D、審查合格才允許并入public branch,不合格的代碼退回重新修改。
E、不怕犯錯,但不要犯重復(fù)的錯。
F、提交審查前,自己先檢查一遍。
G、鼓勵使用同行評審(Peer Review)而不是上下級評審,鼓勵積極反饋、互動。
H、評審對事不對人,多建議,不批評
I、評審過程對reviewer和代碼提交者雙方都是一個學(xué)習(xí)提升的過程,保持開放的心態(tài),相互學(xué)習(xí),共同成長。
GUI Clients:https://www.git-scm.com/downloads/guis
部分提供免費(fèi)版的Git客戶端如下:
SourceTree:Windows,Mac(支持Git Flow)
GitHub Desktop:Windows,Mac(支持Pull Request)
TortoiseGit:Windows
Git Extensions:Linux, Mac, Windows
GitKraken:Linux, Mac, Windows
SmartGit:Linux, Mac, Windows(支持Git Flow,Pull Request)
CodeReview:Linux, Mac, Windows
GitEye:Linux, Mac, Windows
GitGUI: Linux, Windows(Git官方GUI客戶端)
目前軟件開發(fā)的主流IDE通過插件方式支持Git。
Eclipse :通過Egit插件提供Git集成支持。
Visual Studio:通過Git Integration、GitHub Extension等Git插件提供Git集成支持。
QtCreator:通過Git插件提供Git集成支持(QtCreator高版本支持GitK,GitGUI)。
IntelliJ IDEA:通過GitXXX插件提供Git集成支持。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)站欄目:Git工程開發(fā)實(shí)踐(六)——Git工程實(shí)踐擴(kuò)展-創(chuàng)新互聯(lián)
文章URL:http://m.rwnh.cn/article32/dsdspc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站導(dǎo)航、網(wǎng)站排名、關(guān)鍵詞優(yōu)化、做網(wǎng)站、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容