Git實(shí)際開發(fā)使用總結(jié)

前言

  1. 本文用于記錄在實(shí)際開發(fā)中使用到的git操作。
  2. 當(dāng)前筆者的操作環(huán)境是macOS 10.13.6瑞躺,git版本是2.15.1酱虎,使用的git服務(wù)器是GitLab。
  3. 通過本文你會得到下面這些東西:
    • 使用tab鍵自動補(bǔ)全git命令幕垦;
    • 使用SSH來登錄你的git賬號;
    • 忽略文件.gitignore傅联;
    • 為版本添加tag先改;
    • GitLab用戶權(quán)限;

使用tab鍵自動補(bǔ)全git命令

注:這里僅限mac系統(tǒng)

親自可以的方法

  1. 去下載官方的補(bǔ)全文件蒸走,下載地址仇奶。

    PS:

    (1) 我沒有下載那個文件,因?yàn)闆]找到在哪有下載的按鈕比驻。所以直接點(diǎn)解“RAW”進(jìn)行在線預(yù)覽该溯,如果當(dāng)前文件不能在線預(yù)覽,就會自動下載别惦。預(yù)覽后狈茉,直接全文復(fù)制,后面再在本地新建文件進(jìn)行粘貼掸掸。

    (2) 一定要先看下自己電腦的git版本氯庆,補(bǔ)全文件必須要和自己Git的版本匹配。比如我的Git版本是2.15.1,那么打開補(bǔ)全文件的Github地址点晴,然后點(diǎn)擊左側(cè)的Branch感凤,切換到Tags,然后選擇與你Git版本相對應(yīng)的tag粒督。然后在復(fù)制補(bǔ)全文件陪竿。如下圖:

    選擇對應(yīng)的補(bǔ)全文件

  2. 切換到當(dāng)前用戶的home路徑下,如我的是/Users/zhangguiyou

  3. 把剛才下載的文件移動到這里屠橄。PS:我沒有下載上面的那個文件族跛,而是直接copy了文件的內(nèi)容,然后在home下使用vim(vim不會用的話锐墙,參照Linux下的命令大全)新建了一個.git-completion.bash文件礁哄,并把官方文件的內(nèi)容copy進(jìn)去。然后保存退出溪北。

  4. 讓剛才的補(bǔ)全文件生效桐绒。輸入命令:source ~/git-completion.bash(~/git-completion.bash的路徑是絕對路徑,所以你可以在任意目錄下執(zhí)行)之拨,其中的文件名就是上面那個文件的文件名.

  5. 這樣就可以自動補(bǔ)全了茉继。不過每一次開機(jī)都需要執(zhí)行一遍source ~/git-completion.bash。下面我們把這個命令加入到開機(jī)啟動項中.

  6. 打開當(dāng)前用戶的home路徑下的.bash_profile文件蚀乔。如果沒有的話烁竭,就用vim新建一個。

  7. 然后按i鍵進(jìn)入編輯模式吉挣,把source ~/git-completion.bash添加上去派撕。然后esc→:wq保存退出。

  8. 完成睬魂。

失敗的方法

下面是我試過之后失敗的方法:
使用HomBrew安裝git-completion终吼,然后在~/.bash_profile中添加

if [ -f $(brew --prefix)/etc/bash_completion ]; then
  . $(brew --prefix)/etc/bash_completion
fi

使用SSH來登錄你的git賬號

基本介紹

SSH安全認(rèn)證協(xié)議,也稱為公鑰汉买。類似于接頭暗號衔峰。有了SSH你在向git服務(wù)器請求代碼的時候就不需要用戶名和密碼了。前提是這個SSH在GIT 服務(wù)器上注冊了(類似于把你的ssh加入到了這個項目的版本控制)蛙粘。

Linux和Mac上的SSH目錄

  1. SSH公鑰默認(rèn)被存儲在~/.ssh目錄下⊥茫可以先cd ~/.ssh出牧,然后ls查看該路徑下的問題件。
  2. 如果已經(jīng)設(shè)置過公鑰的好歇盼,在~/.ssh目錄下應(yīng)該會有something 和 something.pub 來命名的一對文件舔痕,這個 something 通常就是 id_dsa 或 id_rsa。有 .pub 后綴的文件就是公鑰,另一個文件則是密鑰伯复。
  3. 如果沒有這些文件慨代,或者連.ssh都沒有,那么說明還沒有生產(chǎn)過SSH啸如∈坛祝可以用下面介紹的命令來生產(chǎn)。

