天天看點

分布式代碼管理系統Git

1. centos上安裝git

yum install -y epel-release

yum install -y git

設定使用者辨別,否則初始使用該指令會提示

git config --global user.name "silen"

git config --global user.email "[email protected]"

<a href="https://s5.51cto.com/wyfs02/M00/95/61/wKioL1kUblDhkgANAAAc9dY_-r4683.png" target="_blank"></a>

2. 建立版本庫

mkdir  /home/gitroot

cd /home/gitroot

git init   //用這個指令初始化,讓這個目錄變成git可以管理的倉庫,配置等檔案在.git目錄下

<a href="https://s1.51cto.com/wyfs02/M02/95/62/wKiom1kUblvw2H6RAAAZBx2kdDI551.png" target="_blank"></a>

3. 送出檔案到倉庫

1)echo -e "123\naaa\n456\nbbb" &gt; 2.txt  //建立一個檔案 2.txt

2)git add 2.txt  //把2.txt添加到倉庫中

3)git commit -m "add new file 2.txt"   //add完了必須要commit才算真正把檔案送出到git倉庫裡,自定義描述

<a href="https://s4.51cto.com/wyfs02/M02/95/62/wKiom1kUbnqzPN_vAAAzmPdWJwI512.png" target="_blank"></a>

1)echo -e "ccc\nddd"&gt;&gt;2.txt  //先更改一下2.txt

2)git status   //檢視目前倉庫中的狀态,比如是否有改動的檔案

<a href="https://s4.51cto.com/wyfs02/M00/95/61/wKioL1kUbo3jMFjRAAAn0Hutg3U447.png" target="_blank"></a>

3)git diff 2.txt  //可以對比2.txt本次修改了什麼内容,相比較倉庫裡面的版本,a是線上;b是本地

<a href="https://s1.51cto.com/wyfs02/M01/95/61/wKioL1kUbpeCWmQJAAAXN15Jcjk699.png" target="_blank"></a>

4)git status  //修改了2.txt檔案之後,檢視狀态;提示可以送出或者放棄更改

<a href="https://s4.51cto.com/wyfs02/M01/95/61/wKioL1kUbqCCUM99AAAoBiIwesQ482.png" target="_blank"></a>

5)git checkout -- 2.txt   //放棄修改或恢複删除,再次檢視内容不發生改變

<a href="https://s3.51cto.com/wyfs02/M02/95/62/wKiom1kUbqvx_CR3AAALUth2FKQ513.png" target="_blank"></a>

6)git add 2.txt   //再次commit之前,也可以撤銷

<a href="https://s5.51cto.com/wyfs02/M00/95/61/wKioL1kUbrTyA5cmAAAYomdL-wU879.png" target="_blank"></a>

7)git reset HEAD 2.txt  //撤銷,回到了上一步

<a href="https://s4.51cto.com/wyfs02/M01/95/62/wKiom1kUbr6yJ0CYAAA09JqkBTg942.png" target="_blank"></a>

4. 結合日志版本回退

1)echo -e "eee\nfff"&gt;&gt;2.txt    //修改多送出第一次

git add 2.txt

git commit -m "change once 2.txt"

2)echo -e "ggg\nhhh"&gt;&gt;2.txt    //修改多送出第二次

git commit -m "change twice 2.txt"

3)git log   //可以檢視所有送出git倉庫的記錄操作

<a href="https://s2.51cto.com/wyfs02/M00/95/62/wKioL1kUbzHwCTQzAABXmGRtsPU586.png" target="_blank"></a>

4)git log --pretty=oneline   //一行顯示,更清楚

<a href="https://s2.51cto.com/wyfs02/M01/95/62/wKiom1kUbz6i3gc9AAAjHkvuXHA696.png" target="_blank"></a>

5)git reset --hard b0b97     //根據這個log,我們可以指定回退第一個版本,後面跟的字元串可以簡寫。

<a href="https://s4.51cto.com/wyfs02/M02/95/62/wKioL1kUb0rTuy8MAAALVwiazyI711.png" target="_blank"></a>

6)git reflog  //當回退到某版本後,再git log 則之後的版本不再顯示了,用該指令顯示所有的版本,以供繼續恢複

<a href="https://s2.51cto.com/wyfs02/M02/95/62/wKiom1kUb1Oyil-fAAApcWNFneM053.png" target="_blank"></a>

5. 撤銷修改

