1. 程式人生 > >分布式代碼管理系統Git

分布式代碼管理系統Git

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]"

技術分享


2. 創建版本庫

mkdir /home/gitroot

cd /home/gitroot

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

技術分享


3. 提交文件到倉庫

1)echo -e "123\naaa\n456\nbbb" > 2.txt //創建一個文件 2.txt


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


3)git commit -m "add new file 2.txt" //add完了必須要commit才算真正把文件提交到git倉庫裏,自定義描述

技術分享


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


2)git status //查看當前倉庫中的狀態,比如是否有改動的文件

技術分享


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

技術分享

4)git status //修改了2.txt文件之後,查看狀態;提示可以提交或者放棄更改

技術分享


5)git checkout -- 2.txt //放棄修改或恢復刪除,再次查看內容不發生改變

技術分享


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

技術分享

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

技術分享


4. 結合日誌版本回退

1)echo -e "eee\nfff">>2.txt //修改多提交第一次

git add 2.txt

git commit -m "change once 2.txt"


2)echo -e "ggg\nhhh">>2.txt //修改多提交第二次

git add 2.txt

git commit -m "change twice 2.txt"


3)git log //可以查看所有提交git倉庫的記錄操作

技術分享


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

技術分享


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

技術分享


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

技術分享


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文件被刪除了

技術分享


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


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

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

技術分享



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

1)https://github.com 註冊一個賬號,創建自己的git

點repositories --> new(名字自定義,比如叫studygit)->選擇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 //初始化

git remote add origin [email protected]:huangzp-silen/studygit.git //本地的study倉庫和遠程study聯系在一起


b. echo "test,test,test">test.txt //在本地倉庫目錄中創建一個文件並提交

git add test.txt

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

技術分享


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

技術分享


d. github中查看,已推送成功

技術分享


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

技術分享


f. 克隆一個遠程倉庫

A. cd /home

git clone [email protected]:aminglinux/lanmp.git //克隆一個遠程倉庫至本地目錄

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 remote add origin [email protected]:huangzp-silen/lanmp.git //同步關聯

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



8. 分支管理

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

1)git branch //查看分支

git branch silen //創建分支

git checkout silen //切換分支,星號標識

技術分享


2)在silen分支下 ,編輯2.txt,並提交到新分支

echo "silen">silen.txt

git add silen.txt

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

git checkout master //切換回master分支,查看文件,並沒發現silen.txt

技術分享


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

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

git merge silen //把silen分支合並到了master,只更新源分支(silen)文件的內容,目標分支(master)就算改動了也不會變,一般不會更改master分支

技術分享


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


4)刪除分支

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

git branch -D aming //強制刪除分支,即刪除前不合並內容,會丟失數據

技術分享


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 //保存一下現場,該文件影藏掉

技術分享


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

git stash list //查看保存過的現場

git stash apply //恢復現場,文件顯示回來

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

技術分享


10. 遠程分支

1)在web上,可以進行分支的創建、切換、刪除、恢復等操作

技術分享技術分享

2)查看遠程庫信息,使用git remote -v,查看到origin名字, 本地新建的分支如果不推送到遠程,對其他人就是不可見的

技術分享


通過名字origin命令,查看遠程分支 git ls-remote origin

技術分享


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

技術分享

技術分享

4)給遠程master分支推送文件

技術分享


web端同步文件

技術分享


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

cat .git/config //查看配置文件,得出遠程URL,以供克隆使用

技術分享


rm -rf studygit/

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

技術分享


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

git checkout -b dev2 origin/dev2

技術分享


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



11. 標簽管理

標簽類似於快照功能,我們可以給版本庫打一個標簽,記錄某個時刻庫的狀態。我們可以隨時恢復到該狀態

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

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

git tag //查看所有的標簽

git show v1.0 //顯示詳細信息

技術分享

技術分享

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 //可以對標簽進行描述

技術分享


3)git tag -d v0.8 //刪除標簽

技術分享


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

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

技術分享

技術分享

5)如果本地刪除了一個標簽,遠程也想要刪除需要這樣操作:

git tag v1.0 -d

git push origin :refs/tags/v1.0

技術分享


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)<%an>%Creset‘ --abbrev-commit"

技術分享


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 [email protected]:/data/gitroot/sample.git

技術分享

技術分享

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


本文出自 “一馬踏平川” 博客,轉載請與作者聯系!

分布式代碼管理系統Git