前言
- 本文用于記錄在實(shí)際開發(fā)中使用到的git操作。
- 當(dāng)前筆者的操作環(huán)境是macOS 10.13.6瑞躺,git版本是2.15.1酱虎,使用的git服務(wù)器是GitLab。
- 通過本文你會得到下面這些東西:
- 使用tab鍵自動補(bǔ)全git命令幕垦;
- 使用SSH來登錄你的git賬號;
- 忽略文件.gitignore傅联;
- 為版本添加tag先改;
- GitLab用戶權(quán)限;
使用tab鍵自動補(bǔ)全git命令
注:這里僅限mac系統(tǒng)
親自可以的方法
-
去下載官方的補(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ǔ)全文件陪竿。如下圖:
切換到當(dāng)前用戶的home路徑下,如我的是/Users/zhangguiyou
把剛才下載的文件移動到這里屠橄。PS:我沒有下載上面的那個文件族跛,而是直接copy了文件的內(nèi)容,然后在home下使用vim(vim不會用的話锐墙,參照Linux下的命令大全)新建了一個.git-completion.bash文件礁哄,并把官方文件的內(nèi)容copy進(jìn)去。然后保存退出溪北。
讓剛才的補(bǔ)全文件生效桐绒。輸入命令:
source ~/git-completion.bash
(~/git-completion.bash的路徑是絕對路徑,所以你可以在任意目錄下執(zhí)行)之拨,其中的文件名就是上面那個文件的文件名.這樣就可以自動補(bǔ)全了茉继。不過每一次開機(jī)都需要執(zhí)行一遍source ~/git-completion.bash。下面我們把這個命令加入到開機(jī)啟動項中.
打開當(dāng)前用戶的home路徑下的.bash_profile文件蚀乔。如果沒有的話烁竭,就用vim新建一個。
然后按i鍵進(jìn)入編輯模式吉挣,把
source ~/git-completion.bash
添加上去派撕。然后esc→:wq保存退出。完成睬魂。
失敗的方法
下面是我試過之后失敗的方法:
使用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目錄
- SSH公鑰默認(rèn)被存儲在~/.ssh目錄下⊥茫可以先
cd ~/.ssh
出牧,然后ls
查看該路徑下的問題件。 - 如果已經(jīng)設(shè)置過公鑰的好歇盼,在~/.ssh目錄下應(yīng)該會有something 和 something.pub 來命名的一對文件舔痕,這個 something 通常就是 id_dsa 或 id_rsa。有 .pub 后綴的文件就是公鑰,另一個文件則是密鑰伯复。
- 如果沒有這些文件慨代,或者連.ssh都沒有,那么說明還沒有生產(chǎn)過SSH啸如∈坛祝可以用下面介紹的命令來生產(chǎn)。
生成SSH公鑰
- 在Linux或者M(jìn)ac上使用ssh-keygen命令叮雳。
- 它先要求你確認(rèn)保存公鑰的位置(.ssh/id_rsa)想暗,然后它會讓你重復(fù)一個密碼兩次,如果不想在使用公鑰的時候輸入密碼帘不,可以留空说莫。
- 完成后,再回到~/.ssh路徑下寞焙,就有id_dsa和 id_dsa.pub文件了储狭。
- 我們只需要復(fù)制 .pub 文件的內(nèi)容然后發(fā)郵件給管理員,這樣訪問git服務(wù)器的時候就不需要輸入用戶名密碼也可以拉取最新的代碼了捣郊。
- .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
- 打開你的GitLab用戶界面晶密。然后點(diǎn)擊右上角頭像,在彈出窗中選擇
Profile Settings
模她。 - 打開
Profile Settings
之后稻艰,切換到SSH Keys
標(biāo)簽。 - 在“key”里粘貼.pub里的那串字符侈净,在“title”里寫上SSH key所在機(jī)器的名字尊勿。住:一般一臺機(jī)器有唯一的SSH key畜侦。title的目的能標(biāo)識出哪臺電腦元扔,日后換電腦刪除SSH Key的時候直接根據(jù)title來刪除就可以了。
- 填完key和title之后旋膳,點(diǎn)擊“Add Key”就可以了澎语。
-
測試一下,在電腦上就可以以對應(yīng)gitlab賬號來clone和提交代碼了验懊。
忽略文件
整個工程的代碼擅羞,可能有一部分我們不希望加入Version Control。那么就需要根據(jù)需求來忽略相關(guān)文件义图。我們在為工程添加Git版本控制的時候减俏,會生成一個.gitignore文件(如果沒有,可以自己添加)碱工。我們只要把忽略規(guī)則添加到這個文件里就可以了娃承。
忽略文件的編寫
默認(rèn)是以.gitignore文件所在的路徑為根目錄奏夫。
- 忽略指定后綴名的文件。比如忽略所有.iml結(jié)尾的文件:
*.iml
历筝。 - 忽略指定的一個問題件酗昼。比如忽略根目錄下的local.properties文件:
/local.properties
。 - 忽略整個文件夾梳猪。比如忽略根目錄下的build文件夾:
/build
麻削。
忽略規(guī)則(Android版本)
一般新建工程的時候,會自動生成忽略文件舔示。里面已經(jīng)把不需要添加到版本控制的
忽略文件不生效
描述:已經(jīng)正確配置了忽略文件碟婆,但是依然會被git上傳。
原因:有緩存
-
解決辦法:先把本地緩存刪除(改變成未被追蹤狀態(tài))惕稻,然后再提交竖共。直接使用下面三行代碼就可以:
git rm -r --cached . git add . git commit -m 'update .gitignore'
為版本添加Tag
為什么要用Tag
- 我們一般會在dev分支上進(jìn)行開發(fā)。開發(fā)結(jié)束俺祠、測試完成后會合并到master并進(jìn)行發(fā)版公给。
- 隨著版本的迭代,master上的提交記錄會非常多蜘渣。我們怎么定位某一個版本發(fā)版時的那個節(jié)點(diǎn)呢淌铐?這就用到了Tag標(biāo)簽。
- 我們通過在發(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:
- push單個tag,格式:
git push origin [tagname]
舉例:git push origin v1.0
#將本地v1.0的tag推送到遠(yuǎn)端服務(wù)器 - push所有的tag伯诬,格式:
git push [遠(yuǎn)程服務(wù)器名] --tags
晚唇。舉例:git push --tags
或git push origin --tags
如果帶遠(yuǎn)程服務(wù)器的名,那就是推送到指定服務(wù)器盗似。如果不帶哩陕,那就用默認(rèn)關(guān)聯(lián)的。
GitLab用戶權(quán)限
用戶權(quán)限
- 根據(jù)權(quán)限的不同赫舒,將用戶分為:Guest悍及、Reporter、Developer接癌、Master心赶、Owner五種角色。
- 不同角色對應(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)限
-
在GitLab上創(chuàng)建一個新Project時匠童,會讓我們設(shè)置該項目的權(quán)限埂材。
- 三種權(quán)限的區(qū)別:
- Private:只有組成員才能看到
- Internal:只要登錄的用戶就能看到
- Public:所有人都能看到