1)已修改或删除2.txt,還沒有add,用checkout恢複到上一次送出時的狀态

git checkout -- 2.txt 

2)已修改或删除2.txt,已經add,但還沒commit,先用reset HEAD,再用checkout恢複到上一次送出時的狀态

git  reset HEAD 2.txt

git checkout -- 2.txt

3)既已add,也已commit,用版本回退方法恢複到上一次送出時的狀态

6. 删除

1)cp 2.txt 3.txt   //建立一個新檔案,送出

git add 3.txt

git commit -m "add a new file 3.txt" 

2)rm -f 2.txt  //删除版本庫中的檔案

git status //可以看到,提示2.txt檔案被删除了

<a href="https://s5.51cto.com/wyfs02/M01/95/62/wKiom1kUb23z9jFOAAAtl0giBMY663.png" target="_blank"></a>

3)git  checkout -- 3.txt  //如果要想恢複,直接用  

4)git rm 3.txt    //在git倉庫裡删除,此步可以用 reset HEAD 撤銷

git commit -m "delete 3.txt"    //徹底删除3.txt

<a href="https://s2.51cto.com/wyfs02/M02/95/62/wKiom1kUb3jhly9qAAAtSRqTPZQ620.png" target="_blank"></a>

7. 做一個遠端倉庫(github)

點repositories  --&gt; new(名字自定義,比如叫studygit)-&gt;選擇public,點create repository

2)添加key:

右上角點自己頭像,選擇settings,左側選擇SSH and GPG keys

右上角點New SSH key,把linux機器上的 /root/.ssh/id_rsa.pub内容粘貼到這裡(生成公鑰指令 ssh-keygen)

3)把本地參考推送到遠端倉庫

a. mkdir /home/studygit

cd /home/studygit

git init    //初始化

b. echo "test,test,test"&gt;test.txt    //在本地倉庫目錄中建立一個檔案并送出

git add test.txt

git commit -m "create a new file test.txt"

<a href="https://s4.51cto.com/wyfs02/M02/95/62/wKioL1kUb4iT-lp5AAAkUwgHgNA707.png" target="_blank"></a>

c. git push -u origin master  //遠端推送,第一次連接配接需要驗證提示;下一次就可以直接 git push 

<a href="https://s4.51cto.com/wyfs02/M02/95/62/wKioL1kUb5iBuZpfAABHokriDkM133.png" target="_blank"></a>

d. github中檢視,已推送成功

<a href="https://s1.51cto.com/wyfs02/M00/95/62/wKiom1kUb6igqWpTAADMmflrm-4032.png" target="_blank"></a>

e. 編輯test.txt,在本地倉庫送出之後,再遠端推送git push

<a href="https://s3.51cto.com/wyfs02/M01/95/62/wKiom1kUb8vzhcsvAAAzqEocV14844.png" target="_blank"></a>

f. 克隆一個遠端倉庫

A. cd /home

B. cd  lanmp

vi lanmp.sh  //編輯克隆下來的檔案

rm -rf ./git    //删除配置檔案

git init          //重新初始化配置檔案

C. git add lanmp.sh   //送出至本地倉庫

git commit -m "change lanmp.sh" 

D. 登入github,建立一個lanmp項目

git push -u origin master   //然後再推送到遠端服務端

8. 分支管理

說明:master分支基本不動(即不修改檔案,隻做合并),隻有測試完成才合并至master,平時一般使用開發分支,錯了也沒關系

1)git branch  //檢視分支

git branch silen  //建立分支

git checkout silen   //切換分支,星号辨別

<a href="https://s1.51cto.com/wyfs02/M01/95/62/wKiom1kUcN6ChovgAAARRxBLgJc142.png" target="_blank"></a>

2)在silen分支下 ,編輯2.txt,并送出到新分支

echo "silen"&gt;silen.txt

git add silen.txt

git commit -m "create a new file silen.txt"

git checkout master   //切換回master分支,檢視檔案,并沒發現silen.txt

<a href="https://s4.51cto.com/wyfs02/M02/95/62/wKioL1kUcOviUEJ1AABMxDKrrf8614.png" target="_blank"></a>

3)合并分支,開發過程中,經常需要将多人的分支合并

git checkout master   //先換到需要合并的目标分支上去,如master

git merge silen          //把silen分支合并到了master,隻更新源分支(silen)檔案的内容,目标分支(master)就算改動了也不會變,一般不會更改master分支