生成SSH公鑰

  1. 在Linux或者M(jìn)ac上使用ssh-keygen命令叮雳。
  2. 它先要求你確認(rèn)保存公鑰的位置(.ssh/id_rsa)想暗,然后它會讓你重復(fù)一個密碼兩次,如果不想在使用公鑰的時候輸入密碼帘不,可以留空说莫。
  3. 完成后,再回到~/.ssh路徑下寞焙,就有id_dsa和 id_dsa.pub文件了储狭。
  4. 我們只需要復(fù)制 .pub 文件的內(nèi)容然后發(fā)郵件給管理員,這樣訪問git服務(wù)器的時候就不需要輸入用戶名密碼也可以拉取最新的代碼了捣郊。
  5. .pub里面的內(nèi)容大概長這個樣子:
$ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3 Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx NrRFi9wrf+M7Q== schacon@agadorlaptop.local

在GitLab上添加你的SSH

  1. 打開你的GitLab用戶界面晶密。然后點(diǎn)擊右上角頭像,在彈出窗中選擇Profile Settings模她。
  2. 打開Profile Settings之后稻艰,切換到SSH Keys標(biāo)簽。
  3. 在“key”里粘貼.pub里的那串字符侈净,在“title”里寫上SSH key所在機(jī)器的名字尊勿。住:一般一臺機(jī)器有唯一的SSH key畜侦。title的目的能標(biāo)識出哪臺電腦元扔,日后換電腦刪除SSH Key的時候直接根據(jù)title來刪除就可以了。
  4. 填完key和title之后旋膳,點(diǎn)擊“Add Key”就可以了澎语。
  5. 測試一下,在電腦上就可以以對應(yīng)gitlab賬號來clone和提交代碼了验懊。


    GitLab配置SSH Keys

忽略文件

整個工程的代碼擅羞,可能有一部分我們不希望加入Version Control。那么就需要根據(jù)需求來忽略相關(guān)文件义图。我們在為工程添加Git版本控制的時候减俏,會生成一個.gitignore文件(如果沒有,可以自己添加)碱工。我們只要把忽略規(guī)則添加到這個文件里就可以了娃承。

忽略文件的編寫

默認(rèn)是以.gitignore文件所在的路徑為根目錄奏夫。

  1. 忽略指定后綴名的文件。比如忽略所有.iml結(jié)尾的文件:*.iml历筝。
  2. 忽略指定的一個問題件酗昼。比如忽略根目錄下的local.properties文件:/local.properties
  3. 忽略整個文件夾梳猪。比如忽略根目錄下的build文件夾:/build麻削。

忽略規(guī)則(Android版本)

一般新建工程的時候,會自動生成忽略文件舔示。里面已經(jīng)把不需要添加到版本控制的

忽略文件不生效

  1. 描述:已經(jīng)正確配置了忽略文件碟婆,但是依然會被git上傳。

  2. 原因:有緩存

  3. 解決辦法:先把本地緩存刪除(改變成未被追蹤狀態(tài))惕稻,然后再提交竖共。直接使用下面三行代碼就可以:

    git rm -r --cached .
    git add .
    git commit -m 'update .gitignore'
    

為版本添加Tag

為什么要用Tag

  1. 我們一般會在dev分支上進(jìn)行開發(fā)。開發(fā)結(jié)束俺祠、測試完成后會合并到master并進(jìn)行發(fā)版公给。
  2. 隨著版本的迭代,master上的提交記錄會非常多蜘渣。我們怎么定位某一個版本發(fā)版時的那個節(jié)點(diǎn)呢淌铐?這就用到了Tag標(biāo)簽。
  3. 我們通過在發(fā)版的commit上添加一個tag蔫缸,日后就可以直接通過tag來checkout到對應(yīng)的那次commit腿准。就告別了在浩瀚提交記錄中查找某次發(fā)版記錄的煩惱。

相關(guān)命令

命令 解釋
git tag 列出所有標(biāo)簽拾碌。僅僅是標(biāo)簽名吐葱,沒有注釋
git tag -l -n 列出所有的標(biāo)簽,以及注釋
git tag -l 'v1.4.2.*' 列出所有和v1.4.2相關(guān)的tag
git show v1.4 查看某個版本的tag信息校翔,如查看v1.4版本
git tag 標(biāo)簽名稱 創(chuàng)建一個輕量級的標(biāo)簽弟跑,如git tag v1.4-lw
git tag -a 標(biāo)簽名稱 -m '注解內(nèi)容' 創(chuàng)建一個含注解的標(biāo)簽,git tag -a v1.4 -m 'my version 1.4'
git checkout tag名 以新分支的方式切換到指定的Tag防症。
git tag -d tag名 刪除本地的一個tag孟辑。例如git tag -d v3.1.0
git push origin :refs/tags/標(biāo)簽名 刪除遠(yuǎn)程tag

