Centos7系統(tǒng)下配置Git服務(wù)器(1)---實(shí)現(xiàn)原生Git服務(wù)基本操作

0x0 Git常用命令速查表

0x1 Git是什么?

Git是一個(gè)開源的分布式版本控制系統(tǒng)拾给,可以有效蒋得、高速地處理從很小到非常大的項(xiàng)目版本管理。
Git 是 Linus Torvalds 為了幫助管理 Linux 內(nèi)核開發(fā)而開發(fā)的一個(gè)開放源碼的版本控制軟件饮焦。
Git的主要功能:
1县踢、查看郵件或者通過其它方式查看一般開發(fā)者的提交狀態(tài)疏之。
2锋爪、打上補(bǔ)丁,解決沖突(可以自己解決亏镰,也可以要求開發(fā)者之間解決以后再重新提交拯爽,如果是開源項(xiàng)目毯炮,還要決定哪些補(bǔ)丁有用,哪些不用)篮幢。
3三椿、向公共服務(wù)器提交結(jié)果葫辐,然后通知所有開發(fā)人員。

0x2蛋叼、基于CentOS7安裝git服務(wù)

主機(jī)規(guī)劃

名稱 主機(jī)規(guī)劃 內(nèi)存 安裝軟件 系統(tǒng)
git_server 10.0.0.11 4G yum install -y git Centos7.6 1810
git_client 10.0.0.12 4G yum install -y git Centos7.6 1810
git_client 10.0.0.13 64G Git+XShell Windows10 64

Step 1 安裝git服務(wù)

yum install -y git
[root@gitServer ~]# git --version
git version 1.8.3.1

Step 2 創(chuàng)建一個(gè)git用戶組和用戶鸦列,用來運(yùn)行g(shù)it服務(wù)

#查看git用戶是否存在
[root@gitServerhome]#id git                         
id: git: no such user          #提示git用戶不存在
groupadd git  #創(chuàng)建用戶
useradd git -g git
#方法一設(shè)置git用戶的密碼
passwd git 
#方法二也可以設(shè)置密碼
echo git:123456|chpasswd

Step3 創(chuàng)建代碼倉庫git的擁有者

#進(jìn)入home目錄
cd /home
#現(xiàn)有倉庫導(dǎo)出為裸倉庫——即一個(gè)不包含當(dāng)前工作目錄的倉庫
git init --bar project.git
#把倉庫所屬用戶改為git
#-R : 處理指定目錄以及其子目錄下的所有文件
#將目前目錄下的所有文件與子目錄的擁有者皆設(shè)為 git 群體的使用者 git :
chown -R git:git  project.git
#以后每創(chuàng)建一個(gè)新的倉庫.都需要執(zhí)行上面的命令(修改倉庫所屬用戶為git)

這一步很重要,如果沒有這一步,提交代碼的時(shí)候報(bào)權(quán)限錯(cuò)誤纤泵。
———————————————————————————

0x3捏题、客戶端通過終端或GUI工具遷代碼

這里為了安全性我們沒有設(shè)置客戶端的免密登陸!4洹窟社!如果覺得每次輸入密碼比較繁瑣绪钥,可以設(shè)置免密登陸程腹。

步驟 命令 實(shí)例 協(xié)議
第一步 git clone git clone git@10.0.0.11:/home/git/project.git SSH
第一步 git clone http://git.kernel.org/pub/scm/virt/kvm/kvm.git HTTP
第一步 git clone https://git.kernel.org/pub/scm/virt/kvm/kvm.git HTTPS
第二步 cd 項(xiàng)目目錄 cd project
第三步 git add git add index.html或git add .
第四步 git commit git commit -m "備注"
第四步 git config git config --global user.email "xxxx@163.com"
第四步 git config git config --global user.name "xxxx"
第五步 git remote git remote add origin git@10.0.0.11:/home/git/project.git SSH
第六步 git push git push -u origin master SSH

