前言:面試過(guò)程中,很可能問(wèn)及一些關(guān)于版本控制的問(wèn)題捐下,認(rèn)真的理解下SVN和Git的原理,記住常用命令即可。
SVN
- SVN是集中式源代碼管理工具
概念:
1> Repository 代碼倉(cāng)庫(kù)蹂午,保存代碼的倉(cāng)庫(kù)
2> Server 服務(wù)器,保存所有版本的代碼倉(cāng)庫(kù)
3> Client 只保存當(dāng)前用戶(hù)的代碼倉(cāng)庫(kù)
4> 用戶(hù)名&密碼 訪問(wèn)代碼庫(kù)需要使用自己的"用戶(hù)名和密碼"梭灿,從而可以區(qū)分出不同的人對(duì)代碼的修改画侣。
操作:
1> checkout 將服務(wù)器上最新的代碼倉(cāng)庫(kù)下載到本地,"只需要一次"
2> update 從服務(wù)器上將其他人所做的修改下載到本地"每天上班必須要做的事情"
3> commit 將工作提交到服務(wù)器
- SVN服務(wù)器安裝(略)
-
SVN常用命令
切換工作目錄
$ cd 工作目錄
checkout 服務(wù)器上的代碼倉(cāng)庫(kù)
$ svn co http://xxx/svn/xxxx --username=manager --password=manager
提示:checkout(co)之后堡妒,命令行會(huì)記錄用戶(hù)名和密碼配乱,后續(xù)操作不用在另行指定
**查看本地代碼庫(kù)狀態(tài)**
$svn st
錯(cuò)誤提示:"is not a working copy",必須在svn的工作目錄下才能正確使用svn的命令。
查看svn日志
$ svn log
查看某一個(gè)文件的日志
$ svn log filename
查看某一個(gè)文件某個(gè)版本的日志
$ svn log filename@1
**創(chuàng)建文件**
$ touch main.c
打開(kāi)并編寫(xiě)文件內(nèi)容
$ open main.c
**查看工作目錄狀態(tài)**
$ svn st
將文件添加到本地版本庫(kù)中
$ svn add main.c/main.*
將文件提交到服務(wù)器的版本庫(kù)中
$ svn ci -m "備注信息"
注意:一定要養(yǎng)成寫(xiě)注釋的良好習(xí)慣
刪除文件
$ svn rm Person.h
提交刪除
$ svn ci -m "刪除了文件"
注意:不要使用文件管理器直接刪除文件
**撤銷(xiāo)修改**
$ svn revert Person.m
恢復(fù)到之前的某個(gè)版本
$ svn update -r 5
**沖突解決**
(p)postpone 對(duì)比
(mc)mine-conflict 使用我的
(tc)theirs-conflict 使用對(duì)方的
svn st 顯示文件狀態(tài)
' ' 沒(méi)有修改
'A' 被添加到本地代碼倉(cāng)庫(kù)
'C' 沖突
'D' 被刪除
'I' 被忽略
'M' 被修改
'R' 被替換
'X' 外部定義創(chuàng)建的版本目錄
'?' 文件沒(méi)有被添加到本地版本庫(kù)內(nèi)
'!' 文件丟失或者不完整(不是通過(guò)svn命令刪除的文件)
'~' 受控文件被其他文件阻隔
Git
- git是一款開(kāi)源的分布式版本控制工具
$ git help
查看git所有命令的幫助
$ git help 子命令
要退出幫助信息皮迟,按"q"
翻看下頁(yè)搬泥,按"空格"
翻看上頁(yè),按"CTRL+B"
要搜索相關(guān)文字伏尼,按"/"相關(guān)文字"
創(chuàng)建代碼倉(cāng)庫(kù)
$ git init
配置用戶(hù)名和郵箱
$ git config user.name manager
$ git config user.email manager@gmail.com
以上兩個(gè)命令會(huì)將用戶(hù)信息保存在當(dāng)前代碼倉(cāng)庫(kù)中
如果要一次性配置完成可以使用以下命令
$ git config --global user.name manager
$ git config --global user.email manager@gmail.com
以上兩個(gè)命令會(huì)將用戶(hù)信息保存在用戶(hù)目錄下的 .gitconfig 文件中
查看當(dāng)前所有配置
$ git config -1
創(chuàng)建代碼忿檩,開(kāi)始開(kāi)發(fā)
$ touch main.c
$ open main.c
將代碼添加到代碼庫(kù)
查看當(dāng)前代碼庫(kù)狀態(tài)
$ git status
將文件添加到代碼庫(kù)
$ git add main.c
將修改提交到代碼庫(kù)
$ git commit -m "添加了main.c"
在此一定要使用 -m 參數(shù)指定修改的備注信息
否則會(huì)進(jìn)入 vim 編譯器, 如果對(duì)vim不熟悉爆阶,會(huì)是很糟糕的事
將當(dāng)前文件夾下的所有新建或者修改的文件一次性添加到代碼庫(kù)
$ git add .
添加多個(gè)文件
$ touch Person.h Person.m
$ git add .
$ git commit -m "添加了Person類(lèi)"
$ open Person.h
$ git add .
$ git commit -m "增加Perso類(lèi)屬性"
注意:使用git時(shí)燥透,每一次修改都需要添加再提交,這一點(diǎn)是與svn不一樣的
查看所有版本庫(kù)日志
$ git log
查看指定文件的版本庫(kù)日志
$ git log 文件名
回到當(dāng)前版本辨图,放棄有沒(méi)有提交的修改
$ git reset --hard HEAD
回到上一個(gè)版本
$ git reset --hard HEAD^
回到之前第3個(gè)修訂版本
$ git reset --hard HEAD~3
回到指定版本號(hào)的版本
$ git reset --hard e695b67
查看分支引用記錄
$ git reflog
為什莫要用源代碼管理工具
- 能追蹤一個(gè)項(xiàng)目從誕生一直到定案的過(guò)程
- 記錄一個(gè)項(xiàng)目的所有內(nèi)容變化
- 方便查閱特定版本的修訂情況
最常使用的版本控制工具是什莫班套,能大概講講原理嗎?
- 最常用的版本控制工具有SourceTree(Git)和CornerStone(SVN);
- 原理提到svn是集中式代碼管理故河,解釋下具體意思吱韭,git也這樣回答即可。
- 集中式代碼管理(svn)的核心是服務(wù)器鱼的,所有開(kāi)發(fā)者在開(kāi)始新的工作之前必須從服務(wù)器獲取代碼理盆,然后開(kāi)發(fā)痘煤,最后解決沖突,提交猿规。所有版本信息都放在服務(wù)器上衷快。如果脫離了服務(wù)器,開(kāi)發(fā)者基本上可以說(shuō)是無(wú)法工作的坎拐。
- 分布式的版本控制系統(tǒng)烦磁,在Git中并不存在主庫(kù)這樣的概念,每一份出的庫(kù)都可以獨(dú)立使用哼勇,任何兩個(gè)庫(kù)之間的不一致之處都可以進(jìn)行合并都伪。