一、簡述SVN與GIT區別
SVN:集中式 GIT:分佈式
1.SVN:
(1)特點:所有的歷史版本都是在中央服務器端上建立的,本地客戶端只是一個開發的環境,開發完需要推到服務器上生成歷史版本,需要回退到某個版本,也需要從中央服務器上拉取
(2)缺點:必須連接上中央服務器纔可以(必須連網)
(3)工作示意圖
2.GIT
(1)概念:所謂分佈式,就是每個開發者的本地客戶端都是一個完整的倉庫,都能記錄歷史版本信息
(2)特點:可以不需要連網,我們也能生成版本記錄,也可以快速回退到某個版本
(3)工作示意圖
3.SVN與GIT區別
(1)集中式只能在中央服務器上記錄版本信息,也只能在中央服務器拉取或回退某個版本的信息,這樣的前提必須要保證客戶端與中央服務器保持連接,必須要連網,而分佈式它是把每一個客戶端都作爲一個全新的單獨的倉庫,在本地客戶點就可以完成版本的創建和回退,可以不需要中央服務器,當然團隊合作需要中央服務器,把所有人的信息集中到中央服務器上,只要把中央服務器的最新版本拉取到本地,想看就可以直接看或回退版本,他不需要連網
(2)Git是按照源數據(文件流)來實現文件傳輸的,而svn是按照文件傳輸的,所以GIT比svn更快
二、常用指令
注:GIT是linux團隊開發的,所以git中的命令大部分都是linux命令
1.先安裝GitHub
(1)下載:https://git-scm.com/downloads
(2)安裝時默認下一步即可
(3)完成安裝,檢查是否按照成功有兩個方法:
可輸入git --version
檢查版本信息
或者
桌面有鍵看是否有 (如圖紅色框的顯示),有即可安裝成功
2.基於命令來完成GIT管理
基礎命令
如何配置名字、eamil?
$git config --gloabal user,name 'xxx'
//設置名字
$git config --gloabal user.eamil 'xxx'
//郵箱
ls -l或者ls -a
:查看文件目錄
-l: 查看當前目錄結構 -a:是可以看見所有的:包含隱藏的
cd xxx[路徑地址]
:進入到指定的文件中(進入的地址可以到對應的操作命令窗口中)
cd / :表示根目錄 cd ./ :切換到當前目錄 cd ../ :切換到上級目錄
clear
:清屏
mkdir
:創建文件夾
mkdir text //創建text文件
touch
:創建空文件 再用vi插入
touch 1.js 創建了1.js文件
vi
:向文件中插入或者管理一些內容,再按 i
=>進入到插入模式。
ESC+ :WQ
:退出內容的插入模式,把剛纔的編輯的內容進行保存 ESC+ :q!
: 強制退出,當前內容不保存
(一般vi,i ,ESC(就是鍵盤上的esc退出鍵),:wq或者:q都是連用的,因爲vi就是插入一些內容,i是插入模式,在插入模式下才可以輸入內容,插入完成後就會保存,退出)
舉例:如vi 1.js 回車 再按i 顯示--插入模式-- 然後寫點東西 let a=12; let b=13;conslog(a); 再然後保存:按 i 後 再按esc(退出插入模式)再輸入:wq(保存並退出)
echo
:向指定的文件中輸入(插入)內容,也會順便創建文件
(特點:會覆蓋 重複輸入她只保存最新的一條信息)
語法:echo xxx > xxx.txt 或者 echo xxx>>xxx.txt
如:echo 哈哈哈 >2.js //把哈哈哈輸入到2.js裏面
cat
:查看文件中的內容
想查看1.js的內容 :輸入 cat 1.js 即可
rm
:刪除文件或者文件夾
-r 遞歸刪除 -f 強制刪除
,一旦刪除無法還原
rm *
:刪除所有
rm *.js
:刪除所有的js
rm node_module -rf
: //刪除node_module,因爲裏面有很多文件 所以-r 還可以強制刪除,就-rf
cp
: 拷貝
高級命令
$git init
:創建GIT倉庫
$git add -A 或者git add .
:把當前工作區修改的內容全部提交到暫存區(可以指定具體提交的文件 $ git add xxx.js)
$ git commit -m'寫版本備註'
:把暫存區中的內容提交到歷史區,生成一個歷史版本(我們需要寫備註信息,聲明當前版本的特點)
$ git status
查看當前修改的文件處於哪一個區域 查看版本,對比信息(情況如下:)
紅色:工作區
綠色:暫存區
看不見:已經提交到歷史區,三區保持一致了
$git rm --cached xxx.xx
:刪除當中的某一個
$ git rm --cached . -r
:撤銷暫存區中所有提交的
(如果刪除過程中,發現從暫存區刪除的文件,在工作區已經被修改了,只有加上 -f 才能強制從暫存區把內容刪除掉)
$git checkout xxx.xx
:提交到暫存區一份,把工作區內容改了,但是改的東西不好,想把暫存區上次提交的內容撤銷回到工作區(覆蓋工作區新寫的內容)
特點:暫存區內容沒有消息,只是把工作區最新修改的信息給覆蓋了,讓工作區和暫存區保持一致
$git diff <file>
:查看文件DIFF
(比較當前文件與暫存區的文件差異)
git diff 1.js //比較1.js的不同
git checkout .
:代碼回滾 (把暫存區內容回滾到工作區(一旦回滾,工作區內容無法恢復))
git reset HEAD .
:把當前暫存區的內容回滾到生一個暫存區,目的是爲了把上一個暫存區內容回滾到工作區
git reset --hard 版本號
:在歷史區中間退到某個版本(強制把暫存區和工作區都變回退後的版本)
history > xxx.txt
:把歷史操作步驟輸出
git log
查看提交記錄
git reflog
查看所有的歷史記錄(包括歷史區回滾後)
git commit
提交到歷史區
git commit -m'xxx'
提交到歷史區
三、GitHub的基礎工作流程及命令
我們都知道每一個GIT倉庫都有三個區:
工作區:寫代碼
暫存區:臨時存放每一次修改的代碼。但是並沒有生成歷史版本
歷史區:存放所有歷史版本的地方
那麼工作流程到底是怎麼樣的呢,從無到有的過程 如下:
基本流程:
1)首先創建中央倉庫:
打開github官網,登錄後,先create repository(創建新倉庫)
完成創建,如果是新創建的庫,可以先使用一下命令先創建個非空倉庫(目的是保證:中央倉庫有一個master分支)
echo "# mytest" >> README.md //添加個記錄
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/MNLNG/mytest.git
git push -u origin master
如果已經有中央倉庫了那就不用上述操作直接克隆下來就行
2)創建客戶端本地倉庫也就是克隆中央倉庫的代碼:
$git clone "遠程倉庫地址" "本地倉庫文件夾名字
:(不寫默認是·倉庫名字)"
如 $ git clone https://github.com/xxx/2020xxx.git TEST
下面是一個客戶端從克隆代碼到添加文件,提交,修改,上傳到中央倉庫的完整過程
(1).先克隆 兩個客戶端 A 、B
git clone https://github.com/zhufengpeixun/201802TEST.git TESTA
git clone https://github.com/zhufengpeixun/201802TEST.git TESTB
(2)再在TESTA裏面創建文件及內容1.txt TESTB裏面創建文件及內容2.txt
(3)cd 到對應客戶端目錄
cd TESTA
(4)提交客戶端創建的文件
提交前先添加文件
git add .
然後提交
git commit -m'我是A客戶端 創建1.txt'
可以查看一下版本
$git log
(5)然後推送,推送前先pull一下
git pull origin master
然後再提交到遠程上
git push origin master
(6)各自和中央服務器同步信息
git pull origin master
好了完成哦,是不是很簡單,哈哈!
四、提交時可忽略的文件
如##dependencies
/node_modules
##testing
/coverage
##production
/build
##misc
.DS_Store
.env.local .env.development
.env.test .local
.local .env.production .local
npm-debug.log*
yran-debug.log*
yran-error.log*
.idea
五、團隊協作和分支管理
一般在團隊中,小項目可能都會採用無分支管理模式,比較簡單,其實一般一個分支的管理就足夠了,不過也有公司大項目使用多分支來管理,那麼就這些情況做一些解析
分支指的是歷史區的分支:創建分支就是創建不同的線路,來管理歷史版本
(一)無分支管理模式
1.每天工作模式:
第一先pull
下來,如果有衝突先處理,然後再把文件add ,commit
,再pull 和push
(這裏的命令我忽略了 git …的縮寫,執行時自己加上就行)
2解決衝突
-非同一行衝突:在提示的衝突命令中同意即可ESC :wq
(按下ENTER鍵即可),如果本地和中央的想要保留中央的那就esc :q強制退出
-同一行衝突:
把想要的保留下來:嘗試合併失敗,我們需要手動把代碼進行合併然後再重新提交
不想保存下來那就esc :q強制退出保留中央倉庫的代碼
(二)單獨分支模式
1.正常的開發和提交,但是所有的操作都是在自己的分支上
2.把自己本地的分支中的內容,合併到自己本地master分支上
$git stash
//暫存文件 (分支由更改,不能直接切換分支,需要把修改的內容暫存),
$git checkout master
//切換到master分上
$git stash pop
//還原暫時存儲的內容
$git merge dev
//把dev分支合併到master分支上(有衝突就按照之前的衝突規則修改)
注:這些操作是當工作區和暫存區還沒有提交到歷史版本時,我們實現分支切換防止信息丟失我們先用git stash暫時把他存起來,切換到master時再git stash pop 把之前的暫存的數據還原回來,再把dev 分支合併到master分支上,如果已經提交歷史版本,那就不需要暫存,可以直接合並
合併:如果當前是在master分支上寫下git merge dev //代表dev合併到master分支上
如果當前在dev分支上,寫上git merge dev1 //代表dev1合併到dev分支上
2.創建分支到合併分支的步驟
在創建之前先看看當前存在的分支
$git branch
查看當前存在的分支
- master "*"代表當前在哪個分支上
上圖代表有兩個分支
(1)先創建分支
git branch dev
創建一個叫做dev的分支
(特點:創建新分支完成,會把本地的master分支中的內容同步到dev分支上)
git checkout dev
切換到dev分支上
git checkout -b dev
創建並切換到這個分支
(2)完成分支後,提交推送到中央倉庫
git add . -》git commit -m’備註’ -》git pull origin master -》git push origin master
(3)然後再切換分支,暫存(stash),合併(merge)
先切換到master分支上再合併
$git checkout master
//切換到master分上
$git stash pop
//還原暫時存儲的內容
$git merge dev
//把dev分支合併到master分支上
如一些衝突
解決思路:先按 esc :wq 再重新push