git的介紹、git的功能特性、git工作流程、git 過濾文件、git多分支管理、遠程倉庫、把路飛項目傳到遠程倉庫(非空的)、ssh鏈接遠程倉庫,協同開發

Git(讀音為/gɪt/)是一個開源的分佈式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理。 [1] 也是Linus Torvalds為了幫助管理Linux內核開發而開發的一個開放源碼的版本控制軟件。

分佈式相比於集中式的最大區別在於開發者可以提交到本地,每個開發者通過克隆(git clone),在本地機器上拷貝一個完整的Git倉庫。

git的功能特性

從一般開發者的角度來看,git有以下功能:
    1、從服務器上克隆完整的Git倉庫(包括代碼和版本信息)到單機上。
    2、在自己的機器上根據不同的開發目的,創建分支,修改代碼。
    3、在單機上自己創建的分支上提交代碼。
    4、在單機上合併分支。
    5、把服務器上最新版的代碼fetch下來,然後跟自己的主分支合併。
    6、生成補丁(patch),把補丁發送給主開發者。
    7、看主開發者的反饋,如果主開發者發現兩個一般開發者之間有衝突(他們之間可以合作解決的衝突),就會要求他們先解決衝突,然後再由其中一個人提交。如果主開發者可以自己解決,或者沒有衝突,就通過。
    8、一般開發者之間解決衝突的方法,開發者之間可以使用pull 命令解決衝突,解決完衝突之後再向主開發者提交補丁。

從主開發者的角度(假設主開發者不用開發代碼)看,git有以下功能:
    1、查看郵件或者通過其它方式查看一般開發者的提交狀態。
    2、打上補丁,解決衝突(可以自己解決,也可以要求開發者之間解決以後再重新提交,如果是開源項目,還要決定哪些補丁有用,哪些不用)。
    3、向公共服務器提交結果,然後通知所有開發人員。

git工作流程

image

'''有三個區'''
    -工作區:代碼,文件存放的位置,新增,修改,刪除文件,代碼
    -暫存區:把工作區的更改提交到暫存區
    -版本庫:把暫存區的數據,提交到版本庫

'''工作流程'''
    1 只要被git管理了,只要文件發生變化(新增,刪除,修改),使用git就能看到它變成紅色了
    2 工作區的變更,要提交到暫存區,變綠色了
    3 從暫存區提交到版本庫,才會被版本管理,一旦被版本管理了,後期可以回退到某個版本
    4 可以把版本庫的內容,提交到遠程倉庫,統一管理起來【所有開發者都可以提交】
    5 本地可以拉去遠程的代碼
    6 本地可以把本地代碼提交到遠程

'''注意點'''
    1)有紅色信息(工作區有內容),就執行 add 
    2)全綠信息(內容全部在暫存區),才執行 commit
    3)只有被版本庫控制的代碼,才能被監聽,所以可以回滾到任何一個版本

git常用命令

初始化倉庫:(文件夾中)—>出現 .git 隱藏文件夾

git init 倉庫名  # 在當前文件夾再創建一個文件夾作為倉庫
git init        #當前文件夾就是倉庫,就會被管理

image

查看狀態

git status  # 發現沒有紅,綠,說明,當前倉庫下所有文件都已經被管理了,並且沒有變化

image

把工作區變更提交到暫存區

git add .  # 把工作區所有更改都提交到暫存區

git add 文件名  # 把工作區當前文件的更改都提交到暫存區

image

把暫存區所有內容提交到版本庫

git commit -m '注釋內容'

git status --->沒有顏色

image
發現提交不了,需要設置用戶

配置用戶信息【如果局部沒有,使用全局,如果全局也沒有,會報錯】

# 全局配置--->針對於所有倉庫---> C:\Users\用戶文件夾\.gitconfig新建用戶信息,在所有倉庫下都可以使用C:\Users\oldboy\.gitconfig中寫入了
  git config --global user.email "[email protected]"
  git config --global user.name "zhangran"

# 局部配置--->只針對於當前倉庫-->當前倉庫.git文件夾下的config中
  git config  user.email "[email protected]"
  git config  user.name "zr"

查看版本管理信息

查看當前版本及當前版本之前的版本:git log

查看所有版本,不管是否回退:git reflog

'''git log 和git reflog的區別:'''
    git log 命令可以顯示所有提交過的版本信息如果感覺太繁瑣,可以加上參數  --pretty=oneline,只會顯示版本號和提交時的備註信息git reflog 可以查看所有分支的所有操作記錄(包括已經被刪除的 commit 記錄和 reset 的操作)# git reset --hard,--mix,--soft的區別hard (硬)-> 全部刪除,會徹底返回到回退前的版本狀態,了無痕迹mixed (中)-> 保留工作目錄,文件回退到未commit的狀態soft (軟)-> 保留工作目錄、暫存區 ,文件會回退到未 add(未到暫存)的狀態總結:soft是撤銷commit的提交,但工作區未提交的更改還是保留;mixed是撤銷暫存區的提交,工作區的更改同樣也保留;而hard是把工作區、暫存區、commit到倉庫的三個版本都回滾了

image
把工作區回退到某個版本

git reset  --hard  版本號(重點)

image
可以在返回到原來的版本
image

把當前工作區的更改(不包含新增,包含修改和刪除),回退回去

git checkout .  # 當前所有的更改都回退,不包含新增的文件

