代碼管理工具git的使用教程

代碼管理工具git

1、git的概念

git:是一個代碼協同管理工具
是一個開源分佈式版本控制系統,可用於高效的管理大小項目,05年創造的,由林納斯(linux之父)發明的

用的最多的兩種管理工具:svn、git

代碼管理工具的分類

分佈式和集中式

分佈式:每一個結點都保存完整的代碼,沒有統一的中央服務器,節點之間相互推送下載代碼完成代碼共享,例如git
集中式:代碼集中管理,每次完成的代碼上傳到中央管理器,然後再統一從中央管理器中下載代碼使用,例如svn

SVN(Subversion)是集中式版本控制系統,版本庫是集中放在中央服務器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央服務器哪裏得到最新的版本,然後幹活,幹完後,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作,如果在局域網還可以,帶寬夠大,速度夠快,如果在互聯網下,如果網速慢的話,就鬱悶了。
下圖就是標準的集中式版本控制工具管理方式:
在這裏插入圖片描述
集中管理方式在一定程度上看到其他開發人員在幹什麼,而管理員也可以很輕鬆掌握每個人的開發權限。
但是相較於其優點而言,集中式版本控制工具缺點很明顯:
服務器單點故障
容錯性差

Git是分佈式版本控制系統,那麼它就沒有中央服務器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因爲版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。
下圖就是分佈式版本控制工具管理方式:
在這裏插入圖片描述

代碼管理工具的作用:

防止代碼丟失,可以做備份
代碼版本的管理,可以進行多個版本之間的跳躍
可以方便的將代碼在多人之間進行共享傳輸
多人開發時,有各種模式可以方便代碼管理

git的特點

git可以管理各種文件,特別是代碼項目,多在linux和unix系統中使用
是分佈式管理,不同於集中式,這是git和svn的核心區別
git可以很好的支持分支,方便多人協作工作
git分佈式代碼更加安全,有全球唯一的commit版本號
git是開源的軟件
使用git可以脫網工作,且數據傳輸速度較快

2、git工作流程

一般工作流程如下:
1.從遠程倉庫中克隆 Git 資源作爲本地倉庫。
2.從本地倉庫中checkout代碼然後進行代碼修改
3.在提交前先將代碼提交到暫存區。
4.提交修改。提交到本地倉庫。本地倉庫中保存修改的各個歷史版本。
5.在修改完成後,需要和團隊成員共享代碼時,可以將代碼push到遠程倉庫。
下圖展示了 Git 的工作流程:
在這裏插入圖片描述

3、git的安裝

在ubuntu下安裝

sudo apt-get install git

也可以到git官網進行下載 https://git-scm.com/downloads
安裝完畢後,終端輸入git命令,顯示結果如下 表示安裝成功
在這裏插入圖片描述

4、git的配置

4.1、 三種配置級別

1、系統中所有的用戶都可以使用該配置

git config --system 配置信息

配置文件是:/etc/gitconfig

2、當前用戶可使用該配置

git config --global 配置信息

配置文件是:~/.gitconfig

3、當前項目可使用該配置

git config

配置文件是:當前項目下的 ./.git/config

4.2、配置信息(必須配置用戶名和郵箱否則無法使用)

(1)配置用戶名

git config --system user.name lzx

(2)配置郵箱

git config --global user.email lan.tian.lu@qq.com

(3)配置編輯器

git config core.editor vim
    注意:在配置當前項目級別的配置信息時,
    需要先初始化本地倉庫git init

(4)查看當前所有的配置信息

git config --list

在這裏插入圖片描述

5、基本操作

5.1、初始化倉庫

(1)git的四個區域

在這裏插入圖片描述
在這裏插入圖片描述
工作區:就是項目所在的目錄
暫存區:如果項目中的文件想備份或者進行其他操作,需要將指定的文件先保存在暫存區
本地倉庫:本地倉庫是真正保存備份或者其他操作文件的區域,只能被當前項目所在的目錄使用
遠程倉庫:如果想將某一個項目與其他主機進行共享或者傳遞,需要使用遠程倉庫

