Git實踐

轉(zhuǎn)載 :作者 [zhangwang]

@(前端開發(fā))[Git|工具]以前也看過一些關(guān)于git的視頻,可是覺得自己一直都沒有真的理解和掌握git,花了一天半的時間,看完了廖雪峰老師的Git教程,并動手實踐了一下岖是,才覺得自己是真的對git入門了基跑,看的過程中也做了一些筆記家肯,也就是下文啦官紫。
Git實踐
Git簡介
歷史
功能:Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)(沒有之一)钳榨。歷史:
1991 Linux創(chuàng)建Linux驼鹅,需要管理
2002年以前微谓,Linux手動合并開發(fā)者提供的代碼
2002~2005:BitMover公司的BitKeeper免費給Linux使用
2005開發(fā)Samba的Andrew試圖破解BitKeeper的協(xié)議,被BitMover公司發(fā)現(xiàn)了输钩,要收回Linux社區(qū)的免費使用權(quán)豺型。
Linus花了兩周時間自己用C寫了一個分布式版本控制系統(tǒng)-Git,一個月之后Linux源碼由此代理
2008年Github上線买乃,為開源項目提供免費Git存儲

集中式VS分布式
集中式的版本控制系統(tǒng):CVS姻氨,SVN

集中式的版本控制系統(tǒng)

運行方式:版本庫是集中存放在中央服務(wù)器的,而干活的時候剪验,用的都是自己的電腦哼绑,所以要先從中央服務(wù)器取得最新的版本,然后開始干活碉咆,干完活了抖韩,再把自己的活推送給中央服務(wù)器。缺點:集中式版本控制系統(tǒng)最大的毛病就是必須聯(lián)網(wǎng)才能工作

分布式:Git

分布式版本控制系統(tǒng)

運行方式:每個人的電腦上都是一個完整的版本庫疫铜,你在自己電腦上改了文件A茂浮,你的同事也在他的電腦上改了文件A,這時壳咕,你們倆之間只需把各自的修改推送給對方席揽,就可以互相看到對方的修改了。分布式版本控制系統(tǒng)通常也有一臺充當(dāng)“中央服務(wù)器”的電腦谓厘,但這個服務(wù)器的作用僅僅是用來方便“交換”大家的修改幌羞,沒有它大家也一樣干活,只是交換修改不方便而已竟稳。

安裝Git
在Linux上安裝Git
輸入git
属桦,看看系統(tǒng)有沒有安裝Git:
sudo apt-get install git
就可以直接完成Git的安裝

在Mac OS X上安裝Git
兩種方法:
第一種安裝homebrew
熊痴,然后通過homebrew安裝Git,具體方法請參考homebrew的文檔:http://brew.sh/聂宾。

第二種方法更簡單果善,也是推薦的方法,就是直接從AppStore安裝Xcode系谐,Xcode集成了Git巾陕,不過默認(rèn)沒有安裝,你需要運行Xcode纪他,選擇菜單“Xcode”->“Preferences”鄙煤,在彈出窗口中找到“Downloads”,選擇“Command Line Tools”茶袒,點“Install”就可以完成安裝了梯刚。

在Windows上安裝Git
msysgit是Windows版的Git,從http://msysgit.github.io/下載弹谁,然后按默認(rèn)選項安裝即可乾巧。
安裝完成后,在開始菜單里找到“Git”->“Git Bash”预愤,蹦出一個類似命令行窗口的東西沟于,就說明Git安裝成功!

$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com"

創(chuàng)建版本庫
版本庫:
版本庫又名倉庫植康,英文名repository旷太,你可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來销睁,每個文件的修改供璧、刪除,Git都能跟蹤冻记,以便任何時刻都可以追蹤歷史睡毒,或者在將來某個時刻可以“還原”。

$ mkdir learngit$ cd learngit$ pwd/Users/michael/learngit