給之前的某次提交添加tag

先通過git log 查看到某次提交的commit id,然后按照正常打標(biāo)簽的方式蔫敲,在最后跟上commit id就可以了饲嗽。如:給commit id開頭是9fceb02的提交添加一個標(biāo)簽,
$ git tag -a v1.2 9fceb02

將本地Tag push到遠(yuǎn)程服務(wù)器

默認(rèn)打的tag都是打在本地燕偶。即普通的push方法喝噪,push到遠(yuǎn)程分支,是不包含tag的指么。如果希望把tag一起push到遠(yuǎn)程酝惧,那么可以使用下面的命令去push:

  1. push單個tag,格式:git push origin [tagname]
    舉例:git push origin v1.0 #將本地v1.0的tag推送到遠(yuǎn)端服務(wù)器
  2. push所有的tag伯诬,格式:git push [遠(yuǎn)程服務(wù)器名] --tags晚唇。舉例:git push --tagsgit push origin --tags如果帶遠(yuǎn)程服務(wù)器的名,那就是推送到指定服務(wù)器盗似。如果不帶哩陕,那就用默認(rèn)關(guān)聯(lián)的。

GitLab用戶權(quán)限

用戶權(quán)限

  1. 根據(jù)權(quán)限的不同赫舒,將用戶分為:Guest悍及、Reporter、Developer接癌、Master心赶、Owner五種角色。
  2. 不同角色對應(yīng)不同的權(quán)限缺猛。
    • Guest:游客缨叫。可以創(chuàng)建issue荔燎、發(fā)表評論耻姥,不能讀寫版本庫
    • Reporter:可以克隆代碼,不能提交有咨,QA琐簇、PM可以賦予這個權(quán)限
    • Developer:可以克隆代碼、開發(fā)座享、提交婉商、push渤早,RD可以賦予這個權(quán)限
    • master:可以創(chuàng)建項目揽涮、添加tag、保護(hù)分支寄纵、添加項目成員诗箍、編輯項目癣籽,核心RD負(fù)責(zé)人可以賦予這個權(quán)限
    • Owner:可以設(shè)置項目訪問權(quán)限 - Visibility Level、刪除項目滤祖、遷移項目筷狼、管理組成員,開發(fā)組leader可以賦予這個權(quán)限

項目權(quán)限

  1. 在GitLab上創(chuàng)建一個新Project時匠童,會讓我們設(shè)置該項目的權(quán)限埂材。


    項目權(quán)限
  2. 三種權(quán)限的區(qū)別:
    • Private:只有組成員才能看到
    • Internal:只要登錄的用戶就能看到
    • Public:所有人都能看到
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市汤求,隨后出現(xiàn)的幾起案子俏险,更是在濱河造成了極大的恐慌严拒,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竖独,死亡現(xiàn)場離奇詭異裤唠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)莹痢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門种蘸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竞膳,你說我怎么就攤上這事航瞭。” “怎么了坦辟?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵刊侯,是天一觀的道長。 經(jīng)常有香客問我长窄,道長滔吠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任挠日,我火速辦了婚禮疮绷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚣潜。我一直安慰自己冬骚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布懂算。 她就那樣靜靜地躺著只冻,像睡著了一般。 火紅的嫁衣襯著肌膚如雪计技。 梳的紋絲不亂的頭發(fā)上喜德,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音垮媒,去河邊找鬼舍悯。 笑死,一個胖子當(dāng)著我的面吹牛睡雇,可吹牛的內(nèi)容都是我干的萌衬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼它抱,長吁一口氣:“原來是場噩夢啊……” “哼秕豫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起观蓄,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤混移,失蹤者是張志新(化名)和其女友劉穎祠墅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沫屡,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饵隙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年撮珠,在試婚紗的時候發(fā)現(xiàn)自己被綠了沮脖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡芯急,死狀恐怖勺届,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娶耍,我是刑警寧澤免姿,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站榕酒,受9級特大地震影響胚膊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜想鹰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一紊婉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧辑舷,春花似錦喻犁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碌廓,卻和暖如春传轰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谷婆。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工慨蛙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人波材。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓股淡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親廷区。 傳聞我的和親對象是個殘疾皇子唯灵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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