(2)初始化本地倉庫

git init 

注意:

必須在項目所在的目錄裏面執行此命令
在某個目錄下初始化倉庫後會自動產生.git目錄,當前目錄下工作的所有文檔可使用git進行管理

在這裏插入圖片描述

5.2、 查看區域狀態

git status 

注意:
會顯示與暫存區或者本地倉庫中保存的不一樣的文件,提示是否要進行備份

5.3、將指定的文件提交到暫存區

git add <文件名> 	            將指定文件(任意文件類型的文件)提交到暫存區
git add *  		            將當前目錄下所有的文件提交到暫存區

注意,提交到暫存區的文件沒有存放在本地倉庫中
git rm --cache <文件名> 刪除暫存區的指定文件

5.4、將暫存區的文件提交到本地倉庫

git commit -m <提交說明>         將文件同步到本地倉庫並且設置提示說明

注意:
一般提示時需要附加一些同步信息,在-m後添加
所有對工作區的修改,如果想同步到倉庫,都需要執行當前命令(add --> commit)

5.5、查看commit日誌

git log                         查看所有cimmit日誌
git log --pretty=oneline        查看單行日誌

5.6、比本地文件和本地倉庫中文件的區別

git diff <文件名>  

如輸入命令沒有反應 則說明本地文件和本地倉庫中的文件沒區別

6、恢復操作

6.1、從本地倉庫恢復本地文件

git checkout <文件名>  

6.2、丟棄工作區的修改

git checkout -- <文件名>    丟棄本地指定文件中的已經修改的內容(--兩邊都有空格)

6.3、本地倉庫文件的移動和刪除

git mv <源文件> <目的目錄>   在本地倉庫中將源文件移動目的目錄中(本地也會移動)
git rm <文件名>              在本地倉庫中刪除指定的文件(本地也會刪除)

注意:移動和刪除後,需要再次執行git commit

6.4、回到上一個版本

git reset --hard HEAD^ 

HEAD後面的^數量決定了回到上幾個版本

6.5、回到指定的版本

git reset --hard <commit_id> 

只需要commit id的前七位即可

6.6、查看所有的歷史版本

git reflog 

最新的操作始終在最上邊

7、標籤管理(版本管理)

7.1、什麼是標籤

在當前工作的位置添加快照,保存工作狀態,一般用於版本的迭代

7.2、創建標籤

git tag <標籤名稱>                 創建標籤
git tag <標籤名稱> -m <提示信息>    創建標籤並設置提示信息
例如:git tag v1.0
默認是在最新的commit id處創建標籤	

也可以指定commit id 創建標籤
git tag <標籤名稱> <commit id>      指定某一個commit id處創建標籤

7.3、查看標籤

git tag 

7.4、刪除標籤

git tag -d <標籤名稱>  

7.5、查看指定標籤的具體信息

git show <標籤名稱>  

7.6、恢復到指定標籤的位置

git reset --hard <標籤名稱> 

8、臨時工作區操作

一個功能實現的時候可能有很多種方法,可以通過臨時工作區保存不同的方法,然後在選擇合適的臨時工作區作爲想要使用的方法
如果要使用臨時工作區,在本地工作區寫完的方法不要備份,而是直接保存在臨時工作區中,本地工作區中的文件還是初始的狀態,這樣又可以寫第二種方法,以此類推,最終在所有的方法中選擇最優的,從臨時工作區中取出代碼即可

8.1、創建保存臨時工作區

git stash 

8.2、查看臨時工作區

git stash  list 

8.3、使用指定的工作區

git stash apply stash@{編號}  

8.4、使用最新的臨時工作區並刪除

git stash pop 