由綠變紅(把暫存區拉回到工作區)

回退到前一百個版本:git reset -hard HEAD~100

回退到上一個版本:git reset --hard HEAD^

回退到上上一個版本:git reset --hard HEAD^^

回退到具體的版本:git reset --hard 版本號

image
指定開發者日誌

git log --author author_name

git reflog --author author_name

查看時間點之前|之後的日誌

git log --after 2018-6-1
git log --before 2018-6-1
git reflog --after 2018-6-1
git reflog --before 2018-6-1

git 過濾文件

以後項目中,有些文件[.pyc],文件夾[node_modules][.idea],不需要被版本管理的,咱們就要忽略它

忽略步驟,在倉庫中新建 .gitignore [沒有任何後綴名],在文件中配置

1)在倉庫根目錄下創建該文件
2)文件與文件夾均可以被過濾
3)文件過濾語法

""" 
過濾文件內容:
	文件或文件夾名:代表所有目錄下的同名文件或文件夾都被過濾
	/文件或文件夾名:代表倉庫根目錄下的文件或文件夾被過濾

	eg:
	a.txt:項目中所有a.txt文件和文件夾都會被過濾
	/a.txt:項目中只有根目錄下a.txt文件和文件夾會被過濾
	/b/a.txt:項目中只有根目錄下的b文件夾下的a.txt文件和文件夾會被過濾
	*x*:名字中有一個x的都會被過濾(*代表0~n個任意字符)
	空文件夾不會被提交,空包會被提交,包可以被提交(包中有一個init空文件)
"""

git多分支管理

分支:通過分支,更方便協同開發,管理版本

1)查看分支:

git branch  # * 和綠色表示你當前所在的分支,查看本地分支

image

2)創建:

git branch dev

image

3)切換分支:

git checkout dev

image

4)刪除分支

git branch -d dev  # 在其他分支上才能刪它

5)合併分支:【可能會有衝突】

要把dev合併到master上
回到master上,開始執行代碼
git merge dev

6 )查看遠程分支:【後面會講】

git branch -a

遠程倉庫

1)新建一個遠程倉庫
image
2)創建好一個空的倉庫
image

image
3)把本地代碼,上傳到遠程倉庫,本地倉庫,已經有版本管理了,遠程有倉庫,是空的

本地有倉庫,已經有版本管理了,遠程有倉庫,是空的
設置用戶名和郵箱--(如果不按照它顯示的設置,在右側貢獻者看到別人頭像)
    git config --global user.name "liuqingzheng"
    git config --global user.email "[email protected]"

4)已有倉庫

-新增一個遠程倉庫
    git remote add origin //gitee.com/zhang_xiao_ran/zxr.git

-把本地代碼推上去
    git push  origin master  # 把本地的主分支推到origin對應的遠程分支

-第一次推,需要輸入gitee的賬號和密碼

-以後不需要輸入用戶名密碼了
    -憑證管理,可以刪除,可以修改

image

image

把路飛項目傳到遠程倉庫(非空的)

1)創建遠程倉庫luffy_api—【非空】
image

image

2)git clone //gitee.com/zhang_xiao_ran/luffy_api.git # 把遠程倉庫內容克隆到本地

image

3)把我們項目的代碼,copy到 luffy_api這個文件夾下(.git文件夾不要copy)
4)git add .
5)git commit -m 『初始化倉庫』
6)git push origin master

以後,完成了項目的某個功能就要執行下面的命令,以後你在公司中得開發提交步驟

-git add .
-git commit -m '完成了xx功能,修改了xx文件' # 提交到了本地倉庫

每次提交【推到遠端】代碼之前,要拉取一下代碼---》沒事你就拉去一下,保證本地的版本庫一直跟遠端保存一樣----以後衝突會變少
    -git pull origin master
-git push origin master  # 把本地的mater分支推送到遠端origin對應的地址-【可能推不上去】
如果推不上去,說明本地不是最新版本,一定下拉去一下,成了最新版本再去提交

ssh鏈接遠程倉庫,協同開發

1)本地倉庫和遠程倉庫建立關係時,建立的是https的鏈接,公司一般用ssh的鏈接

2)https和ssh的區別

https:輸入用戶名密碼,保存在憑據管理中

ssh:配置公鑰私鑰
        -生成公鑰私鑰
        -把公鑰放到gitee上
        -配好遠程倉庫,以後直接提交,不需要輸入任何秘鑰的東西

3)ssh的配置步驟

按照這個步驟操作://gitee.com/help/articles/4181
cmd命令行中,一路回車,會在【C:\Users\oldboy\.ssh】文件夾下生成公鑰和私鑰
        ssh-keygen -t ed25519 -C "[email protected]" 
生成一個公鑰,一個私鑰
        id_ed25519  #私鑰,千萬不能泄露
        id_ed25519.pub #公鑰,可以給任何人

把公鑰配置在gitee的配置文件中

到此,你的機器和gitee互相上傳下載代碼,都不要認證了

image

image

image

image

4)以後使用:免密了

先刪除origin 對應的https的鏈接:git remote remove origin

查看一下,沒有了:git remote

配置成ssh的地址
     git remote add origin [email protected]:zhang_xiao_ran/luffy_api.git


以後直接拉去,提交代碼即可
    git pull origin master
    git push origin master
Tags: