版本控制
版本迭代,
版本控制( Revision control)是一種在開發(fā)的過程中用于管理我們對文件、目錄或工程等內(nèi)容的修改歷史,方便查看更改歷史記錄,備份以便恢復(fù)以前的版本的軟件工程技術(shù)。實現(xiàn)跨區(qū)域多人協(xié)同開發(fā)
追蹤和記載一個或者多個文件的歷史記錄組織和保護(hù)你的源代碼和文檔
統(tǒng)計工作量
并行開發(fā)、提高開發(fā)效率跟蹤記錄整個軟件的開發(fā)過程
減輕開發(fā)人員的負(fù)擔(dān),節(jié)省時間,同時降低人為錯誤沒有進(jìn)行版本控制或者版本控制本身缺乏正確的流程管理,在軟件開發(fā)過程中將會引入很多問題,如軟件代碼的一致性、軟件內(nèi)容的冗余、軟件過程的事物性、軟件開發(fā)過程中的并發(fā)性、軟件源代碼的安全性,以及軟件的整合等問題。
主流的版本控制軟件:
我們學(xué)習(xí)的東西,一定是當(dāng)下最流行的
Git
SVN( Subversion )
cvs ( concurrent Versions System )vss ( Micorosoft Visual SourceSafe )
TFS ( Team Foundation Server )
Visual Studio Online?????????
1、本地版本控制
記錄文件每次的更新,可以對每個版本做一個快照,或是記錄補丁文件,適合個人用,如RCS。
2、集中版本控制
所有的版本數(shù)據(jù)都保存在服務(wù)器上,協(xié)同開發(fā)者從服務(wù)器上同步更新或上傳自己的修改
所有的版本數(shù)據(jù)都存在服務(wù)器上,用戶的本地只有自己以前所同步的版本,如果不連網(wǎng)的話,用戶就看不到歷史版本,也無法切換版本驗證問題,或在不同分支工作。而且,所有數(shù)據(jù)都保存在單一的服務(wù)器上,有很大的風(fēng)險這個服務(wù)器會損壞,這樣就會丟失所有的數(shù)據(jù),當(dāng)然可以定期備份。代表產(chǎn)品:SVN、CVS、vSs
代碼全在中央服務(wù)器上,電腦必須聯(lián)網(wǎng)才能工作?
3、分布式版本控制Git
所有版本信息倉庫全部同步到本地的每個用戶,這樣就可以在本地查看所有版本歷史,可以離線在本地提交,只需在連網(wǎng)時push到相應(yīng)的服務(wù)器或其他用戶那里。由于每個用戶那里保存的都是所有的版本數(shù)據(jù),只要有一個用戶的設(shè)備沒有問題就可以恢復(fù)所有的數(shù)據(jù),但這增加了本地存儲空間的占用。
每個用戶都擁有全部的代碼。所以有的公司出于隱私還是用svn。
Git和SVN的區(qū)別
SVN是集中式版本控制系統(tǒng),版本庫是集中放在中央服務(wù)器的,而工作的時候,用的都是自己的電腦,所以首先要從中央服務(wù)器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服務(wù)器。集中式版本控制系統(tǒng)是必須聯(lián)網(wǎng)才能工作,對網(wǎng)絡(luò)帶寬要求較高。
Git是分布式版本控制系統(tǒng),沒有中央服務(wù)器,每個人的電腦就是一個完整的版本庫,工作的時候不需要聯(lián)網(wǎng)了,因為版本都在自己電腦上。協(xié)同的方法是這樣的∶比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。Git可以直接看到更新了哪些代碼和文件
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)。
Git環(huán)境配置
卸載
?先檢查環(huán)境變量path中有沒有和git相關(guān)的環(huán)境變量,如C:\Program Files\Git\cmd,給刪除掉。
然后打開控制面板,找到git,然后一鍵卸載掉。
下載安裝?
打開[git官網(wǎng)Git - Downloading Package,下載git對應(yīng)操作系統(tǒng)的版本win64位。
所有東西下載慢的話就可以去找鏡像!?
淘寶鏡像上下穩(wěn)定版的64為的:下載.exe文件
CNPM Binaries Mirror
安裝的時候:無腦下一步即可??蛇x安裝目錄,可選其默認(rèn)打開的文本編輯器。
安裝成功后就會發(fā)現(xiàn):win中,多了git bash(和linux語法相似)和git gui(圖形界面不建議使用)和git cmd(和windows語法相似)、
然后右鍵多了git bash here 和git gui here,環(huán)境變量中多了git的配置。
基本的linux命令學(xué)習(xí)
使用git bash需使用到linux命令:?
基本的Linux命令學(xué)習(xí)
1 ) 、cd:改變目錄。
2 ) 、cd ..回退到上一個目錄,直接cd進(jìn)入默認(rèn)目錄3 ) 、pwd:顯示當(dāng)前所在的目錄路徑。
4 ) 、ls(Il):都是列出當(dāng)前目錄中的所有文件,只不過ll(兩個Il列出的內(nèi)容更為詳細(xì)。5 ) 、touch:新建一個文件如touch index.js就會在當(dāng)前目錄下新建一個index.js文件。
6 ) 、rm:刪除一個文件, rm index.js 就會把index.js文件刪除。
7 ) 、mkdir:新建一個目錄,就是新建一個文件夾。-p允許多級目錄
8 ) . rm :遞歸刪除一個文件夾, rm -r src遞歸刪除src目錄? rm -rf 不用確認(rèn)直接遞歸移除,千萬別rm -rf /這樣會遞歸刪除所有東西格式化系統(tǒng)的,會刪除Linux根目錄下的所有文件,直接導(dǎo)致服務(wù)器癱瘓,刪庫犯法。
9 ) 、mv移動文件, mv index.html src index.html是我們要移動的文件, src是目標(biāo)文件夾,和目標(biāo)文件夾在同一目錄下。
10 ) 、reset重新初始化終端/清屏。11 ) . clear清屏。
12 ) 、 history查看命令歷史。13 ) . help 幫助。
14 ) .exit退出。15 )、#表示注釋
16)、ps查看進(jìn)程 ps -ef|grep redis? ? kill -9 pid關(guān)閉進(jìn)程
git的必要配置
git config -l? ?當(dāng)前項目下關(guān)于git的所有配置,一般就是本機配置
kongdeyi@DESKTOP-TJP7C4E MINGW64 ~/Desktop/gitcode
$ git config -l
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
user.name=kongdeyi
user.email=2138991631@qq.com
http.sslverify=false
git config --system --list? ?查看系統(tǒng)配置,就沒有了下面的用戶配置了
kongdeyi@DESKTOP-TJP7C4E MINGW64 ~/Desktop/gitcode
$ git config --system --list
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
http.sslbackend=openssl
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
core.autocrlf=true
core.fscache=true
core.symlinks=false
pull.rebase=false
credential.helper=manager
credential.https://dev.azure.com.usehttppath=true
init.defaultbranch=master
?git config --global --list本地配置,用戶自己配的,下面的用戶名和emial是必須配置的。
kongdeyi@DESKTOP-TJP7C4E MINGW64 ~/Desktop/gitcode
$ git config --global --list
user.name=kongdeyi
user.email=2138991631@qq.com
http.sslverify=false
Git相關(guān)的配置文件:
1 ) 、C:\Program Files\Git\etc\gitconfig : Git安裝目錄下的gitconfig--system系統(tǒng)級
2 )、C:\Users\kongdeyi\.gitconfig只適用于當(dāng)前登錄用戶的配置--global全局這里可以直接編輯配置文件,通過命令設(shè)置后會響應(yīng)到這里。
設(shè)置用戶名與郵箱
(用戶標(biāo)識,必要) 不設(shè)置提交不上項目
kongdeyi@DESKTOP-TJP7C4E MINGW64 ~/Desktop/gitcode
$ git config --global user.name "kongdeyi"
kongdeyi@DESKTOP-TJP7C4E MINGW64 ~/Desktop/gitcode
$ git config --global user.email "3284514536@qq.com"
git的工作原理
工作區(qū)域
Git本地有三個工作區(qū)域∶工作目錄(Working Directory )、暫存區(qū)(Stage/Index)、資源庫(Repository或Git Directory)。如果在加上遠(yuǎn)程的git倉庫(Remote Directory)就可以分為四個工作區(qū)域。文件在這四個區(qū)域之間的轉(zhuǎn)換關(guān)系如下︰
Workspace :工作區(qū),就是你平時存放項目代碼的地方,如idea的項目的目錄
Index / Stage:暫存區(qū),用于臨時存放你的改動,事實上它只是一個文件,index文件,保存即將提交到文件列表信息,實際上看不到
Repository :倉庫區(qū)(或本地倉庫),就是安全存放數(shù)據(jù)的位置,這里面有你提交到所有版本的數(shù)據(jù)。其中HEAD指向最新放入倉庫的版本。git項目的隱藏文件夾.git文件夾中有個HEAD文件,打開如下,里面ref執(zhí)行主分支master:。一般不會在主分支里面做。ref: refs/heads/master
Remote:遠(yuǎn)程倉庫,托管代碼的服務(wù)器,可以簡單的認(rèn)為是你項目組中的一臺電腦用于遠(yuǎn)程數(shù)據(jù)交換
git的工作流程一般是這樣的:
1、在工作目錄中添加、修改文件;如修改UserMapper.xml
2、將需要進(jìn)行版本管理的文件放入暫存區(qū)域;? git add .? ?add點代表將所有的文件放入暫存區(qū)
3、將暫存區(qū)域的文件提交到git倉庫。git commit4、一般還要推到遠(yuǎn)程倉庫。
git項目創(chuàng)建及克隆
工作目錄(WorkSpace)一般就是你希望Git幫助你管理的文件夾,可以是你項目的目錄,也可以是一個空目錄,建議不要有中文。
日常使用只要記住下圖6個命令∶
創(chuàng)建本地倉庫
創(chuàng)建本地倉庫的方法有兩種:一種是創(chuàng)建全新的倉庫,另一種是克隆遠(yuǎn)程倉庫。?
創(chuàng)建全新的倉庫
初始化git:
創(chuàng)建一個目錄C:\Users\kongdeyi\Desktop\gitcode目錄,進(jìn)入目錄右鍵git bash here ,然后git init,該目錄下就會創(chuàng)建一個.git的文件夾
克隆遠(yuǎn)程倉庫
無論是到github還是gitee里面的某個倉庫都會有一個clone的地,可拷貝他的https的clone的地址。
我們C:\Users\kongdeyi\Desktop\gitcode目錄,進(jìn)入目錄右鍵git bash here ,然后git clone https://github.com/2138991631qq/PharmacySystem.git? 。下載下后,就會在該文件夾中多了一個PharmacySystem文件夾,點進(jìn)去有.git目錄個工作文件,就是克隆了地址倉庫中的內(nèi)容。使用github速度慢的可下一個fastgithub如下:
FastGithub 下載_陽光明媚UPUP的博客-CSDN博客
git的基本操作命令
git文件操作
文件4種狀態(tài)
- 版本控制就是對文件的版本控制,要對文件進(jìn)行修改、提交等操作,首先要知道文件當(dāng)前在什么狀態(tài),不然可能會提交了現(xiàn)在還不想提交的文件,或者要提交的文件沒提交上。
- Untracked:剛新建的文件是這個狀態(tài),未跟蹤,此文件在文件夾中,但并沒有加入到git庫,不參與版本控制.通過git add狀態(tài)變?yōu)閟taged
- Unmodify:上一步git add后臺,文件已經(jīng)入庫,未修改,即版本庫中的文件快照內(nèi)容與文件夾中完全一致.這種類型的文件有兩種去處,如果它被修改,而變?yōu)镸odified .如果使用git rm移出版本庫,則成為untracked文件
- Modified:文件已修改,僅僅是修改,并沒有進(jìn)行其他的操作.這個文件也有兩個去處,通過git add可進(jìn)入暫存staged狀態(tài),使用git checkout則丟棄修改過,返回到unmodify狀態(tài),這個 git checkout即從庫中取出文件,覆蓋當(dāng)前修改
- Staged:暫存狀態(tài).執(zhí)行git commit則將修改同步到庫中,這時庫中的文件和本地文件又變?yōu)橐恢?,文件為unmodify狀態(tài).執(zhí)行g(shù)it reset HEAD filename取消暫存,文件狀態(tài)為Modified
操作命令
C:\Users\kongdeyi\Desktop\gitcode目錄下,剛剛執(zhí)行了git init,創(chuàng)建了本地倉庫,刪除除.git文件夾外的東西,我們本目錄創(chuàng)建一個a.txt文件夾,也可touch的方式創(chuàng)建,然后執(zhí)行g(shù)it status給出了a.txt未放入庫中的提示,我們git add .? 然后git status ,給出可以提交的提示,然后git commit -m "消息"? ?提交后。再git status,就提示沒有要提交的內(nèi)容了。
kongdeyi@DESKTOP-TJP7C4E MINGW64 ~/Desktop/gitcode (master)
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
a.txt
nothing added to commit but untracked files present (use "git add" to track)
kongdeyi@DESKTOP-TJP7C4E MINGW64 ~/Desktop/gitcode (master)
$ git add .
kongdeyi@DESKTOP-TJP7C4E MINGW64 ~/Desktop/gitcode (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: a.txt
kongdeyi@DESKTOP-TJP7C4E MINGW64 ~/Desktop/gitcode (master)
$ git commit -m "提交a.txt文件"
[master (root-commit) e45954b] 提交a.txt文件
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a.txt
kongdeyi@DESKTOP-TJP7C4E MINGW64 ~/Desktop/gitcode (master)
$ git status
On branch master
nothing to commit, working tree clean
cd [文件夾]
git branch
git branch dev1 //創(chuàng)建新分支
git switch dev1 //切換到dev1分支
git push? ? 提交到當(dāng)前分支
git push origin [分支名]? ?提交到指定分支
忽略文件
有些時候我們不想把某些文件納入版本控制中,比如數(shù)據(jù)庫文件,臨時文件,設(shè)計文件等在主目錄下建立".gitignore"文件,此文件有如下規(guī)則∶
1.忽略文件中的空行或以井號(# )開始的行將會被忽略。
2可以使用Linux通配符。例如∶星號(*)代表任意多個字符,問號(﹖)代表一個字符,方括號([abc])代表可選字符范圍,大括號( {string1,string2,.…})代表可選的字符串等。
3.如果名稱的最前面有一個感嘆號(!),表示例外規(guī)則,將不被忽略。
4.如果名稱的最前面是一個路徑分隔符(/ ),表示要忽略的文件在此目錄下,而子目錄中的文件不忽略。
5.如果名稱的最后面是一個路徑分隔符(/),表示要忽略的是此目錄下該名稱的子目錄,而非文件(默認(rèn)文件或目錄都忽略)。
#為注釋
*.txt#忽略所有.txt結(jié)尾的文件,這樣的話上傳就不會被選中!
!lib.txt? ?#但lib.txt除外
/temp? ?#僅忽略項目根目錄下的TODO文件,不包括其它目錄temp
build/? ? #忽略build/目錄下的所有文件
doc/*.txt? ?#會忽略 doc/notes.txt但不包括doc /server/arch.txt
idea中項目的.gitignore可用下面這套配置
*.class
*.log
*.lock
# Package Files #
*.jar
*.war
*.ear
target/
#idea
.idea/
*.iml
*velocity.log*
### STS ###
.apt_generated
.factorypath
.springBeans
###Tntel1iDeA“
*.iml
*.ipr
*.iws
.idea
.classpath
.project
.settings/
bin/
*.1og
tmp/
#rebel
*rebel.xml*
碼云的注冊和使用
github是有墻的,比較慢,在國內(nèi)的話,我們一般使用gitee,公司中有時候會搭建自己的gitlab服務(wù)器
Gitee - 企業(yè)級 DevOps 研發(fā)效能平臺
1、注冊,登錄,創(chuàng)建倉庫,設(shè)置倉庫為私有或開源,從github上導(dǎo)入倉庫、修改個人信息等這個操作先做一做。????????
配置SSH公鑰及創(chuàng)建遠(yuǎn)程倉庫
2、設(shè)置本機綁定SSH公鑰,實現(xiàn)免密碼登錄!(免密碼登錄,這一步挺重要的,碼云是遠(yuǎn)程倉庫,我們是平時工作在本地倉庫! )
#進(jìn)入C: \users\Administrator\.ssh目錄
#生成公鑰
ssh-keygen
操作如下:?
點擊賬號設(shè)置,里面有個ssh公鑰。
我們進(jìn)到電腦用戶目錄下,有個.ssh文件夾:
C:\Users\kongdeyi\.ssh
該目錄下右鍵git bash here,然后執(zhí)行ssh-keygen,也可執(zhí)行ssh-keygen -t rsa,-t為加密, rsa為使用官方推薦的rsa加密算法進(jìn)行加密。然后一路回車下去。
kongdeyi@DESKTOP-TJP7C4E MINGW64 ~/.ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/kongdeyi/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/kongdeyi/.ssh/id_rsa
Your public key has been saved in /c/Users/kongdeyi/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:DmCfOW7dtgzH5Tn+34G65qZkGJQurFLSRKmTVrK9ruw kongdeyi@DESKTOP-TJP7C4E
The key's randomart image is:
+---[RSA 3072]----+
| .. |
| ..o . |
| B.o o |
| *oo.ooo |
|...o.o*oS . |
| o....=oo o .. |
| ... o.+o= +. . |
|. .. . o= =.. o|
|.E. .B+o...o|
+----[SHA256]-----+
生成完后,C:\Users\kongdeyi\.ssh該目錄下就會多了id_rsa文件和id_rsa.pub文件。
3、將公鑰信息public key添加到碼云賬戶中即可!
我們打開C:\Users\kongdeyi\.ssh目錄下的id_rsa.pub文件,這個pub是公鑰,打開后復(fù)制里面的公鑰到gitee上用戶設(shè)置中的ssh中的公鑰文本框中,點擊下面的確定輸入驗證的用戶密碼即可添加成功。
4、使用碼云創(chuàng)建一個自己的倉庫!
點擊導(dǎo)航欄上方的加號即可新建一個倉庫
5、克隆倉庫到本地
點進(jìn)某個倉庫,點擊復(fù)制https地址,然后在git bash中使用git clone即可:
私有倉庫多人協(xié)調(diào)開發(fā)
點擊管理->倉庫成員管理->開發(fā)者,邀請后審核通過即可一起開發(fā)了。
使用Idea集成Git
1、遠(yuǎn)程倉庫克隆下來的項目想使用直接全部復(fù)制到一個新項目中:
idea創(chuàng)建一個project,選springboot的項目,名叫g(shù)it-xuexi,放到上面的gitcode目錄下吧。
本gitcode目錄下還有我們剛剛拉取的PharmacySystem倉庫項目的文件夾。
我們直接將PharmacySystem文件夾中的內(nèi)容全部選中拷貝到git-xuexi目錄中,也就是新創(chuàng)建的springboot項目中,然后回到idea中,發(fā)現(xiàn)左側(cè)項目文件顏色變成紅色代表被git選中的狀態(tài),黑色的代表被git忽略的文件或文件夾,綠色代表提交了的文件或文件夾。
2、可點擊左側(cè)欄的commit提交相應(yīng)文件,當(dāng)我們修改了某個文件,該文件就變藍(lán)色了,我們可右擊該文件,然后git add,再次右擊該文件git commit即可提交。也可在下方的terminal中輸入git add . 和git commit -m "提交"來提交到本地庫。
3、在下方的git按鈕中可看到提交記錄等信息。
4、可右擊項目名位置,git->repository->push,然后選擇文件和分支提交遠(yuǎn)程倉庫。
也可在下方ternimal中g(shù)it push的方提交:
git push? ? 提交到當(dāng)前分支
git push origin [分支名]? ?提交到指定分支
Git的分支
不同的分支,不同的作用
分支在GIT中相對較難,分支就是科幻電影里面的平行宇宙,如果兩個平行宇宙互不干擾,那對現(xiàn)在的你也沒啥影響。不過,在某個時間點,兩個平行宇宙合并了,我們就需要處理一些問題了!
git分支中常用指令︰
# 列出所有本地分支
git branch
#列出所有遠(yuǎn)程分支git branch -r
#新建一個分支,但依然停留在當(dāng)前分支
git branch [branch-name]
git switch dev1 //切換到dev1分支
#新建一個分支,并切換到該分支
git checkout -b [branch]
git push? ? 提交到當(dāng)前分支
git push origin [分支名]? ?提交到指定分支
# 合并指定分支到當(dāng)前分支git merge [branch]
#刪除分支
git branch -d [branch-name]
#刪除遠(yuǎn)程分支
git push origin --delete [branch-name]git branch -dr [remote/branch]
多個分支如果并行執(zhí)行,就會導(dǎo)致我們代碼不沖突,也就是同時存在多個版本!
但如果出現(xiàn)兩個人修改了同一個分支的同一個文件。
web-api? -A( Restful.xx() )
web-admin? -B會調(diào)用A(修改了A的代碼!)web-app? -C會調(diào)用B和A的代碼
如果了沖突了就需要協(xié)商即可!
如果同一個文件在合并分支時都被修改了則會引起沖突∶解決的辦法是我們可以修改沖突文件后重新提交Ⅰ選擇要保留他的代碼還是你的代碼!
master主分支應(yīng)該非常穩(wěn)定,用來發(fā)布新版本,一般情況下不允許在上面工作,工作一般情況下在新建的dev分支上工作,工作完后,比如上要發(fā)布,或者說dev分支代碼穩(wěn)定后可以合并到主分支master上來。
idea中右擊項目名git->repository-branches也可checkout或merge合并
注意:?
master主分支應(yīng)該非常穩(wěn)定,用來發(fā)布新版本,一般情況下不允許在上面工作,工作一般情況下在新建的dev分支上工作,工作完后,比如上要發(fā)布,或者說dev分支代碼穩(wěn)定后可以合并到主分支master上來。
git后續(xù)說明
碼云上最下方導(dǎo)航欄如https://gitee.com/kongdeyi123/官網(wǎng)上有給git大全:Git 大全 - Gitee.com文章來源:http://www.zghlxwxcb.cn/news/detail-698869.html
里面有各種git資料和git命令大全文章來源地址http://www.zghlxwxcb.cn/news/detail-698869.html
到了這里,關(guān)于Git的基本使用筆記——狂神說的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!