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工作流程
'''有三個區'''
-工作區:代碼,文件存放的位置,新增,修改,刪除文件,代碼
-暫存區:把工作區的更改提交到暫存區
-版本庫:把暫存區的數據,提交到版本庫
'''工作流程'''
1 只要被git管理了,只要文件發生變化(新增,刪除,修改),使用git就能看到它變成紅色了
2 工作區的變更,要提交到暫存區,變綠色了
3 從暫存區提交到版本庫,才會被版本管理,一旦被版本管理了,後期可以回退到某個版本
4 可以把版本庫的內容,提交到遠程倉庫,統一管理起來【所有開發者都可以提交】
5 本地可以拉去遠程的代碼
6 本地可以把本地代碼提交到遠程
'''注意點'''
1)有紅色信息(工作區有內容),就執行 add
2)全綠信息(內容全部在暫存區),才執行 commit
3)只有被版本庫控制的代碼,才能被監聽,所以可以回滾到任何一個版本
git常用命令
初始化倉庫:(文件夾中)—>出現 .git 隱藏文件夾
git init 倉庫名 # 在當前文件夾再創建一個文件夾作為倉庫
git init #當前文件夾就是倉庫,就會被管理
查看狀態
git status # 發現沒有紅,綠,說明,當前倉庫下所有文件都已經被管理了,並且沒有變化
把工作區變更提交到暫存區
git add . # 把工作區所有更改都提交到暫存區
git add 文件名 # 把工作區當前文件的更改都提交到暫存區
把暫存區所有內容提交到版本庫
git commit -m '注釋內容'
git status --->沒有顏色
發現提交不了,需要設置用戶
配置用戶信息【如果局部沒有,使用全局,如果全局也沒有,會報錯】
# 全局配置--->針對於所有倉庫---> 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到倉庫的三個版本都回滾了
把工作區回退到某個版本
git reset --hard 版本號(重點)
可以在返回到原來的版本
把當前工作區的更改(不包含新增,包含修改和刪除),回退回去
git checkout . # 當前所有的更改都回退,不包含新增的文件
由綠變紅(把暫存區拉回到工作區)
回退到前一百個版本:git reset -hard HEAD~100
回退到上一個版本:git reset --hard HEAD^
回退到上上一個版本:git reset --hard HEAD^^
回退到具體的版本:git reset --hard 版本號
指定開發者日誌
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 # * 和綠色表示你當前所在的分支,查看本地分支
2)創建:
git branch dev
3)切換分支:
git checkout dev
4)刪除分支
git branch -d dev # 在其他分支上才能刪它
5)合併分支:【可能會有衝突】
要把dev合併到master上
回到master上,開始執行代碼
git merge dev
6 )查看遠程分支:【後面會講】
git branch -a
遠程倉庫
1)新建一個遠程倉庫
2)創建好一個空的倉庫
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的賬號和密碼
-以後不需要輸入用戶名密碼了
-憑證管理,可以刪除,可以修改
把路飛項目傳到遠程倉庫(非空的)
1)創建遠程倉庫luffy_api—【非空】
2)git clone //gitee.com/zhang_xiao_ran/luffy_api.git # 把遠程倉庫內容克隆到本地
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互相上傳下載代碼,都不要認證了
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