Gitの自定義/忽略文件/配置別名/搭建git服務(wù)器 day09

2019/08/07 自定義git

自定義git顏色

我們已經(jīng)配置了user.nameuser.email酌壕,實(shí)際上掏愁,Git還有很多可配置項(xiàng)歇由。

比如,讓Git顯示顏色果港,會(huì)讓命令輸出看起來(lái)更醒目:

$ git config --global color.ui true

這樣沦泌,Git會(huì)適當(dāng)?shù)仫@示不同的顏色,比如git status命令:

git 顏色

文件名就會(huì)標(biāo)上顏色辛掠。


忽略特殊文件

有些時(shí)候谢谦,你必須把某些文件放到Git工作目錄中,但又不能提交它們萝衩,比如保存了數(shù)據(jù)庫(kù)密碼的配置文件啦回挽,等等,每次git status都會(huì)顯示Untracked files ...猩谊,有強(qiáng)迫癥的童鞋心里肯定不爽千劈。

好在Git考慮到了大家的感受,這個(gè)問(wèn)題解決起來(lái)也很簡(jiǎn)單牌捷,在Git工作區(qū)的根目錄下創(chuàng)建一個(gè)特殊的.gitignore文件墙牌,然后把要忽略的文件名填進(jìn)去,Git就會(huì)自動(dòng)忽略這些文件宜鸯。

不需要從頭寫(xiě).gitignore文件憔古,GitHub已經(jīng)為我們準(zhǔn)備了各種配置文件,只需要組合一下就可以使用了淋袖。所有配置文件可以直接在線瀏覽:https://github.com/github/gitignore

忽略文件的原則是:

  • 忽略操作系統(tǒng)自動(dòng)生成的文件鸿市,比如縮略圖等;
  • 忽略編譯生成的中間文件即碗、可執(zhí)行文件等焰情,也就是如果一個(gè)文件是通過(guò)另一個(gè)文件自動(dòng)生成的,那自動(dòng)生成的文件就沒(méi)必要放進(jìn)版本庫(kù)剥懒,比如Java編譯產(chǎn)生的.class文件内舟;
  • 忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件初橘。

舉個(gè)例子:

假設(shè)你在Windows下進(jìn)行Python開(kāi)發(fā)验游,Windows會(huì)自動(dòng)在有圖片的目錄下生成隱藏的縮略圖文件,如果有自定義目錄保檐,目錄下就會(huì)有Desktop.ini文件耕蝉,因此你需要忽略Windows自動(dòng)生成的垃圾文件:

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

然后,繼續(xù)忽略Python編譯產(chǎn)生的.pyc夜只、.pyo垒在、dist等文件或目錄:

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

加上你自己定義的文件,最終得到一個(gè)完整的.gitignore文件扔亥,內(nèi)容如下:

# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build

# My configurations:
db.ini
deploy_key_rsa

最后一步就是把.gitignore也提交到Git场躯,就完成了谈为!當(dāng)然檢驗(yàn).gitignore的標(biāo)準(zhǔn)是git status命令是不是說(shuō)working directory clean。

使用Windows的童鞋注意了踢关,如果你在資源管理器里新建一個(gè).gitignore文件伞鲫,它會(huì)非常弱智地提示你必須輸入文件名,但是在文本編輯器里“保存”或者“另存為”就可以把文件保存為.gitignore了签舞。

有些時(shí)候榔昔,你想添加一個(gè)文件到Git,但發(fā)現(xiàn)添加不了瘪菌,原因是這個(gè)文件被.gitignore忽略了:

$ git add App.class
The following paths are ignored by one of your .gitignore files:
App.class
Use -f if you really want to add them.

如果你確實(shí)想添加該文件,可以用-f強(qiáng)制添加到Git:

$ git add -f App.class

或者你發(fā)現(xiàn)嘹朗,可能是.gitignore寫(xiě)得有問(wèn)題师妙,需要找出來(lái)到底哪個(gè)規(guī)則寫(xiě)錯(cuò)了,可以用git check-ignore命令檢查:

$ git check-ignore -v App.class
.gitignore:3:*.class    App.class

Git會(huì)告訴我們屹培,.gitignore的第3行規(guī)則忽略了該文件默穴,于是我們就可以知道應(yīng)該修訂哪個(gè)規(guī)則。

小結(jié)

  • 忽略某些文件時(shí)褪秀,需要編寫(xiě).gitignore蓄诽;

  • .gitignore文件本身要放到版本庫(kù)里,并且可以對(duì).gitignore做版本管理媒吗!


配置別名

有沒(méi)有經(jīng)常敲錯(cuò)命令仑氛?比如git statusstatus這個(gè)單詞真心不好記闸英。

如果敲git st就表示git status那就簡(jiǎn)單多了锯岖,當(dāng)然這種偷懶的辦法我們是極力贊成的。

我們只需要敲一行命令甫何,告訴Git出吹,以后st就表示status

$ git config --global alias.st status

好了,現(xiàn)在敲git st看看效果辙喂。

當(dāng)然還有別的命令可以簡(jiǎn)寫(xiě)捶牢,很多人都用co表示checkout,ci表示commit巍耗,br表示branch

$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch

以后提交就可以簡(jiǎn)寫(xiě)成:

$ git ci -m "bala bala bala..."

--global參數(shù)是全局參數(shù)秋麸,也就是這些命令在這臺(tái)電腦的所有Git倉(cāng)庫(kù)下都有用。

在撤銷修改一節(jié)中芍锦,我們知道竹勉,命令git reset HEAD file可以把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū)娄琉。既然是一個(gè)unstage操作次乓,就可以配置一個(gè)unstage別名:

$ git config --global alias.unstage 'reset HEAD'

當(dāng)你敲入命令:

$ git unstage test.py

實(shí)際上Git執(zhí)行的是:

$ git reset HEAD test.py

配置一個(gè)git last吓歇,讓其顯示最后一次提交信息:

$ git config --global alias.last 'log -1'

這樣,用git last就能顯示最近一次的提交:

$ git last
commit adca45d317e6d8a4b23f9811c3d7b7f0f180bfe2
Merge: bd6ae48 291bea8
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Thu Aug 22 22:49:22 2013 +0800

    merge & fix hello.py

甚至還有人喪心病狂地把lg配置成了:

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

來(lái)看看git lg的效果:

image

配置文件

配置Git的時(shí)候票腰,加上--global是針對(duì)當(dāng)前用戶起作用的城看,如果不加,那只針對(duì)當(dāng)前的倉(cāng)庫(kù)起作用杏慰。

配置文件放哪了测柠?每個(gè)倉(cāng)庫(kù)的Git配置文件都放在.git/config文件中:

$ cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = git@github.com:michaelliao/learngit.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[alias]
    last = log -1

別名就在[alias]后面,要?jiǎng)h除別名缘滥,直接把對(duì)應(yīng)的行刪掉即可轰胁。

而當(dāng)前用戶的Git配置文件放在用戶主目錄下的一個(gè)隱藏文件.gitconfig中:

$ cat .gitconfig
[alias]
    co = checkout
    ci = commit
    br = branch
    st = status
[user]
    name = Your Name
    email = your@email.com

配置別名也可以直接修改這個(gè)文件,如果改錯(cuò)了朝扼,可以刪掉文件重新通過(guò)命令配置。

小結(jié)

Git配置好別名擎颖,就可以輸入命令時(shí)偷個(gè)懶榛斯。


搭建Git服務(wù)器

遠(yuǎn)程倉(cāng)庫(kù)實(shí)際上和本地倉(cāng)庫(kù)沒(méi)啥不同,純粹為了7x24小時(shí)開(kāi)機(jī)并交換大家的修改搂捧。

GitHub就是一個(gè)免費(fèi)托管開(kāi)源代碼的遠(yuǎn)程倉(cāng)庫(kù)驮俗。但是對(duì)于某些視源代碼如生命的商業(yè)公司來(lái)說(shuō),既不想公開(kāi)源代碼允跑,又舍不得給GitHub交保護(hù)費(fèi)王凑,那就只能自己搭建一臺(tái)Git服務(wù)器作為私有倉(cāng)庫(kù)使用。

搭建Git服務(wù)器需要準(zhǔn)備一臺(tái)運(yùn)行Linux的機(jī)器吮蛹,強(qiáng)烈推薦用UbuntuDebian荤崇,這樣,通過(guò)幾條簡(jiǎn)單的apt命令就可以完成安裝潮针。

假設(shè)你已經(jīng)有sudo權(quán)限的用戶賬號(hào)术荤,下面,正式開(kāi)始安裝每篷。

第一步瓣戚,安裝git

$ sudo apt-get install git

第二步,創(chuàng)建一個(gè)git用戶焦读,用來(lái)運(yùn)行git服務(wù):

$ sudo adduser git

第三步子库,創(chuàng)建證書(shū)登錄:

收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件矗晃,把所有公鑰導(dǎo)入到/home/git/.ssh/authorized_keys文件里仑嗅,一行一個(gè)。

第四步,初始化Git倉(cāng)庫(kù):

先選定一個(gè)目錄作為Git倉(cāng)庫(kù)仓技,假定是/srv/sample.git鸵贬,在/srv目錄下輸入命令:

$ sudo git init --bare sample.git

Git就會(huì)創(chuàng)建一個(gè)裸倉(cāng)庫(kù),裸倉(cāng)庫(kù)沒(méi)有工作區(qū)脖捻,因?yàn)榉?wù)器上的Git倉(cāng)庫(kù)純粹是為了共享阔逼,所以不讓用戶直接登錄到服務(wù)器上去改工作區(qū),并且服務(wù)器上的Git倉(cāng)庫(kù)通常都以.git結(jié)尾地沮。然后嗜浮,把owner改為git:

$ sudo chown -R git:git sample.git

第五步,禁用shell登錄:

出于安全考慮摩疑,第二步創(chuàng)建的git用戶不允許登錄shell危融,這可以通過(guò)編輯/etc/passwd文件完成。找到類似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改為:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

這樣雷袋,git用戶可以正常通過(guò)ssh使用git专挪,但無(wú)法登錄shell,因?yàn)槲覀優(yōu)間it用戶指定的git-shell每次一登錄就自動(dòng)退出片排。

第六步,克隆遠(yuǎn)程倉(cāng)庫(kù):

現(xiàn)在速侈,可以通過(guò)git clone命令克隆遠(yuǎn)程倉(cāng)庫(kù)了率寡,在各自的電腦上運(yùn)行:

$ git clone git@server:/srv/sample.git
Cloning into 'sample'...
warning: You appear to have cloned an empty repository.

剩下的推送就簡(jiǎn)單了。

管理公鑰

如果團(tuán)隊(duì)很小倚搬,把每個(gè)人的公鑰收集起來(lái)放到服務(wù)器的/home/git/.ssh/authorized_keys文件里就是可行的冶共。如果團(tuán)隊(duì)有幾百號(hào)人,就沒(méi)法這么玩了每界,這時(shí)捅僵,可以用Gitosis來(lái)管理公鑰。

這里我們不介紹怎么玩Gitosis了眨层,幾百號(hào)人的團(tuán)隊(duì)基本都在500強(qiáng)了庙楚,相信找個(gè)高水平的Linux管理員問(wèn)題不大。

管理權(quán)限

有很多不但視源代碼如生命趴樱,而且視員工為竊賊的公司馒闷,會(huì)在版本控制系統(tǒng)里設(shè)置一套完善的權(quán)限控制,每個(gè)人是否有讀寫(xiě)權(quán)限會(huì)精確到每個(gè)分支甚至每個(gè)目錄下叁征。因?yàn)镚it是為Linux源代碼托管而開(kāi)發(fā)的纳账,所以Git也繼承了開(kāi)源社區(qū)的精神,不支持權(quán)限控制捺疼。不過(guò)疏虫,因?yàn)镚it支持鉤子(hook),所以,可以在服務(wù)器端編寫(xiě)一系列腳本來(lái)控制提交等操作卧秘,達(dá)到權(quán)限控制的目的呢袱。Gitolite就是這個(gè)工具。

這里我們也不介紹Gitolite了斯议,不要把有限的生命浪費(fèi)到權(quán)限斗爭(zhēng)中产捞。

小結(jié)

  • 搭建Git服務(wù)器非常簡(jiǎn)單,通常10分鐘即可完成哼御;

  • 要方便管理公鑰坯临,用Gitosis

  • 要像SVN那樣變態(tài)地控制權(quán)限恋昼,用Gitolite看靠。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市液肌,隨后出現(xiàn)的幾起案子挟炬,更是在濱河造成了極大的恐慌,老刑警劉巖嗦哆,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谤祖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡老速,警方通過(guò)查閱死者的電腦和手機(jī)粥喜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)橘券,“玉大人额湘,你說(shuō)我怎么就攤上這事∨越ⅲ” “怎么了锋华?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)箭窜。 經(jīng)常有香客問(wèn)我毯焕,道長(zhǎng),這世上最難降的妖魔是什么磺樱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任芥丧,我火速辦了婚禮,結(jié)果婚禮上坊罢,老公的妹妹穿的比我還像新娘续担。我一直安慰自己,他們只是感情好活孩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布物遇。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪询兴。 梳的紋絲不亂的頭發(fā)上乃沙,一...
    開(kāi)封第一講書(shū)人閱讀 49,842評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音诗舰,去河邊找鬼警儒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛眶根,可吹牛的內(nèi)容都是我干的蜀铲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼属百,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼记劝!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起族扰,我...
    開(kāi)封第一講書(shū)人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤厌丑,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后渔呵,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體怒竿,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年扩氢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了愧口。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡类茂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出托嚣,到底是詐尸還是另有隱情巩检,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布示启,位于F島的核電站兢哭,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏夫嗓。R本人自食惡果不足惜迟螺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舍咖。 院中可真熱鬧矩父,春花似錦、人聲如沸排霉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至球订,卻和暖如春后裸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冒滩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工微驶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人开睡。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓因苹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親士八。 傳聞我的和親對(duì)象是個(gè)殘疾皇子容燕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

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