【注意】這里第一步我們給出了三種方式寸潦,這幾種方式都可以见转,都是基于不同協(xié)議的克隆項(xiàng)目的方式。除了我們在終端下或GUI的環(huán)境中添加項(xiàng)目以外咏雌,我們常見的IDE集成開發(fā)環(huán)境中也集成了Git的應(yīng)用赊抖。比如XCode寨典、PHPStrom等。如下圖

以下是在終端中命令行方式操作

git clone git@10.0.0.11:/home/git/project.git
#開發(fā)人員進(jìn)入到項(xiàng)目目錄
cd project
#添加修改以后的代碼源文件
echo "readme">>readme.md
#添加到git中
git add .
#提交日志
git commit -m "add readme.md"
#全局配置git信息
git config --global user.email "xxxx@163.com"
git config --global user.name "xxxx"
git config --global color.ui true  #帶顏色的顯示
#同步遠(yuǎn)程庫
git remote add origin git@10.0.0.11:/home/git/project.git
#提交代碼
git push -u origin master   #-u指定默認(rèn)主機(jī) 

第一次push提交需要-u指定主機(jī)婴噩,以后就直接push即可
git push origin master #將本地的master分支推送到origin主機(jī)的master分支栽烂。如果后者不存在,則會(huì)被新建矾策。

注意:git config的配置信息

名稱 主要參數(shù)
git config用戶信息 --global user.name
git config用戶信息 --global user.email
git config文本編輯 --global core.editor
git config差異分析 --global merge.tool
git config顏色顯示 --global color.ui
git config配置信息 --list

0x4扫尺、通過Git log查看日志記錄

名稱 主要參數(shù) 例子
git log 查看提交的歷史記錄 git log
git log --oneline 顯示簡潔的版本 git log --oneline
git log --oneline 顯示簡潔的版本 git log --oneline -5
git log --reverse逆序輸出 git log --reverse --oneline
git log --author查找指定作者 git log --author=xxxxx --oneline
git log --befire --after時(shí)間段查找 git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
#查看提交的歷史記錄
git log
#可以用 --oneline 選項(xiàng)來查看歷史記錄的簡潔的版本
git log --oneline
9cc3008 add a.txt
c01d88c add index.html
#用 --reverse 參數(shù)來逆向顯示所有日志
git log --reverse --oneline
#如果只想查找指定用戶的提交日志可以使用命令:git log --author 
git log --author=xxxxx --oneline -5
#如果你要指定日期苗分,可以執(zhí)行幾個(gè)選項(xiàng):--since 和 --before摔癣,但是你也可以用 --until 和 --after纬向。
git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges

5、分支管理

git branch 分支管理

名稱 主要參數(shù)
git branch 查看分支
git branch 分支名稱 創(chuàng)建分支
git checkout 分支名稱 切換分支
git merge 要合并的分支 分支合并(可能產(chǎn)生沖突)注意:切換分支再合并

5.1企業(yè)分支管理使用案例
需求分析:前端開發(fā)部門或后臺開發(fā)部門需要下班以后在家或周末在家進(jìn)行代碼的開發(fā),主分支保存在公司的服務(wù)器上膳帕。

查看當(dāng)前的分支 只有master

[root@kvm03 projiect_bare]#  git branch
* master

創(chuàng)建一個(gè)一個(gè)分支dev (開發(fā)的分支)

git branch dev

再次查看分支情況危彩,已經(jīng)有dev分支

[root@kvm03 projiect_bare]#  git branch
  dev
* master

切換分支注意分支之前的星號

[root@kvm03 projiect_bare]# git checkout dev
Switched to branch 'dev'
[root@kvm03 projiect_bare]#  git branch
* dev
  master

合并master和dev分支

[root@kvm03 projiect_bare]# git merge master
Already up-to-date.

開發(fā)創(chuàng)建新的文件內(nèi)容或修改代碼內(nèi)容