pwd
命令用于顯示當(dāng)前目錄冗栗;
mkdir learngit
用于創(chuàng)建一個空目錄演顾;
通過git init
命令把這個目錄變成Git可以管理的倉庫:
將文件添加到版本庫:所有的版本控制系統(tǒng),其實只能跟蹤文本文件的改動隅居,比如TXT文件钠至,網(wǎng)頁,所有的程序代碼等等胎源,Git也不例外棉钧。版本控制系統(tǒng)可以告訴你每次的改動,比如在第5行加了一個單詞“Linux”涕蚤,在第8行刪了一個單詞“Windows”宪卿。而圖片的诵、視頻這些二進(jìn)制文件,雖然也能由版本控制系統(tǒng)管理愧捕,但沒法跟蹤文件的變化奢驯,只能把二進(jìn)制文件每次改動串起來申钩,也就是只知道圖片從100KB改成了120KB次绘,但到底改了啥,版本控制系統(tǒng)不知道撒遣,也沒法知道邮偎。新建一個文件:一定要放到learngit目錄下(子目錄也行),因為這是一個Git倉庫义黎,放到其他地方Git再厲害也找不到這個文件禾进。
git add
:用命令git add告訴Git,把文件添加到倉庫:
git commit
:用命令git commit告訴Git廉涕,把文件提交到倉庫:$ git commit -m "wrote a readme file"

穿梭時光
要隨時掌握工作區(qū)的狀態(tài)泻云,使用git status
命令。
如果git status
告訴你有文件被修改過狐蜕,用git diff
可以查看修改內(nèi)容宠纯。

版本回退
git log
:顯示從最近到最遠(yuǎn)的提交日志;
git log --pretty=oneline
:顯示簡要版的提交日志;
commit id(版本號)已3628164...882e1e0
方式顯示层释,是一個SHA1計算出來的一個非常大的數(shù)字婆瓜,用十六進(jìn)制表示,防止多人協(xié)作時產(chǎn)生沖突贡羔;
git reset --hard HEAD^
:返回上一個版本廉白,HEAD
表示當(dāng)前版本,HEAD^^表示上上個版本
乖寒,也可以用類似于HEAD~3
來表示要回退到哪一個版本猴蹂。
$ git reset --hard 3628164
:后面的數(shù)字是版本號,此方法可以隨意跳轉(zhuǎn)
Git的版本回退速度非抽灌遥快磅轻,因為Git在內(nèi)部有個指向當(dāng)前版本的HEAD指針,當(dāng)你回退版本的時候马澈,Git僅僅是把HEAD從指向另一個版本

示意圖

git reflog
:記錄所有的操作瓢省,可以通過此查詢版本號;

工作區(qū)和暫存區(qū)
工作區(qū)(Working Directory):就是你在電腦里能看到的目錄痊班,比如我的learngit文件夾就是一個工作區(qū):

工作區(qū)

版本庫(Repository)工作區(qū)有一個隱藏目錄.git勤婚,這個不算工作區(qū),而是Git的版本庫涤伐。Git的版本庫里存了很多東西馒胆,其中最重要的就是稱為stage
(或者叫index
)的暫存區(qū)缨称,還有Git為我們自動創(chuàng)建的第一個分支master
,以及指向master
的一個指針叫HEAD
祝迂。

版本庫

提交變更的兩個步驟:
第一步是用git add把文件添加進(jìn)去睦尽,實際上就是把文件修改添加到暫存區(qū);
第二步是用git commit提交更改型雳,實際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支当凡。
你可以簡單理解為,需要提交的文件修改通通放到暫存區(qū)纠俭,然后沿量,一次性提交暫存區(qū)的所有修改。

理解緩存區(qū)的意思
git add
命令實際上就是把要提交的所有修改放到暫存區(qū)(Stage)冤荆,然后朴则,執(zhí)行g(shù)it commit
就可以一次性把暫存區(qū)的所有修改提交到分支。
管理修改
如果同一個文件有多次修改钓简,需要每次都add到緩存庫乌妒,不然提交無效每次修改,如果不add到暫存區(qū)外邓,那就不會加入到commit中撤蚊。
撤銷修改
場景1:當(dāng)你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時坐榆,用命令git checkout -- file拴魄。場景2:當(dāng)你不但改亂了工作區(qū)某個文件的內(nèi)容,還添加到了暫存區(qū)時席镀,想丟棄修改匹中,分兩步,第一步用命令git reset HEAD file豪诲,就回到了場景1顶捷,第二步按場景1操作。場景3:已經(jīng)提交了不合適的修改到版本庫時屎篱,想要撤銷本次提交服赎,參考版本回退一節(jié),不過前提是沒有推送到遠(yuǎn)程庫交播。
刪除文件
刪除文件的兩種方法:直接從本地刪除
使用rm test.txt

