前言
開發(fā)這幾年來勇蝙,基本都是用的svn客戶端管理來管理代碼,用過 Versions 和 CornerStone 沫勿,很少用命令行,對svn的命令掌握的也不全味混。我覺得要想在開發(fā)這條路上走的更遠产雹,熟練的用命令行來管理代碼是最基本的技能。用svn命令行管理代碼并不復(fù)雜翁锡,很容易學(xué)習(xí)蔓挖,熟練之后會覺得比圖形化工具還方便,因為只用鍵盤就可以操作馆衔。最主要是還可以提高逼格瘟判。我覺得十分有必要抽一點時間系統(tǒng)的學(xué)習(xí)一下svn的常用命令怨绣。
創(chuàng)建一個本地SVN倉庫
為了方便演示svn命令,又不想用自己公司的服務(wù)器荒适,可以先搭建一個本地svn服務(wù)器梨熙。打開終端輸入命令:
delimss-MacBook-Pro:~ delims$ svnadmin create ~/svnserver/
delimss-MacBook-Pro:~ delims$
svnadmin create [PATH] 是在本地創(chuàng)建一個倉庫,此時控制臺沒有任何輸出刀诬,我們看看這個目標(biāo)下生成的文件
delimss-MacBook-Pro:~ delims$ cd ~/svnserver/
delimss-MacBook-Pro:svnserver delims$ ls
README.txt db hooks
conf format locks
可以看到生成了一堆文件和文件夾,conf文件夾里包含了倉庫的配置信息
看下里面有什么
delimss-MacBook-Pro:svnserver delims$ cd conf/
delimss-MacBook-Pro:conf delims$ ls
authz hooks-env.tmpl passwd svnserve.conf
可以看到conf文件夾里包含了4個文件
文件 | 說明 |
---|---|
svnserve.conf | 守護進程配置文件 |
authz | 保存了用戶名和權(quán)限 |
passwd | 保存了用戶名的密碼 |
hooks-env.tmpl | 鉤子腳本環(huán)境配置文件 |
這幾個配置文件邪财,有用的代碼都是被注釋掉的陕壹,我們需要手動修改一下,主要是刪除注釋符號#树埠,其次也會適當(dāng)做些修改糠馆,修改如下:
svnserve.conf
修改前 | 修改后 | 說明 |
---|---|---|
[general] # anon-access = read # auth-access = write # password-db = passwd # authz-db = authz |
[general] anon-access = none auth-access = write password-db = passwd authz-db = authz |
anon-access 代表匿名訪問權(quán)限 賦值給none表示不允許匿名訪問 注意:#后面有一個空格也要刪除 |
authz
修改前 | 修改后 | 說明 |
---|---|---|
[groups] # harry_and_sally = harry,sally # [/foo/bar] # harry = rw # * = r |
[groups] harry_and_sally = harry,sally [/] &harry_and_sally = rw * = r |
修改這三行,即創(chuàng)建兩個用戶并組成 一個group怎憋,并給予此group所有成員 根目錄的讀寫權(quán)限 |
passwd
修改前 | 修改后 | 說明 |
---|---|---|
[users] # harry = harryssecret # sally = sallyssecret |
[users] harry = 123 sally = 123 |
設(shè)置用戶密碼又碌,只是用來演示, 我們就設(shè)置一個簡單的吧 |
啟動本地svn服務(wù)器
配置好以后绊袋,我們就啟動服務(wù)器毕匀,鍵入命令:
delimss-MacBook-Pro:conf delims$ svnserve -d -r ~/svnserver/
delimss-MacBook-Pro:conf delims$ ps -e | grep svn
974 ?? 0:00.00 /Applications/Xcode.app/Contents/Developer/usr/bin/svnserve -d -r /Users/delims/svnserver/
977 ttys000 0:00.00 grep svn
此時可以看到成功開啟了svnserve進程,還可以發(fā)現(xiàn)svnserve工具是包含在Xcode中的癌别,不得不感嘆皂岔,Xcode真是一個百寶囊。
我們隨便找個目錄把我們本地svn服務(wù)器上的倉庫拉下來
delimss-MacBook-Pro:temp delims$ svn co svn://localhost
Authentication realm: <svn://localhost:3690> 7a441335-b969-42c4-aa80-56391f894982
Password for 'delims': ***** //輸入macOS用戶密碼
Authentication realm: <svn://localhost:3690> 7a441335-b969-42c4-aa80-56391f894982
Username: harry //剛才配置的用戶名harry
Password for 'harry': *** //輸入我們配置的簡單密碼123
Checked out revision 0. //成功檢出展姐,版本號為 0
可以看到成功檢出了我們本地服務(wù)器的倉庫并放在了本地躁垛。。圾笨。
svn命令行操作
我們先來添加一個文件并提交到服務(wù)器
delimss-MacBook-Pro:temp delims$ echo 1 > 1.txt //添加一個文件
delimss-MacBook-Pro:temp delims$ ls
1.txt //文件添加了
delimss-MacBook-Pro:temp delims$ svn st
? 1.txt //可以看到此文件的狀態(tài)是教馆?,也就是還沒有加入到版本控制
delimss-MacBook-Pro:temp delims$ svn add 1.txt //加入到版本控制
A 1.txt //狀態(tài)變?yōu)锳擂达,表示已經(jīng)加入到了版本控制
//提交到服務(wù)器土铺,并添加注釋
delimss-MacBook-Pro:temp delims$ svn ci 1.txt -m "提交第一個文件"
Adding 1.txt
Transmitting file data .done
Committing transaction...
Committed revision 1. //已成功上傳到服務(wù)器,版本號+1
為了更好的演示谍婉,我將AFNetworking的源碼放到根目錄
delimss-MacBook-Pro:temp delims$ ls
1.txt AFNetworking
delimss-MacBook-Pro:temp delims$ svn st
? AFNetworking //可以看到AFNetworking還沒有加入版本控制
delimss-MacBook-Pro:temp delims$ svn add AFNetworking/ \\添加上
這句命令執(zhí)行完會顯示有大量的被添加記錄舒憾,下面提交到服務(wù)器
delimss-MacBook-Pro:temp delims$ svn ci AFNetworking -m "添加AFNetworking"
這句命令執(zhí)行完后,最后面會顯示穗熬,說明一已經(jīng)成功上傳到服務(wù)器镀迂,版本號是2
Transmitting file data ..................................................................................................................................................................................................................................done
Committing transaction...
Committed revision 2.
delimss-MacBook-Pro:temp delims$ svn st //查看狀態(tài),沒有任何輸出唤蔗,表示當(dāng)前沒有文件變動
delimss-MacBook-Pro:temp delims$ svn info //查看當(dāng)前svn信息探遵,發(fā)現(xiàn)版本號依然是0
Path: .
Working Copy Root Path: /Users/delims/temp
URL: svn://localhost
Relative URL: ^/
Repository Root: svn://localhost
Repository UUID: 7a441335-b969-42c4-aa80-56391f894982
Revision: 0
Node Kind: directory
Schedule: normal
Last Changed Rev: 0
Last Changed Date: 2018-08-17 09:59:13 +0800 (Fri, 17 Aug 2018)
更新一下代碼
delimss-MacBook-Pro:temp delims$ svn update //更新一下svn
Updating '.':
At revision 2.
delimss-MacBook-Pro:temp delims$ svn info
Path: .
Working Copy Root Path: /Users/delims/temp
URL: svn://localhost
Relative URL: ^/
Repository Root: svn://localhost
Repository UUID: 7a441335-b969-42c4-aa80-56391f894982
Revision: 2
Node Kind: directory
Schedule: normal
Last Changed Author: harry
Last Changed Rev: 2
Last Changed Date: 2018-08-17 12:55:56 +0800 (Fri, 17 Aug 2018)
查看一下svn 提交記錄
delimss-MacBook-Pro:temp delims$ svn log
------------------------------------------------------------------------
r2 | harry | 2018-08-17 12:55:56 +0800 (Fri, 17 Aug 2018) | 1 line
添加AFNetworking
------------------------------------------------------------------------
r1 | harry | 2018-08-17 11:44:12 +0800 (Fri, 17 Aug 2018) | 1 line
提交第一個文件
------------------------------------------------------------------------
PS: 這個命令是查看當(dāng)前倉庫所有文件的所有提交記錄窟赏,如果只是查看某個文件的記錄就這樣
delimss-MacBook-Pro:temp delims$ svn log 1.txt
------------------------------------------------------------------------
r1 | harry | 2018-08-17 11:44:12 +0800 (Fri, 17 Aug 2018) | 1 line
提交第一個文件
------------------------------------------------------------------------
如果只查看最近的幾條記錄就這樣
delimss-MacBook-Pro:temp delims$ svn log -l 1 //查看最近的1條記錄
------------------------------------------------------------------------
r2 | harry | 2018-08-17 12:55:56 +0800 (Fri, 17 Aug 2018) | 1 line
添加AFNetworking
------------------------------------------------------------------------
當(dāng)前版本是2,如果我要回到版本1.就這樣
delimss-MacBook-Pro:temp delims$ svn update -r 1 //指定版本號
Updating '.':
D AFNetworking
Updated to revision 1.
delimss-MacBook-Pro:temp delims$ ls
1.txt //已經(jīng)回到版本1
瀏覽服務(wù)器上的文件可以這樣操作
delimss-MacBook-Pro:temp delims$ svn list svn://localhost
1.txt
AFNetworking/
delimss-MacBook-Pro:temp delims$ svn list svn://localhost/AFNetworking
.cocoadocs.yml
.git/
.gitignore
.travis.yml
AFNetworking/
AFNetworking.podspec
AFNetworking.xcodeproj/
AFNetworking.xcworkspace/
CHANGELOG.md
CONTRIBUTING.md
Example/
Framework/
LICENSE
README.md
Tests/
UIKit+AFNetworking/
fastlane/
delimss-MacBook-Pro:temp delims$
創(chuàng)建一個新分支
delimss-MacBook-Pro:temp delims$ svn copy svn://localhost/AFNetworking svn://localhost/AFNetworking2 -m "創(chuàng)建一個新分支"
Committing transaction...
Committed revision 3.
再來看下服務(wù)器上的目錄
delimss-MacBook-Pro:temp delims$ svn list svn://localhost
1.txt
AFNetworking/
AFNetworking2/
可以看到服務(wù)器上的目錄已經(jīng)被更改了
更新本地箱季,
delimss-MacBook-Pro:temp delims$ svn update
這里會輸出大量日志
delimss-MacBook-Pro:temp delims$ ls
1.txt AFNetworking AFNetworking2
可以看到本地文件和服務(wù)器同步了
修改文件
delimss-MacBook-Pro:temp delims$ svn st
M AFNetworking/README.md
delimss-MacBook-Pro:temp delims$ svn ci AFNetworking/README.md -m "修改一個文件"
Sending AFNetworking/README.md
Transmitting file data .done
Committing transaction...
Committed revision 4.
先介紹這些吧
鍵入svn help
查看svn所有命令,打印如下:
add <br>
auth <br>
blame (praise, annotate, ann) <br>
cat <br>
changelist (cl) <br>
checkout (co) <br>
cleanup <br>
commit (ci) <br>
copy (cp) <br>
delete (del, remove, rm) <br>
diff (di) <br>
export <br>
help (?, h) <br>
import <br>
info <br>
list (ls) <br>
lock <br>
log <br>
merge <br>
mergeinfo <br>
mkdir <br>
move (mv, rename, ren) <br>
patch <br>
propdel (pdel, pd) <br>
propedit (pedit, pe) <br>
propget (pget, pg) <br>
proplist (plist, pl) <br>
propset (pset, ps) <br>
relocate <br>
resolve <br>
resolved <br>
revert <br>
status (stat, st) <br>
switch (sw) <br>
unlock <br>
update (up) <br>
upgrade <br>