[root@kvm03 projiect_bare]# touch readme.md
[root@kvm03 projiect_bare]# git add .
[root@kvm03 projiect_bare]# git commit -m "add readme.md"
[dev a1af437] add readme.md
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 readme.md
[root@kvm03 projiect_bare]# git push origin dev
git@10.0.0.158's password: 
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 276 bytes | 0 bytes/s, done.
Total 2 (delta 0), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
 * [new branch]      dev -> dev

5.2下班或周末在家里進(jìn)行開發(fā)
開發(fā)人員不管是在家里工作還是在公司工作汤徽,不需要每次都git clone項(xiàng)目谒府,通過checkout dev切換分支,通過git pull拉取最新的項(xiàng)目代碼泰鸡。然后正常從事開發(fā)工作壳鹤。

切換到dev分支
[root@kvm03 projiect_bare]# git checkout dev
Already on 'dev'
拉代碼
[root@kvm03 projiect_bare]# git pull origin dev
git@10.0.0.158's password: 
From 10.0.0.158:/home/git/projiect_bare
 * branch            dev        -> FETCH_HEAD
Already up-to-date.
[root@kvm03 projiect_bare]# touch b.txt
[root@kvm03 projiect_bare]# git add .
[root@kvm03 projiect_bare]# git commit -m "add b.txt"
[dev 300b6ed] add b.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 b.txt

[root@kvm03 projiect_bare]# git push origin dev
git@10.0.0.158's password: 
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 219 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
   a1af437..300b6ed  dev -> dev

5.2 到公司以后開發(fā)流程
開發(fā)人員不管是在家里工作還是在公司工作余舶,不需要每次都git clone項(xiàng)目,通過checkout dev切換分支赠制,通過git pull拉取最新的項(xiàng)目代碼千扔。然后正常從事開發(fā)工作。注意上線過程曲楚。

切換到dev分支
[root@kvm03 projiect_bare]# git checkout dev
Already on 'dev'
拉代碼
[root@kvm03 projiect_bare]# git pull origin dev
git@10.0.0.158's password: 
From 10.0.0.158:/home/git/projiect_bare
 * branch            dev        -> FETCH_HEAD
Already up-to-date.
[root@kvm03 projiect_bare]# touchc.txt
[root@kvm03 projiect_bare]# git add .
[root@kvm03 projiect_bare]# git commit -m "add c.txt"
[dev 300b6ed] add c.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 c.txt

[root@kvm03 projiect_bare]# git push origin dev
git@10.0.0.158's password: 
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 219 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
   a1af437..300b6ed  dev -> dev
#切換分支到master
[root@kvm03 projiect_bare]# git checkout master
Switched to branch 'master'
#合并分支dev與master
[root@kvm03 projiect_bare]# git merge dev
Updating 9cc3008..300b6ed
Fast-forward
 c.txtt     | 0
 b.txt     | 0
 readme.md | 0
3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 c.txt
 create mode 100644 b.txt
 create mode 100644 readme.md
#dev分支合并master分支代碼上線
[root@kvm03 projiect_bare]# git push origin master
git@10.0.0.158's password: 
Total 0 (delta 0), reused 0 (delta 0)
To git@10.0.0.158:/home/git/projiect_bare.git
   9cc3008..300b6ed  master -> master

5.3 因?yàn)槠诩影?約妹子....忘了提交代碼!E玳埂O澈浮!(企業(yè)真實(shí)開發(fā)案例)

在公司上班期間操作忙著給妹子調(diào)bug叽讳,手把手輔導(dǎo)坟募。懈糯。妹子為了回報(bào)。請吃飯她紫。屿储。∥辏看電影。买羞。畜普。帶身份證H阂丁=至ⅰ!然后得意忘形逛犹。梁剔。。忘了push今天的代碼码撰。悲劇開始了脖岛。

情景再現(xiàn)

在公司上班的場景

git chenckout dev
開發(fā)些了N多代碼
git add .
git commit -m "xxxxx"
為了給妹子手把手輔導(dǎo)砾省!忘記了push......

回家以后繼續(xù)寫代碼的場景

git chenckout dev
開發(fā)些了N多代碼
git add .
git commit -m "xxxxx"
git push origin dev #正常提交