刪除之后會出現(xiàn)兩種情況:從版本庫恢復(fù):git checkout -- test.txt

從版本庫也刪除:git rm test.txt
然后git commit

總結(jié)“checkout”:git checkout
其實是用版本庫里的版本替換工作區(qū)的版本重虑,無論工作區(qū)是修改還是刪除,都可以“一鍵還原”秦士。
命令git rm用于刪除一個文件缺厉。如果一個文件已經(jīng)被提交到版本庫,那么你永遠(yuǎn)不用擔(dān)心誤刪,但是要小心提针,你只能恢復(fù)文件到最新版本命爬,你會丟失最近一次提交后你修改的內(nèi)容。
遠(yuǎn)程倉庫
Git的殺手功能之一
實際情況往往是這樣辐脖,找一臺電腦充當(dāng)服務(wù)器的角色饲宛,每天24小時開機,其他每個人都從這個“服務(wù)器”倉庫克隆一份到自己的電腦上嗜价,并且各自把各自的提交推送到服務(wù)器倉庫里艇抠,也從服務(wù)器倉庫中拉取別人的提交。創(chuàng)建本地git倉庫與Github之間的傳輸

在用戶主目錄下炭剪,看看有沒有.ssh目錄练链,如果有翔脱,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件奴拦,如果已經(jīng)有了,可直接跳到下一步届吁。如果沒有错妖,打開Shell(Windows下打開Git Bash),創(chuàng)建SSH Key:$ ssh-keygen -t rsa -C "youremail@example.com"

Your identification has been saved in /Users/zhangwang/.ssh/id_rsa.Your public key has been saved in /Users/zhangwang/.ssh/id_rsa.pub.

如果一切順利的話疚沐,可以在用戶主目錄里找到.ssh目錄暂氯,里面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對亮蛔,id_rsa是私鑰痴施,不能泄露出去,id_rsa.pub是公鑰究流,可以放心地告訴任何人辣吃。
登陸GitHub,打開“Account settings”芬探,“SSH Keys”頁面:然后神得,點“Add SSH Key”,填上任意Title偷仿,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容:

為什么GitHub需要SSH Key呢哩簿?因為GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的酝静,而Git支持SSH協(xié)議节榜,所以,GitHub只要知道了你的公鑰别智,就可以確認(rèn)只有你自己才能推送宗苍。
在GitHub上免費托管的Git倉庫,任何人都可以看到喔(但只有你自己才能改)亿遂。所以浓若,不要把敏感信息放進(jìn)去渺杉。
如果你不想讓別人看到Git庫,有兩個辦法挪钓,一個是交點保護(hù)費是越,讓GitHub把公開的倉庫變成私有的,這樣別人就看不見了(不可讀更不可寫)碌上。另一個辦法是自己動手倚评,搭一個Git服務(wù)器,因為是你自己的Git服務(wù)器馏予,所以別人也是看不見的天梧。這個方法我們后面會講到的,相當(dāng)簡單霞丧,公司內(nèi)部開發(fā)必備呢岗。
添加遠(yuǎn)程庫
要關(guān)聯(lián)一個遠(yuǎn)程庫,使用命令git remote add origin git@server-name:path/repo-name.git
蛹尝;
關(guān)聯(lián)后后豫,使用命令git push -u origin master
第一次推送master分支的所有內(nèi)容;
此后突那,每次本地提交后挫酿,只要有必要,就可以使用命令git push origin master
推送最新修改愕难;
分布式版本系統(tǒng)的最大好處之一是在本地工作完全不需要考慮遠(yuǎn)程庫的存在早龟,也就是有沒有聯(lián)網(wǎng)都可以正常工作,而SVN在沒有聯(lián)網(wǎng)的時候是拒絕干活的猫缭!當(dāng)有網(wǎng)絡(luò)的時候葱弟,再把本地提交推送一下就完成了同步,真是太方便了饵骨!