<a href="https://s3.51cto.com/wyfs02/M00/95/62/wKiom1kUcP-TTt0kAAAtHY2Pw8g180.png" target="_blank"></a>

注:master分支和silen分支都對silen.txt進行了編輯,當合并時會提示沖突,方法:在master分支下,編輯silen.txt,改為silen分支裡面silen.txt的内容,然後送出silen.txt,再合并silen分支(或者反過來)。合并分支有一個原則,最新的分支合并到舊的分支

4)删除分支

git  branch -d aming   //若分支沒有合并,删除之前會提示合并

git branch -D aming   //強制删除分支,即删除前不合并内容,會丢失資料

<a href="https://s1.51cto.com/wyfs02/M02/95/62/wKiom1kUcRaz4bHRAAAj3ODLnQk506.png" target="_blank"></a>

5)分支應用原則

master分支非常重要,線上釋出代碼用這個分支,平時開發代碼不要在這個分支上,而是建立一個dev分支,專門用作開發,隻有當釋出到線上之前,才會把dev分支合并到master。開發人員應該在dev的基礎上再分支成個人分支,個人分支(在自己pc上)裡面開發代碼,然後合并到dev分支

9. git stash 保留現場

當我們在silen分支,編輯了一個新的檔案4.txt,這時候我們需要到其他分支去修複一個bug,是以需要保留現場,如果不這麼做,每次(可能是其他同僚)送出該分支,會有4.txt需送出的提示

1)git add 4.txt  //送出一下,但是不commit

2)  git  stash       //儲存一下現場,該檔案影藏掉

<a href="https://s4.51cto.com/wyfs02/M00/95/62/wKiom1kUca2jZ8WaAAAsCfXwxg8981.png" target="_blank"></a>

3)切換到另外分支去修複bug,修複完bug後,再回到silen分支

    git stash list       //檢視儲存過的現場

    git stash apply   //恢複現場,檔案顯示回來

    git stash apply stash@{1}   //可以指定恢複

<a href="https://s4.51cto.com/wyfs02/M01/95/62/wKioL1kUccyy_HPaAAA_4dNdDiw996.png" target="_blank"></a>

10. 遠端分支

1)在web上,可以進行分支的建立、切換、删除、恢複等操作

2)檢視遠端庫資訊,使用git remote -v,檢視到origin名字, 本地建立的分支如果不推送到遠端,對其他人就是不可見的

<a href="https://s2.51cto.com/wyfs02/M01/95/62/wKioL1kUch2y6bWiAAAT4-A-OrU014.png" target="_blank"></a>

通過名字origin指令,檢視遠端分支  git ls-remote origin

<a href="https://s3.51cto.com/wyfs02/M02/95/62/wKiom1kUcjKgHlS_AAAVTx6L3dE376.png" target="_blank"></a>

3)從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠端的新送出

<a href="https://s4.51cto.com/wyfs02/M00/95/62/wKiom1kUclOw0zAHAAAn4ULuvLs064.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M00/95/62/wKioL1kUclOTROW0AADAQ0RrvYo032.png" target="_blank"></a>

4)給遠端master分支推送檔案

<a href="https://s3.51cto.com/wyfs02/M00/95/62/wKioL1kUcmfTTLe3AAAj3ODLnQk092.png" target="_blank"></a>

web端同步檔案

<a href="https://s1.51cto.com/wyfs02/M01/95/62/wKioL1kUcnOye70GAABfD80ABb8892.png" target="_blank"></a>

5) 在本地建立和遠端分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠端分支的名稱最好一緻

cat .git/config   //檢視配置檔案,得出遠端URL,以供克隆使用

<a href="https://s3.51cto.com/wyfs02/M00/95/62/wKiom1kUcpWx6TzgAAAsZ8Dr1jc205.png" target="_blank"></a>

rm -rf studygit/

git clone [email protected]:huangzp-silen/studygit.git

<a href="https://s2.51cto.com/wyfs02/M01/95/62/wKiom1kUcqvAFdpKAAAldXyte4A397.png" target="_blank"></a>

web上建立dev2分支,本地同步

git checkout -b dev2 origin/dev2

<a href="https://s1.51cto.com/wyfs02/M01/95/62/wKioL1kUcsDwuySuAAAeQ33XnTU697.png" target="_blank"></a>

6) 從遠端抓取分支,使用git pull

11. 标簽管理