如果打開的是較早版本的代碼則不能使用該指令,需要先提交到本地工作區後在執行該命令(保證工作區是乾淨的)
使用git stash pop後還要提交到本地工作區
git add * //提交到暫存區
git commit -m <提交說明>

8.5、刪除指定的臨時工作區

git stash drop stash@{編號} 

8.6、刪除所有的臨時工作區

git stash clear 

9、分支操作

9.1、什麼是分支

分支主要用於多人協作工作,分支即獲取原有代碼,在此基礎上創建自己的工作環境,單獨開發,不會影響其他分支的操作,開發完成後再統一合併到主線分支中

創建分支的好處:安全,不影響其他人工作

9.2、分支分類

project(項目庫)
     master(主線分支)				//代碼管理員
          hotfix(線上緊急bug修復分支)
     develop(開發分支)
          feature(功能分支)			//普通碼農在此分支
          release(發佈分支) 
               bugfix(bug修復分支)	//測試工程師在此分支

在這裏插入圖片描述

(1)長期分支

1)master:主線分支

記錄項目主線版本的開發迭代過程,該分支是已發佈的穩定的產品版本。
master分支的權限由版本管理員統一進行管理,除版本管理員外,其他任何人不允許向master分支合併代碼。
其他分支需要向master分支合併代碼時,首先提出合併請求,然後由版本管理員合併到master分支,合併後,版本管理員應立即添加版本號,發佈隨時可用的產品版本;每向master分支合併一次,產品版本號就會增加一次

2)develop開發分支

記錄所有開發人員日常工作的成果,該分支是相對穩定的開發版本
develop分支的合併操作由研發主管和版本管理員共同管理,不允許開發人員將自己的代碼直接合併到develop分支,也不允許開發人員在develop分支上直接進行開發工作,一經發現嚴肅處理

一個項目庫只能有一個master分支和一個develop分支
項目庫創建後,由版本管理員從master分支創建develop分支,項目組所有成員需要克隆服務器上的項目庫到本地,然後再從develop分支創建自己的feature分支進行工作

(2)短期分支

項目庫中存在的短期分支有:feature、release、bugfix和hotfix。

1)feature:功能分支

    用於開發新的功能;
    所有新功能的開發都要先創建feature分支,然後再進行開發工作,feature分支由開發人員從develop分支創建
    不同的功能需創建不同的feature分支

2)release:發佈分支

    用於產品發佈準備;
    新功能開發完成後需要發佈產品新版本時,要創建release分支進行發佈準備,release分支由版本管理員從develop分支創建

3)bugfix:bug修復分支

    用於修復不緊急的bug;
    系統測試過程中發現bug,開發人員需要從release分支創建bugfix分支進行修改,不允許開發人員在release分支上直接修改bug

4)hotfix:線上緊急bug修復分支

    用於修復產品發佈後出現的緊急bug
    產品上線後,在客戶現場出現問題,需要馬上解決時,由開發人員從master分支創建hotfix分支進行緊急修復

9.3、查看當前分支

git branch 

注意:前面有*的分支表示當前正在工作的分支

9.4、創建一個分支(默認在主分支創建)

git branch <分支名稱> 

9.5、切換工作分支

git checkout <分支名稱> 

9.6、創建並切換到新的分支

git checkout -b <分支名稱> 

主要用於在創建的分支基礎上在創建分支

9.7、將指定的分支合併到當前分支

倉庫管理員在主分支,收到其它分支程序猿的合併請求後
倉庫管理員在主分支上使用此命令合併到主分支來
每合併一次要使用
git add * //提交到暫存區
git commit -m <提交說明> //提交到倉庫
一次

git merge <分支名稱> 

合併過程中如果沒有衝突,直接合並後當前分支即爲乾淨的狀態,直接保存在本地倉庫中
如果產生衝突,需要人爲的選擇,然後在進行add和commit的操作
在創建分支前,儘量保證當前分支是幹靜的,以減少衝突的發生