從遠(yuǎn)程庫中克隆
1.克隆一個遠(yuǎn)程庫:$ git clone git@github.com:servername/gitskills.git

如果有多個人協(xié)作開發(fā)翘悉,那么每個人各自從遠(yuǎn)程克隆一份就可以了。
GitHub給出的地址不止一個居触,還可用https://github.com/michaelliao/gitskills.git這樣的地址妖混。實際上,Git支持多種協(xié)議轮洋,默認(rèn)的git://使用ssh制市,但也可以使用https等其他協(xié)議。
使用https除了速度慢以外弊予,還有個最大的麻煩是每次推送都必須輸入口令祥楣,但是在某些只開放http端口的公司內(nèi)部就無法使用ssh協(xié)議而只能用https。

小結(jié):
要克隆一個倉庫,首先必須知道倉庫的地址误褪,然后使用git clone命令克隆责鳍。
Git支持多種協(xié)議,包括https兽间,但通過ssh支持的原生git協(xié)議速度最快历葛。

分支管理
什么是分支咧?分支就是科幻電影里面的平行宇宙嘀略,當(dāng)你正在電腦前努力學(xué)習(xí)Git的時候恤溶,另一個你正在另一個平行宇宙里努力學(xué)習(xí)SVN。如果兩個平行宇宙互不干擾帜羊,那對現(xiàn)在的你也沒啥影響咒程。不過,在某個時間點讼育,兩個平行宇宙合并了帐姻,結(jié)果,你既學(xué)會了Git又學(xué)會了SVN窥淆!

分支示意圖

分支有啥作用咧卖宠?
你創(chuàng)建了一個屬于你自己的分支,別人看不到忧饭,還繼續(xù)在原來的分支上正常工作,而你在自己的分支上干活筷畦,想提交就提交词裤,直到開發(fā)完畢后,再一次性合并到原來的分支上鳖宾,這樣吼砂,既安全,又不影響別人工作鼎文。
Git的分支是與眾不同渔肩,無論創(chuàng)建、切換和刪除分支拇惋,Git在1秒鐘之內(nèi)就能完成周偎!無論你的版本庫是1個文件還是1萬個文件。

創(chuàng)建和合并分支
查看分支:git branch

創(chuàng)建分支:git branch <name>

切換分支:git checkout <name>

創(chuàng)建+切換分支:git checkout -b <name>
相當(dāng)于以下兩步:$ git branch dev

$ git checkout dev

合并某分支到當(dāng)前分支:git merge <name>

刪除分支:git branch -d <name>

Git鼓勵大量使用分支:這樣更安全Fast-forward
信息撑帖,Git告訴我們蓉坎,這次合并是“快進(jìn)模式”模式圖:
原來只有master分支

只有master分支

使用git checkout -b dev
創(chuàng)建并轉(zhuǎn)移至新分支dev

創(chuàng)建并轉(zhuǎn)移至新分支dev

在新分支上更改內(nèi)容

在dev上更改內(nèi)容

使用:git merge dev
合并dev分支到master分支

合并dev和master分支

使用git branch -d dev
刪除已經(jīng)完成了使命的dev分支

刪除dev分支

解決沖突
人生不如意之事十之八九,合并分支往往也不是一帆風(fēng)順的胡嘿。當(dāng)在兩個分支上對同一個文件進(jìn)行修改時蛉艾,如果合并這兩個分支就會產(chǎn)生沖突,這時候需要手動修改。git log --graph --pretty=oneline --abbrev-commit
用git log --graph
命令可以看到分支合并圖勿侯。
分支管理策略
在實際開發(fā)中拓瞪,我們應(yīng)該按照幾個基本原則進(jìn)行分支管理:
master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來發(fā)布新版本助琐,平時不能在上面干活吴藻;
那在哪干活呢?干活都在dev分支上弓柱,也就是說沟堡,dev分支是不穩(wěn)定的,到某個時候矢空,比如1.0版本發(fā)布時航罗,再把dev分支合并到master上,在master分支發(fā)布1.0版本屁药;
你和你的小伙伴們每個人都在dev分支上干活粥血,每個人都有自己的分支,時不時地往dev分支上合并就可以了酿箭。所以复亏,團(tuán)隊合作的分支看起來就像這樣:

實際的工作分支

合并分支時,加上--no-ff參數(shù)就可以用普通模式合并缭嫡,合并后的歷史有分支缔御,能看出來曾經(jīng)做過合并,而fast forward合并就看不出來曾經(jīng)做過合并妇蛀。
Bug分支
軟件開發(fā)中耕突,bug就像家常便飯一樣。有了bug就需要修復(fù)评架,在Git中眷茁,由于分支是如此的強大,所以纵诞,每個bug都可以通過一個新的臨時分支來修復(fù)上祈,修復(fù)后,合并分支浙芙,然后將臨時分支刪除登刺。
git stash
功能:可以把當(dāng)前工作現(xiàn)場“儲藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作:
然后從master上面創(chuàng)建新的分支茁裙,修復(fù)bug合并
git stash list
:用于查看被儲藏起來的那部分項目塘砸,
恢復(fù)被儲藏項目的兩種方法:用·it stash apply
恢復(fù),但是恢復(fù)后晤锥,stash內(nèi)容并不刪除掉蔬,你需要用git stash drop來刪除廊宪;
用git stash pop
,恢復(fù)的同時把stash內(nèi)容也刪了:

Feature分支
軟件開發(fā)中女轿,總有無窮無盡的新的功能要不斷添加進(jìn)來箭启。添加一個新功能時,你肯定不希望因為一些實驗性質(zhì)的代碼蛉迹,把主分支搞亂了傅寡,所以,每添加一個新功能北救,最好新建一個feature分支荐操,在上面開發(fā),完成后珍策,合并托启,最后,刪除該feature分支攘宙。開發(fā)一個新feature屯耸,最好新建一個分支;如果要丟棄一個沒有被合并過的分支蹭劈,可以通過git branch -D <name>
強行刪除疗绣。當(dāng)要刪除一個沒被合并的分支時,系統(tǒng)會提醒铺韧,如果要刪除需要強制刪除多矮,需要執(zhí)行命令:git branch -D <name>

多人協(xié)作
查看遠(yuǎn)程庫信息,使用git remote -v
祟蚀;
本地新建的分支如果不推送到遠(yuǎn)程工窍,對其他人就是不可見的;
從本地推送分支前酿,使用git push origin branch-name
,如果推送失敗鹏溯,先用git pull抓取遠(yuǎn)程的新提交罢维;
在本地創(chuàng)建和遠(yuǎn)程分支對應(yīng)的分支,使用git checkout -b branch-name origin/branch-name
丙挽,本地和遠(yuǎn)程分支的名稱最好一致肺孵;
建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián),使用git branch --set-upstream branch-name origin/branch-name
颜阐;
從遠(yuǎn)程抓取分支平窘,使用git pull
,如果有沖突凳怨,要先處理沖突瑰艘。

那些分支需要及時推送是鬼?
master分支是主分支,因此要時刻與遠(yuǎn)程同步紫新;
dev分支是開發(fā)分支均蜜,團(tuán)隊所有成員都需要在上面工作,所以也需要與遠(yuǎn)程同步芒率;
bug分支只用于在本地修復(fù)bug囤耳,就沒必要推到遠(yuǎn)程了,除非老板要看看你每周到底修復(fù)了幾個bug偶芍;
feature分支是否推到遠(yuǎn)程充择,取決于你是否和你的小伙伴合作在上面開發(fā)。

標(biāo)簽管理
啥是標(biāo)簽?zāi)兀?/strong>Git的標(biāo)簽就像是版本庫的快照匪蟀,實質(zhì)上它就是指向某個commit的指針(跟分支很像對不對椎麦?但是分支可以移動,標(biāo)簽不能移動)萄窜,所以铃剔,創(chuàng)建和刪除標(biāo)簽都是瞬間完成的。作用在于將來無論什么時候查刻,取某個標(biāo)簽的版本键兜,就是把那個打標(biāo)簽的時刻的歷史版本取出來。
創(chuàng)建標(biāo)簽
git tag <name>
:創(chuàng)建一個新標(biāo)簽
git tag
查看所有標(biāo)簽
標(biāo)簽不是按時間順序列出穗泵,而是按字母排序的普气。可以用git show <tagname>
查看標(biāo)簽信息
還可以創(chuàng)建帶有說明的標(biāo)簽佃延,用-a
指定標(biāo)簽名现诀,-m
指定說明文字:
還可以通過-s
用私鑰簽名一個標(biāo)簽
命令git tag <name>
用于新建一個標(biāo)簽,默認(rèn)為HEAD履肃,也可以指定一個commit id仔沿;
git tag -a <tagname> -m "blablabla..."
可以指定標(biāo)簽信息;
git tag -s <tagname> -m "blablabla..."
可以用PGP簽名標(biāo)簽尺棋;

操作標(biāo)簽
命令git push origin <tagname>
可以推送一個本地標(biāo)簽封锉;
命令git push origin --tags
可以推送全部未推送過的本地標(biāo)簽;
命令git tag -d <tagname>
可以刪除一個本地標(biāo)簽膘螟;
命令git push origin :refs/tags/<tagname>
可以刪除一個遠(yuǎn)程標(biāo)簽成福。

使用GitHub
在GitHub上,可以任意Fork開源倉庫荆残;
自己擁有Fork后的倉庫的讀寫權(quán)限奴艾;
可以推送pull request給官方倉庫來貢獻(xiàn)代碼。
在GitHub出現(xiàn)以前内斯,開源項目開源容易蕴潦,但讓廣大人民群眾參與進(jìn)來比較困難像啼,因為要參與,就要提交代碼品擎,而給每個想提交代碼的群眾都開一個賬號那是不現(xiàn)實的埋合,因此,群眾也僅限于報個bug萄传,即使能改掉bug甚颂,也只能把diff文件用郵件發(fā)過去,很不方便秀菱。
但是在GitHub上振诬,利用Git極其強大的克隆和分支功能,廣大人民群眾真正可以第一次自由參與各種開源項目了衍菱。
如何參與一個開源項目呢赶么?比如人氣極高的bootstrap項目,這是一個非常強大的CSS框架脊串,你可以訪問它的項目主頁https://github.com/twbs/bootstrap辫呻,點“Fork”就在自己的賬號下克隆了一個bootstrap倉庫,然后琼锋,從自己的賬號下clone:

自定義git
git config --global color.ui true
:讓git顯示顏色放闺;忽略特殊文件
在Git工作區(qū)的根目錄下創(chuàng)建一個特殊的.gitignore文件,然后把要忽略的文件名填進(jìn)去缕坎,Git就會自動忽略這些文件怖侦。不需要從頭寫.gitignore文件,GitHub已經(jīng)為我們準(zhǔn)備了各種配置文件谜叹,只需要組合一下就可以使用了匾寝。所有配置文件可以直接在線瀏覽:https://github.com/github/gitignore

忽略文件的原則是:
忽略操作系統(tǒng)自動生成的文件,比如縮略圖等荷腊;
忽略編譯生成的中間文件艳悔、可執(zhí)行文件等,也就是如果一個文件是通過另一個文件自動生成的女仰,那自動生成的文件就沒必要放進(jìn)版本庫很钓,比如Java編譯產(chǎn)生的.class文件;
忽略你自己的帶有敏感信息的配置文件董栽,比如存放口令的配置文件。

使用Windows的童鞋注意了企孩,如果你在資源管理器里新建一個.gitignore
文件锭碳,它會非常弱智地提示你必須輸入文件名,但是在文本編輯器里“保存”或者“另存為”就可以把文件保存為.gitignore
了勿璃。
配置別名
給Git配置好別名擒抛,就可以輸入命令時偷個懶推汽。配置方法:
$git config --global alias.st status$ git config --global alias.co checkout$ git config --global alias.ci commit$ git config --global alias.br branch