标簽類似于快照功能,我們可以給版本庫打一個标簽,記錄某個時刻庫的狀态。我們可以随時恢複到該狀态

1)git checkout master   //先切到master分支上

git tag v1.0   // 給master打一個标簽v1.0

git tag     //檢視所有的标簽

git show v1.0   //顯示詳細資訊

<a href="https://s4.51cto.com/wyfs02/M02/95/63/wKiom1kUcufiUgTcAAASpjcPjNA263.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M02/95/62/wKioL1kUcufhtMFQAAA0sKogy6k241.png" target="_blank"></a>

2)tag是針對commit來打标簽的,是以可以針對曆史的commit來打tag

git log --pretty=oneline --abbrev-commit

git tag v0.9 46d3c1a

git tag -a v0.8 -m "tag just v1.1 and so on"  5aacaf4  //可以對标簽進行描述

<a href="https://s4.51cto.com/wyfs02/M01/95/62/wKioL1kUcvqS1VvLAAAPjn6iO44931.png" target="_blank"></a>

3)git tag -d v0.8   //删除标簽

4)git push origin v1.0   //推送指定标簽到遠端

git push --tag origin   //推送所有标簽

<a href="https://s4.51cto.com/wyfs02/M01/95/62/wKioL1kUczizaNVDAAAj3ODLnQk156.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M02/95/63/wKiom1kUczig7UcJAABfD80ABb8423.png" target="_blank"></a>

5)如果本地删除了一個标簽,遠端也想要删除需要這樣操作:

git tag v1.0 -d

git push origin :refs/tags/v1.0

<a href="https://s5.51cto.com/wyfs02/M00/95/63/wKiom1kUc0uCsaVHAAAYZ8cJ9z4053.png" target="_blank"></a>

12. 巧用别名

1) git commit 這個指令是不是有點長? 用别名可以提高我們的工作效率,可以在配置檔案中修改/root/.gitconfig

git config --global alias.ci commit 

git config --global alias.co  checkout

git config --global alias.br  branch

2) 檢視git别名使用指令

git config --list |grep alias

3) 查詢log小技巧:

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

<a href="https://s4.51cto.com/wyfs02/M01/95/63/wKiom1kUc2Xy2BdrAAAPjn6iO44634.png" target="_blank"></a>

4) 取消别名

git config --global --unset alias.br

13. 搭建git伺服器

github畢竟是公開的,而私有倉庫又得花錢買。是以我們可以想辦法搭建一個私有的,隻自己公司使用的

1)yum install -y epel-reales

yum install -y git        //安裝git

useradd -s /usr/bin/git-shell git   //添加git使用者,并且設定shell為/usr/bin/git-shell,目的是為了不讓git使用者遠端登陸,如果要登入,則usermod -s /bin/bash git

2) cd /home/git

mkdir .ssh

touch .ssh/authorized_keys  //存放客戶機的公鑰

chown -R git.git .ssh

chmod 700 .ssh/authorized_keys

3)定好存儲git倉庫的目錄,比如 /data/gitroot

mkdir /data/gitroot

cd /data/gitroot

git init --bare sample.git // 會建立一個裸倉庫,裸倉庫沒有工作區,因為伺服器上的Git倉庫純粹是為了共享,是以不讓使用者直接登入到伺服器上去改工作區,并且伺服器上的Git倉庫通常都以.git結尾

chown -R git.git sample.git

用戶端上(自己pc)克隆遠端倉庫

以上操作是在git伺服器上做的,平時git伺服器是不需要開發人員登入修改代碼的,它僅僅是充當着一個伺服器的角色,就像github一樣,平時操作都是在我們自己的pc上做的。

1)把用戶端上的公鑰放到git伺服器上/home/git/.ssh/authorized_keys檔案裡

2)git clone git@ip:/data/gitroot/sample.git

<a href="https://s2.51cto.com/wyfs02/M00/95/62/wKioL1kUc4ywTi8qAAAkv1gwZwY397.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M01/95/63/wKiom1kUc4yzR_6aAABNlvAC54o645.png" target="_blank"></a>

此時就可以在目前目錄下生成一個sample的目錄,這個就是我們克隆的遠端倉庫了。進入到這裡面,可以開發一些代碼,然後push到遠端;還需結合git lab圖形化一起使用

本文轉自 huangzp168 51CTO部落格,原文連結:http://blog.51cto.com/huangzp/1924761,如需轉載請自行聯系原作者