svn 使用整理

基本概念:

svn 是在一個(gè)服務(wù)器中建立以個(gè)源代碼庫,可以記錄每一個(gè)文件修改的記錄(每個(gè)源文件都有版本號(hào)),可以隨時(shí)回退到歷史版本。開發(fā)人員先要checkout代碼出來,可以在修改后再commmit上去。svn是屬于集中式版本控制系統(tǒng),沒有網(wǎng)絡(luò)就不能co/ci了。

基本操作

update:

恢復(fù)到之前某個(gè)版本號(hào):

不小心寫錯(cuò)了很多東西,想撤銷所寫的東西(已經(jīng)把修改提交到服務(wù)器

svn update -r 版本號(hào)

不小心刪錯(cuò)了文件,想把文件恢復(fù)回來(已經(jīng)把刪除提交到服務(wù)器)

svn update -r 版本號(hào)

checkout:

export = copy 一份,不會(huì)有倉庫、check out = 引用

1、Linux命令行下將文件checkout到本地目錄

svn checkout path(path是服務(wù)器上的目錄)//后面 空格 接需要checkout到的本地地址,如果沒有話,默認(rèn)當(dāng)時(shí)終端進(jìn)入的地址

    svn checkout svn://192.168.1.1/pro/domain     
    svn co http://xxx/svn/xxxx --username=manager --password=manager

有時(shí)整個(gè) svn 目錄太過于龐大,不想整個(gè) checkout 下來,但又想維持整個(gè)目錄結(jié)構(gòu)以方便后續(xù)使用,那么可以使用 subversion 1.5 之后的 –depth 參數(shù)來只 checkout 需要的子目錄。

1、先checkout空目錄

svn co --depth empty svnLocation localDir

對(duì)需要的子目錄遞歸checkout

svn update --set-depth infinity localDir/data
svn update --set-depth infinity localDir/block

eg:按路徑checkout出來

svn co --depth empty http://svn.demo.pc.com.cn/svn/ios
svn update --set-depth emptyios/trunk
svn update --set-depth infinity ios/trunk/xxx

驗(yàn)證是否可以,,進(jìn)入相對(duì)的文件夾,使用

svn stutas -u  看是不是有對(duì)應(yīng)的版本號(hào)就可以了

拿到的空目錄后,就可以正常checkout對(duì)應(yīng)的路徑了。

move:

更改版本名稱:

svn move -m '*更改分支名字'  svn://192.168.1.52/help/branches/help_forPmv2  svn://192.168.1.52/help/branches/help_forPmv2_141010

revert:

不小心寫錯(cuò)了很多東西,想撤銷所寫的東西(還未把修改提交到服務(wù)器)

svn revert

去掉所有代碼的修改

svn revert --depth infinity .     //“ .”   空格 + 點(diǎn)

merge:

合并到哪一個(gè)文件。。。。。

將100合并成(取代) 101

svn merge -r uprev:lowrev .
eg : svn merge -r 101:100 .

PS : svn 提交,如果版本號(hào)低的話,merge是合拼不了的

恢復(fù)svn服務(wù)器上某個(gè)版本號(hào)

svn merge -c -12213 .
svn merge -c -123456 -234234 .  //恢復(fù)多個(gè)

copy:

拷貝文件

svn copy path/file_name newpath/new_file_name  //從path復(fù)制到新的路徑
svn commit -m "xxxx"

export: 自動(dòng)忽略 .a .framework文件 (不帶版本號(hào))。copy 不會(huì)

備份代碼的時(shí)候用export

svn copy path/file_name newpath/new_file_name  //從path復(fù)制到新的路徑
svn commit -m "xxxx"

創(chuàng)建分支要用copy,這樣會(huì)有版本號(hào),合并的時(shí)候,可以指定那個(gè)版本號(hào)合并到哪個(gè)版本號(hào)。。

//切出指定版本

svn copy svn://192.168.1.52/help/branches/help_forShop_140307 -r 170 svn://192.168.1.52/help/branches/help_forPm_141010 -m "切出分支"

commit/ci:

提交改動(dòng):

svn ci -m "<#備注#>"   // -m "提交備注"
或者svn commit
例如:svn commit -m “add test file for my test“ test.php

delete:

場景1:刪除svn服務(wù)器中的文件,保存本地文件,這樣可以在忽略文件,因?yàn)椴荒苤苯訉?duì)服務(wù)器中的代碼ignore操作。