9.8、刪除指定的分支

git branch -d < 分支名稱> 

注意:
如果刪除的分支沒有合併,是不能用當前命令刪除的
使用-D刪除,表示強制刪除指定分支

10、遠程倉庫

10.1、什麼是遠程倉庫

遠程倉庫可以共享倉庫中的項目,可以被其他主機接收到

10.2、創建遠程倉庫

(1)創建文件夾

mkdir <目錄名>

(2)設置文件夾的屬主(不設置也可以)

chown <用戶名>:<組名> <目錄名>

(3)將該文件夾設置爲共享倉庫

git init --bare <項目名稱> 
                (項目名稱一般都是以.git結尾)

(4)設置遠程倉庫的屬主

chown -R <用戶名>:<組名> <項目名稱>

10.3、添加遠程倉庫

git remote add <倉庫名稱> <用戶名>@<ip地址>:<共享倉庫的絕對路徑>

注意:
默認使用ssh作爲傳輸手段,倉庫名稱可以任意起名字
必須在本地的某個git倉庫下執行,才能是本地倉庫和遠程倉庫關聯

10.4、刪除遠程倉庫

git remote rm <倉庫名稱>

10.5、將本地倉庫的文件推送到遠程倉庫

git push -u <倉庫名稱> <要推送的分支>

注意:第一次推送需要加-u,以後不需要
注意:需要使用ssh協議纔可以上傳本地倉庫的文件到遠程倉庫
按照ssh:sudo apt-get install openssh-server
重啓ssh:sudo service ssh restart

10.6、從遠程倉庫獲取項目

git clone <用戶名>@<ip地址>:<共享倉庫的絕對路徑>

10.7、從遠程倉庫拉取分支或者代碼,可以更新代碼

git pull <遠程倉庫名> <遠程分支名>  拉取遠程倉庫指定的分支並且與當前分支合併
git pull <遠程倉庫名> <遠程分支名>:<本地分支名>  不合並

10.8、代碼推送和更新

git push 將本地倉庫的文件推送到遠程倉庫
git pull 從遠程倉庫中更新代碼
git fetch 也用於更新,但是如果有新的分支不會合並 

10.9、本地舊覆蓋遠程新

git push --force <遠程倉庫名>  當本地比遠程舊,用本地覆蓋遠程

11、github

11.1、什麼是github

是一個網站,本質就是一個遠程倉庫,全球最大的開源社區網站
開發者可以註冊賬號建立自己的github倉庫,就可以在本地通過git操作遠程github倉庫
git是github唯一的代碼管理工具
github裏面創建的倉庫相當於就是遠程倉庫

github中所有的項目,包括別人的,都是開源的,所以自己推送項目時也需要是開源的

11.2、創建新的倉庫

(1)點擊右上角加號,選擇New repository
(2)設置倉庫名和說明信息,設置爲公有的倉庫,
設置readme(可以不設置),下面兩個都默認就行,
點擊Creating repository創建新的倉庫

11.3、上傳本地倉庫的項目到遠程github倉庫

(1)方法1:使用http協議

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

(2)方法2:使用ssh協議

1)在本地主機生成ssh密鑰

ssh-keygen

注意:
必須獲取當前主機的祕鑰並設置到gihub,否則無法與github進行連接和操作
默認的祕鑰存放在 ~/.ssh目錄下
生成過程提示設置密碼,如果不設置可以直接回車

ubuntu安裝ssh服務器:
	sudo apt-get install openssh-server

2)複製祕鑰
進入~/.ssh目錄,複製id_rsa.pub公鑰的內容
3)設置祕鑰
登錄github賬號,選擇右上角圖片中的settings,然後點擊SSH and GPG key,點擊new ssh key,title隨便設置,將剛纔複製的祕鑰粘貼到key中,然後點擊add ssh key,設置成功

設置後只能通過ssh協議上傳

4)上傳文件時不需要輸入密碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章