--global參數(shù)是全局參數(shù),也就是這些命令在這臺電腦的所有Git倉庫下都有用歧沪。
每個倉庫的Git配置文件都放在.git/config文件中而當(dāng)前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中:
$ cat .gitconfig[alias] co = checkout ci = commit br = branch st = status[user] name = Your Name email = your@email.com

別名就在[alias]后面歹撒,要刪除別名,直接把對應(yīng)的行刪掉即可诊胞。配置別名也可以直接修改這個文件暖夭,如果改錯了,可以刪掉文件重新通過命令配置撵孤。
搭建Git服務(wù)器
第一步迈着,安裝git:$ sudo apt-get install git

第二步,創(chuàng)建一個git用戶邪码,用來運行g(shù)it服務(wù):$ sudo adduser git

第三步裕菠,創(chuàng)建證書登錄:收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub文件闭专,把所有公鑰導(dǎo)入到/home/git/.ssh/authorized_keys文件里奴潘,一行一個。
第四步影钉,初始化Git倉庫:先選定一個目錄作為Git倉庫画髓,假定是/srv/sample.git,在/srv目錄下輸入命令:$ sudo git init --bare sample.git
Git就會創(chuàng)建一個裸倉庫斧拍,裸倉庫沒有工作區(qū)雀扶,因為服務(wù)器上的Git倉庫純粹是為了共享,所以不讓用戶直接登錄到服務(wù)器上去改工作區(qū)肆汹,并且服務(wù)器上的Git倉庫通常都以.git結(jié)尾愚墓。然后,把owner改為git:$ sudo chown -R git:git sample.git

第五步昂勉,禁用shell登錄:出于安全考慮浪册,第二步創(chuàng)建的git用戶不允許登錄shell,這可以通過編輯/etc/passwd文件完成岗照。找到類似下面的一行:git:x:1001:1001:,,,:/home/git:/bin/bash
改為:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
這樣村象,git用戶可以正常通過ssh使用git,但無法登錄shell攒至,因為我們?yōu)間it用戶指定的git-shell每次一登錄就自動退出厚者。
第六步,克隆遠(yuǎn)程倉庫:現(xiàn)在迫吐,可以通過git clone命令克隆遠(yuǎn)程倉庫了库菲,在各自的電腦上運行:$ git clone git@server:/srv/sample.gitCloning into 'sample'...warning: You appear to have cloned an empty repository.
剩下的推送就簡單了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末志膀,一起剝皮案震驚了整個濱河市熙宇,隨后出現(xiàn)的幾起案子鳖擒,更是在濱河造成了極大的恐慌,老刑警劉巖烫止,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒋荚,死亡現(xiàn)場離奇詭異,居然都是意外死亡馆蠕,警方通過查閱死者的電腦和手機期升,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來荆几,“玉大人吓妆,你說我怎么就攤上這事《种” “怎么了行拢?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诞吱。 經(jīng)常有香客問我舟奠,道長,這世上最難降的妖魔是什么房维? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任沼瘫,我火速辦了婚禮,結(jié)果婚禮上咙俩,老公的妹妹穿的比我還像新娘耿戚。我一直安慰自己宗雇,他們只是感情好叮盘,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涩搓,像睡著了一般脖阵。 火紅的嫁衣襯著肌膚如雪皂股。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天命黔,我揣著相機與錄音呜呐,去河邊找鬼。 笑死悍募,一個胖子當(dāng)著我的面吹牛蘑辑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坠宴,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼以躯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起忧设,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颠通,沒想到半個月后址晕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡顿锰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年谨垃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硼控。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡刘陶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出牢撼,到底是詐尸還是另有隱情匙隔,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布熏版,位于F島的核電站纷责,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撼短。R本人自食惡果不足惜再膳,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望曲横。 院中可真熱鬧喂柒,春花似錦、人聲如沸禾嫉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽夭织。三九已至吭露,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間尊惰,已是汗流浹背讲竿。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留弄屡,地道東北人题禀。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像膀捷,于是被迫代替她去往敵國和親迈嘹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

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