第二天上班以后

git chenckout dev 
git status #看一下沖突的位置和內(nèi)容 手動(dòng)修改后再次開發(fā)
有合并可能出現(xiàn)沖突编兄,如有沖突需要手動(dòng)解決沖突以后
繼續(xù)開發(fā)些了N多代碼
git add .
git commit -m "xxxxx"
git push origin dev #正常提交

總結(jié) git沖突的場景
情景一:多個(gè)分支代碼合并到一個(gè)分支時(shí)狠鸳;
情景二:多個(gè)分支向同一個(gè)遠(yuǎn)端分支推送代碼時(shí);
解決情景一:在當(dāng)前分支上卸察,直接修改沖突代碼--->add--->commit铅祸。
解決情景二:在本地當(dāng)前分支上,修改沖突代碼--->add--->commit--->push

Git官方文檔可以參考
https://git-scm.com/book/zh/v2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載稼跳,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者吃沪。
  • 序言:七十年代末票彪,一起剝皮案震驚了整個(gè)濱河市降铸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颈渊,老刑警劉巖终佛,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铃彰,死亡現(xiàn)場離奇詭異牙捉,居然都是意外死亡敬飒,警方通過查閱死者的電腦和手機(jī)无拗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門英染,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人搪搏,你說我怎么就攤上這事疯溺。” “怎么了恃疯?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵澡谭,是天一觀的道長损俭。 經(jīng)常有香客問我杆兵,道長,這世上最難降的妖魔是什么攒砖? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任吹艇,我火速辦了婚禮受神,結(jié)果婚禮上格侯,老公的妹妹穿的比我還像新娘联四。我一直安慰自己,他們只是感情好醉拓,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布廉嚼。 她就那樣靜靜地躺著倒戏,像睡著了一般杜跷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上憋槐,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天阳仔,我揣著相機(jī)與錄音近范,去河邊找鬼。 笑死叶堆,一個(gè)胖子當(dāng)著我的面吹牛斥杜,可吹牛的內(nèi)容都是我干的蔗喂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼返弹!你這毒婦竟也來了义起?” 一聲冷哼從身側(cè)響起师崎,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤犁罩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后含滴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡丐巫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年谈况,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勺美。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碑韵,死狀恐怖赡茸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情祝闻,我是刑警寧澤占卧,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布联喘,位于F島的核電站华蜒,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏耸袜。R本人自食惡果不足惜友多,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望堤框。 院中可真熱鬧域滥,春花似錦、人聲如沸蜈抓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沟使。三九已至委可,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間腊嗡,已是汗流浹背着倾。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留燕少,地道東北人卡者。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像客们,于是被迫代替她去往敵國和親崇决。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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

  • git 使用筆記 git原理: 文件(blob)對象底挫,樹(tree)對象恒傻,提交(commit)對象 tree對象 ...
    神刀閱讀 3,758評論 0 10
  • Git有很多優(yōu)勢,其中之一就是遠(yuǎn)程操作非常簡便建邓。本文詳細(xì)介紹5個(gè)Git命令盈厘,它們的概念和用法,理解了這些內(nèi)容涝缝,你就...
    bondPang閱讀 1,320評論 0 6
  • 前言 Git使用教程 Git是什么 Git是一個(gè)開源的分布式版本控制系統(tǒng)扑庞,用于敏捷高效地處理任何或小或大的項(xiàng)目譬重。 ...
    90后的思維閱讀 899評論 0 0
  • 初始化git 配置git 使用Git的第一件事就是設(shè)置你的名字和email,這些就是你在提交commit時(shí)的簽名,...
    MiracleJQ閱讀 1,388評論 0 0
  • 一罐氨、基本概念: 注:對于git的分布式概念及其優(yōu)點(diǎn)臀规,不重復(fù)說明,自己百度或谷歌栅隐。本文中涉及到指令前面有$的塔嬉,在cm...
    大廠offer閱讀 1,412評論 0 3