GIT教程

????????????GIT教程

? ??????????????????????????????????原創(chuàng)者:文思

一、Git基礎(chǔ)

1、認識GIT

有了SVN為何還用GIT蹬竖?

SVN增量式管理型凳,GIT采取了文件系統(tǒng)快照的方式

SVN集中式管理丈冬,GIT分布式管理

其他優(yōu)勢:

大部分操作在本地不需要聯(lián)網(wǎng),只有pull和push時需要

盡可能添加數(shù)據(jù)還不是修改或刪除數(shù)據(jù)

分支操作快捷(指針)

與Linux命令全面兼容

2甘畅、安裝GIT

非windows環(huán)境安裝:

https://git-scm.com/download/win

依次輸入:./config埂蕊,make,sudo make install

windows環(huán)境安裝: Windows下要使用很多Linux/Unix的工具時疏唾,需要Cygwin這樣的模擬環(huán)境蓄氧,Git也一樣。Cygwin的安裝和配置都比較復雜槐脏。

msysgit匀们,模擬環(huán)境和Git都打包好了,只需要下載一個單獨的exe安裝程序准给。msysgit是Windows版的Git泄朴。

https://git-for-windows.github.io原始下載,因中國國情:

http://www.oschina.net/p/git/http://www.oschina.net/p/msysgit下載露氮。

安裝完成后祖灰,在開始菜單里找到“Git”->“Git Bash”,蹦出一個類似命令行窗口的東西畔规,就說明Git安裝成功局扶! 安裝完成后,還需要最后一步設(shè)置叁扫,在命令行輸入:

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

因為Git是分布式版本控制系統(tǒng)三妈,所以,每個機器都必須自報家門:你的名字和Email地址莫绣。

注意:git config命令的--global參數(shù)畴蒲,用了這個參數(shù),表示你這臺機器上所有的Git倉庫都會使用這個配置对室,當然也可以對某個倉庫指定不同的用戶名和Email地址

3模燥、GIT結(jié)構(gòu)

工作區(qū)(寫代碼的地方)—git addà暫存區(qū)(臨時存儲)—git commità本地庫(歷史版本)

實際使用中很多人喜歡直接commit到本地庫,這或許是從svn沿襲來的習慣掩宜。

工作區(qū):版本庫(.git) = .svn

Git的版本庫里存了很多東西蔫骂,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動創(chuàng)建的第一個分支master牺汤,以及指向master的一個指針叫HEAD辽旋。SVN是沒有暫存區(qū)的。

文件往Git版本庫里添加的時候,是分兩步執(zhí)行的:

第一步用git add把文件添加進去补胚,實際上就是把文件修改添加到暫存區(qū)固该。

第二步是用git commit提交更改,實際上就是把暫存區(qū)的所有內(nèi)容提交到當前分支糖儡。

創(chuàng)建Git版本庫時伐坏,Git自動為我們創(chuàng)建了唯一一個master分支,git commit就是往master分支上提交更改握联。add需要提交的文件修改通通放到暫存區(qū)桦沉,然后commit可一次性提交暫存區(qū)的所有修改

4、Git和代碼托管中心:

局域網(wǎng)-GitLab服務(wù)器

外網(wǎng)-GitHub金闽、碼云

本地庫與遠程庫協(xié)作方式:團隊內(nèi)部協(xié)作纯露、跨團隊協(xié)作

團隊內(nèi)部協(xié)作
跨團隊協(xié)作

5、Git命令行操作

1)本地庫初始化

git add

2)設(shè)置簽名

用戶名代芜,email地址

作用:區(qū)分開發(fā)人員身份

這里設(shè)置的簽名和登錄遠程庫的賬號埠褪、密碼沒有關(guān)系

命令:

項目級別/倉庫級別:僅在當前本地庫范圍內(nèi)有效

git config user.name tom_pro

git config user.email good_pro@126.com

信息保存位置:

系統(tǒng)用戶界別:登錄當前操作系統(tǒng)的用戶范圍

git config –globaluser.name tom_glb

git config –globalgood_pro@126.com

項目級別優(yōu)先于用戶級別

3)常用git命令

git stauts,顯示工作目錄和暫存區(qū)的狀態(tài):

上面綠色的文件代表在暫存區(qū)挤庇,未提交到本地庫钞速。

新建文件后git status查看:

上面紅色文件代表在工作區(qū)未提交到暫存區(qū)。

git add 文件名嫡秕,提交文件到暫存區(qū):

以上文件已到暫存區(qū)渴语,git rm - -cache 文件名, 代表從暫存區(qū)撤銷文件Changes to be committed:(use “git reset

HEAD<file>…” to unstage):

git add再次提交testGit.txt到暫存區(qū),后進行g(shù)it commit提交:

git commit 文件名昆咽,提交文件到暫存區(qū):

git commit testGit.txt

輸入提交的日志信息后:

至此文件已到本地庫驾凶。修改文件再次提交看看信息是什么

git status看一下:

git add然后git commit即可。大家想下兩步操作麻煩嗎掷酗,回想一下maven命令的聲明周期原理调违,如果我們直接commit呢?看看

直接提交完成泻轰,commit包含了add操作技肩。即commit命令對應(yīng)著eclipse中的commit選項。

查看歷史記錄操作:git log

想讓日志優(yōu)美一點:git log –pretty=oneline或git log –oneline

reflog 可看到移動到當前版本需要的步數(shù)

Head代表指針糕殉,指向的是每一個歷史記錄亩鬼。

git reset --hard版本切換3種方式:

使用索引值草最(推薦)、使用^符號(只能往后退)阿蝶、使用~符號(后退)

使用索引值草最(推薦):

可以看到3bc406c已經(jīng)回退到當前最近版本。再恢復:

可以看到又恢復了黄绩。

使用^符號:

使用~符號:

reset命令的三個參數(shù)對比:soft羡洁、hard、mixed

soft僅僅在本地庫移動指針

mixed本地庫移動指針并重置暫存區(qū)

hard在本地庫移動指針爽丹,重置暫存區(qū)并重置工作區(qū)

git中對文件的刪除操作也相當于修改筑煮,示例:文件刪除并找回辛蚊,創(chuàng)建文件并提交到本地庫:

刪除后并且再進行提交:

git reflog可以看到:

本地庫里都有記錄,包括刪除的記錄都存在真仲,即可找回已刪除文件袋马。找回:

git diff,比較文件差異:

Git diff [文件名]將工作區(qū)中的文件和暫存區(qū)進行比較

Git diff [本地庫歷史版本] [文件名]將工作區(qū)中的文件和本地庫歷史記錄比較秸应。

例如:Git diff [文件名]將工作區(qū)中的文件和暫存區(qū)進行比較

提交后暫存區(qū)沒有了虑凛,則無法比較了。

Git diff [本地庫歷史版本] [文件名]將工作區(qū)中的文件和本地庫歷史記錄比較软啼,使用本地庫歷史版本號比較:

分支

Branch命令桑谍,查看、創(chuàng)建分支

git branch –v查看分支

git branch [分支名]創(chuàng)建分支

git checkout[分支名]切換分支:

合并分支示例:先修改dev分支文件:

將修改后的dev分支的文件合并到master:

1祸挪、當前分支必須是master(站在接受修改的分支上锣披,即切換為master分支)

2、執(zhí)行merge命令

可以看到已經(jīng)進行完成分支合并:

沖突解決:多個分支對同一個文件的同一個位置且內(nèi)容不一致就會產(chǎn)生沖突贿条。比如在master分支中修改testGit文件的最后一行雹仿,改為this is modify from;修改dev分支此文件最后一行為this is modify from dev!!!!!!

git chekout master 后 git merge master

看到合并成功且有沖突:

怎么解決就不用再說了整以。修改后沖突后看看暫存區(qū)是什么狀態(tài):

git add后再提交:

提交失敗盅粪,回想一下eclipse中的操作,是不是先標記為“已解決”悄蕾,這里應(yīng)該有對應(yīng)命令還是怎樣票顾?直接commit不寫文件名:

貌似成功了,所以這時候commit提交一定不能帶文件名帆调。

6奠骄、Git的基本原理:

哈希,哈希是一個一系列的加密算法番刊。不同的哈希算法有以下共同點:

1)不管輸入的數(shù)據(jù)量有多大含鳞,輸入同一個哈希算法,得到的加密結(jié)果長度固定芹务。

2)哈希算法確定蝉绷,輸入數(shù)據(jù)確定,輸出數(shù)據(jù)能夠保證不變枣抱。

3)哈希算法不可逆

所以哈希算法可以用來驗證文件熔吗。

Git底層采用的是SHA-1算法。

保存版本的機制

傳統(tǒng)集中式版本控制工具的文件管理機制

以文件變更列表的方式存儲信息佳晶。這類系統(tǒng)將它們保存的信息看作是一組基本桅狠,文件和每個文件隨時間逐步累積的差:

Git 把數(shù)據(jù)看作是小型文件系統(tǒng)的一組快照。每次提交更新時Git 都會對當前的全部文件制作一個快照并保存這個快照的索引。為了高效中跌,如果文件沒有修改咨堤,Git 不再重新存儲該文件,而是只保留一個鏈接指向之前存儲的文件漩符。所以Git 的工作方式可以稱之為快照流:

提交對象及其父對象形成的鏈條:

分支創(chuàng)建指針原理:

分支切換原理:

看出指針(HEAD)在git中的應(yīng)用一喘。

7、倉庫

創(chuàng)建遠程庫嗜暴,以使用github為例

推送本地庫到遠程庫:git push 地址(別名) 分支

遠程庫clone到本地:git clone 地址

拉韧箍恕:git pull 地址(別名) 分支,或者git

fetch 地址(別名) 分支

Pull = fetch +merge

8灼伤、SSH免密登陸

每個倉庫有兩種地址触徐,一種https一種是SSH。

1)進入當前用戶的根目錄狐赡,刪除以前創(chuàng)建的.ssh目錄并生成一個新目錄

2)運行命令生成.ssh 密鑰目錄

$ ssh-keygen -t rsa -C good_pro@126.com

[注意:這里-C 這個參數(shù)是大寫的C]

進入.ssh 目錄查看文件列表($ cd .ssh撞鹉,$ ls –lF)

查看id_rsa.pub 文件內(nèi)容($ cat id_rsa.pub)

3)復制id_rsa.pub 文件內(nèi)容,登錄GitHub颖侄,點擊用戶頭像→Settings→SSH andGPG keys

4)New SSH Key

5)輸入復制的密鑰信息

6)回到Git bash 創(chuàng)建遠程地址別名

(git remote add origin_ssh git@github.com:testGit2018y/test.git)

9鸟雏、Eclipse操作笨枯,略节榜,使用eclipse插件時多想想選項操作對應(yīng)的命令及原理。

10垮衷、eclipse中的文件忽略(比較實用)

概念:Eclipse 特定文件展蒂。這些都是Eclipse 為了管理我們創(chuàng)建的工程而維護的文件又活,和開發(fā)的代碼沒有直接關(guān)系。最好不要在Git 中進行追蹤锰悼,也就是把它們忽略柳骄。

.classpath 文件?? .project 文件?? .settings 目錄下所有文件

什么要忽略Eclipse 特定文件呢?

同一個團隊中很難保證大家使用相同的IDE 工具箕般,而IDE 工具不同時耐薯,相關(guān)工程特定文件就有可能不同。如果這些文件加入版本控制丝里,那么開發(fā)時很可能需要為了這些文件解決沖突曲初。

GitHub 官網(wǎng)樣例文件

https://github.com/github/gitignore

https://github.com/github/gitignore/blob/master/Java.gitignore

編輯本地忽略配置文件,文件名任意:

Java.gitignore

# Compiled class file

*.class

# Log file

*.log

# BlueJ files

*.ctxt

# Mobile Tools for Java (J2ME)

.mtj.tmp/

# Package Files #

*.jar

*.war

*.nar

*.ear

*.zip

*.tar.gz

*.rar

# virtual machine crash logs, seehttp://www.java.com/en/download/help/error_hotspot.xml

hs_err_pid*

.classpath

.project

.settings

Target

在~/.gitconfig文件中引入上述文件

[core]

excludesfile =C:/Users/Lenovo/Java.gitignore

[注意:這里路徑中一定要使用“/”杯聚,不能使用“\”]

11臼婆、git工作流

Gitflow工作流

通過為功能開發(fā)、發(fā)布準備和維護設(shè)立了獨立的分支械媒,讓發(fā)布迭代過程更流暢目锭。嚴格的分支模型也為大型項目提供了一些非常必要的結(jié)構(gòu)评汰。

常見結(jié)構(gòu):

1)主干分支master

主要負責管理正在運行的生產(chǎn)環(huán)境代碼纷捞。永遠保持與正在運行的生產(chǎn)環(huán)境完全一致痢虹。

2)開發(fā)分支develop

主要負責管理正在開發(fā)過程中的代碼。一般情況下應(yīng)該是最新的代碼主儡。

3)bug 修理分支hotfix奖唯。修復完隨時刪除

主要負責管理生產(chǎn)環(huán)境下出現(xiàn)的緊急修復的代碼。從主干分支分出糜值,修理完畢并測試上線后丰捷,并回主干分支。并回后寂汇,視情況可以刪除該分支病往。

4)準生產(chǎn)分支(預發(fā)布分支)release

較大的版本上線前,會從開發(fā)分支中分出準生產(chǎn)分支骄瓣,進行最后階段的集成測試停巷。該版本上線后,會合并到主干分支榕栏。生產(chǎn)環(huán)境運行一段階段較穩(wěn)定后可以視情況刪除畔勤。

5)功能分支feature。開發(fā)完后隨時刪除

為了不影響較短周期的開發(fā)工作扒磁,一般把中長期開發(fā)模塊庆揪,會從開發(fā)分支中獨立出來。開發(fā)完成后會合并到開發(fā)分支妨托。

Forking 工作流