svn delete "文件" --keep-local 

場景1:刪除文件,并上傳:

svn delete test.php 
svn ci -m "delete test file"

add:

加入文件:

  svn add test.php(添加test.php)
  svn add *.php(添加當(dāng)前目錄下所有的php文件)

如果你會(huì)希望添加所有工作拷貝的未版本化文件,包括那些隱藏在深處的文件,可以使用svn add的--force遞歸到版本化的目錄下:

svn add . --force

如果是copy過來的文件夾有.svn 會(huì)有問題,所以要先刪除

ls -al 查看
rm -rf .svn  刪除

svn:

顯示文件的狀態(tài)

svn st

查找有沒有 .al結(jié)尾的文件,并顯示狀態(tài)

svn status --no-ignore | grep -i ".al$"

-- : 代表 用一個(gè)單詞

- : 分割兩個(gè)單詞

| : 管道傳輸,把前面的結(jié)果傳過來

svn標(biāo)志的含義:

標(biāo)志 狀態(tài)
" " 無修改
K 被鎖定
A 增加(Added)
D 刪除(Deleted)
I 忽略(Ignored)
M 改變(Modified)
MM 文件的屬性和內(nèi)容都被改變了
U 表示更新(Updated)
UU 文件的屬性和內(nèi)容都更新了
C 沖突(Conflicted)
G 合并(Merged)
E 已經(jīng)存在(Existed)
R 替換(Replaced)
X 未納入版本控制的目錄,被外部引用的目錄所創(chuàng)建
? 未納入版本控制,需要執(zhí)行 svn add
! 該項(xiàng)目已遺失(被非 svn 命令刪除)或不完整
~ 版本控制下的項(xiàng)目與其它類型的項(xiàng)目重名

沖突解決:

  • mc(使用本地的覆蓋服務(wù)器的)

  • tc(使用服務(wù)器的覆蓋本地的)

  • p ( 對(duì)比 )

    選擇p后,會(huì)有本地會(huì)有三個(gè)文件,未沖突前、Mine、上一個(gè)版本號(hào)。對(duì)比沖突點(diǎn),選擇需要的代碼,刪除>>>mine >>>>re 等標(biāo)識(shí)。最后命令行svn resovled (文件名) 來確定解決沖突)或者通過SVN工具resovled

svn修改需要忽略的文件:

1、打開配置 open -e ~/.subversion/config

2、在配置中:global-ignores 后面添加。常見是:

global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.gcda *.gcno .DS_Store Thumbs.db .git .gitignore .idea xcuserdata *.xcuserdatad !xcshareddata

3、直接保存退出

如果需要臨時(shí)添加被忽略文件,可以使用

svn add <#制定文件名#> --force

常見錯(cuò)誤:

提示out of date:

原因:你的本地倉庫的代碼不是最新的情況下:你提交的代碼服務(wù)器有最新的,你當(dāng)前提交的代碼可能與服務(wù)器的代碼沖突

解決:先update,有沖突就解決沖突再commit,沒有沖突就直接commit。

is scheduled for addition, but is missing

原因:刪除文件夾后點(diǎn)commit提交,但是報(bào)錯(cuò)。之前用SVN提交過的文件,被標(biāo)記為"add"狀態(tài),等待被加入到倉庫。若此時(shí)你把這個(gè)文件刪除了,SVN提交的時(shí)候還是會(huì)嘗試提交這個(gè)文件,雖然它的狀態(tài)已經(jīng)是"missing"了。

解決:在命令行下用 "svn revert xxx.c --depth infinity",或者在圖形界面下,右鍵--Revert,選中那個(gè)文件。這樣就告訴SVN把這個(gè)文件退回到之前的狀態(tài) "unversioned",也就是不對(duì)這個(gè)文件做任何修改

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容