Forking 工作流是在GitFlow 基礎(chǔ)上缸榛,充分利用了Git 的Fork 和pull request 的功能以達到代碼審核的目的。更適合安全可靠地管理大團隊的開發(fā)者兰伤,而且能接受不信任貢獻者的提交内颗。

二、git服務(wù)器搭建

官網(wǎng)地址

首頁:https://about.gitlab.com/

安裝說明:https://about.gitlab.com/installation/

安裝命令摘錄

sudo yum install -y curlpolicycoreutils-python openssh-server cronie

sudo lokkit -s http -s ssh

sudo yum install postfix

sudo service postfix start

sudo chkconfig postfix on

curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh| sudo bash

sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ee

實際問題:yum 安裝gitlab-ee(或ce)時医清,需要聯(lián)網(wǎng)下載幾百M 的安裝文件起暮,非常耗時,所以應(yīng)提前把所需RPM 包下載并安裝好会烙。

下載地址為:

https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/7/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm

調(diào)整后的安裝過程

sudo rpm -ivh /opt/gitlab-ce-10.8.2-ce.0.el7.x86_64.rpm

sudo yum install -y curlpolicycoreutils-python openssh-server cronie

sudo lokkit -s http -s ssh

sudo yum install postfix

sudo service postfix start

sudo chkconfig postfix on

curl?https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

sudo EXTERNAL_URL="http://gitlab.example.com" yum -y install gitlab-ce

當前步驟完成后重啟负懦。

gitlab服務(wù)操作:

初始化配置gitlab:gitlab-ctl reconfigure

啟動gitlab 服務(wù):gitlab-ctl start

停止gitlab 服務(wù):gitlab-ctl stop

訪問Linux 服務(wù)器IP 地址即可,如果想訪問EXTERNAL_URL 指定的域名還需要配置域名服務(wù)器或本地hosts文件柏腻。初次登錄時需要為gitlab 的root 用戶設(shè)置密碼纸厉。應(yīng)該會需要停止防火墻服務(wù):service firewalld stop

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市五嫂,隨后出現(xiàn)的幾起案子颗品,更是在濱河造成了極大的恐慌肯尺,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件躯枢,死亡現(xiàn)場離奇詭異则吟,居然都是意外死亡,警方通過查閱死者的電腦和手機锄蹂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門氓仲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人得糜,你說我怎么就攤上這事敬扛。” “怎么了朝抖?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵啥箭,是天一觀的道長。 經(jīng)常有香客問我治宣,道長急侥,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任炼七,我火速辦了婚禮缆巧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘豌拙。我一直安慰自己陕悬,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布按傅。 她就那樣靜靜地躺著捉超,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唯绍。 梳的紋絲不亂的頭發(fā)上拼岳,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音况芒,去河邊找鬼惜纸。 笑死,一個胖子當著我的面吹牛绝骚,可吹牛的內(nèi)容都是我干的耐版。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼压汪,長吁一口氣:“原來是場噩夢啊……” “哼粪牲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起止剖,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤腺阳,失蹤者是張志新(化名)和其女友劉穎落君,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體亭引,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡绎速,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了痛侍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朝氓。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡魔市,死狀恐怖主届,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情待德,我是刑警寧澤君丁,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站将宪,受9級特大地震影響绘闷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜较坛,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一印蔗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丑勤,春花似錦华嘹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岔霸,卻和暖如春薛躬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呆细。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工型宝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人絮爷。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓趴酣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親略水。 傳聞我的和親對象是個殘疾皇子价卤,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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

  • 還是老規(guī)矩,這篇看完后渊涝,還是學不會git版本控制的慎璧,你來砍我 是兄弟就來砍我吧4蚕印!胸私! Git是分布式版本控制系統(tǒng)厌处,...
    Zteen閱讀 3,133評論 0 6
  • Git是什么 Git能解決什么問題 Git能解決什么問題?答曰:版本控制岁疼。 經(jīng)常寫文檔的同學應(yīng)該比較清楚阔涉,對某個文...
    dy2903閱讀 318評論 0 0
  • chapter 1: 如何創(chuàng)建版本庫 初始化一個倉庫 $ git init 添加文件到Git倉庫的過程: $ gi...
    飛將軍閱讀 2,856評論 0 2
  • (ps.這篇是接著卜憶的序章寫的。) part.1 陽光明媚捷绒,微風輕輕地吹動了樹梢瑰排。舊夢學院又迎來了新的...
    坤坤家涼笙閱讀 263評論 5 0
  • 在整理馬拉松證書時,我自問是不是應(yīng)該把自己的跑步故事也寫下來暖侨,像寫文章那樣寫成一本書椭住?這個問題,我猶豫了段...
    f8d2656fcc71閱讀 480評論 0 0