iOS 版本控制_ SVN / Mac 環(huán)境下 svn 的使用

iOS 開發(fā) SVN 版本控制器

更多技術(shù)交流請(qǐng)加群 iOS技術(shù)聯(lián)盟 27512466

SVN是Subversion的簡(jiǎn)稱,是一個(gè)開放源代碼的版本控制系統(tǒng),相較于RCS、CVS,它采用了分支管理系統(tǒng),它的設(shè)計(jì)目標(biāo)就是取代CVS。互聯(lián)網(wǎng)上很多版本控制服務(wù)已從CVS遷移到Subversion。說(shuō)得簡(jiǎn)單一點(diǎn)SVN就是用于多個(gè)人共同開發(fā)同一個(gè)項(xiàng)目,共用資源的目的。

  • 運(yùn)行方式: SVN服務(wù)器有2種運(yùn)行方式:獨(dú)立服務(wù)器和借助apache運(yùn)行。兩種方式各有利弊,用戶可以自行選擇。
  • 數(shù)據(jù)儲(chǔ)存: SVN存儲(chǔ)版本數(shù)據(jù)也有2種方式:BDB(一種事務(wù)安全型表類型)和FSFS(一種不需要數(shù)據(jù)庫(kù)的存儲(chǔ)系統(tǒng))。因?yàn)锽DB方式在服務(wù)器中斷時(shí),有可能鎖住數(shù)據(jù),所以還是FSFS方式更安全一點(diǎn)。
  • 點(diǎn)擊查看詳細(xì)介紹

[TOC]

在Windows環(huán)境中,我們一般使用TortoiseSVN來(lái)搭建svn環(huán)境。在Mac環(huán)境下,由于Mac自帶了svn的服務(wù)器端和客戶端功能,所以我們可以在不裝任何第三方軟件的前提下使用svn功能,不過(guò)還需做一下簡(jiǎn)單的配置。

Mac環(huán)境下搭建 SVN服務(wù)器端環(huán)境

搭建流程:

一、創(chuàng)建代碼倉(cāng)庫(kù),用來(lái)存儲(chǔ)客戶端所上傳的代碼

我先在/User/apple目錄下新建一個(gè)svn目錄,以后可以在svn目錄下創(chuàng)建多個(gè)倉(cāng)庫(kù)目錄

打開終端,創(chuàng)建一個(gè)mycode倉(cāng)庫(kù),輸入指令:svnadmin create /Users/apple/svn/mycode

指令執(zhí)行成功后,會(huì)發(fā)現(xiàn)硬盤上多了個(gè)/Users/apple/svn/mycode目錄,目錄結(jié)構(gòu)如下:

注:這地方出現(xiàn)路徑的錯(cuò)誤可以通過(guò)輸入sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer 命令

password是你的登錄密碼。

10002140-c4cf85b829bd477ea3a3779a4cd0d7fd.png

二、配置svn的用戶權(quán)限

主要是修改/svn/mycode/conf目錄下的三個(gè)文件

1. 打開 svnserve.conf, 將下列配置項(xiàng)前面的#和空格都去掉

# anon-access = read
# auth-access = write
# password-db = passwd
# authz-bd = authz```
> anon-access = read代表匿名訪問的時(shí)候是只讀的,若改為anon-access = none代表禁止匿名訪問,需要帳號(hào)密碼才能訪問

**2.** 打開 passwd, 在[users]下面添加賬號(hào)和密碼

```java[users]wenhang = 111//賬號(hào) = 密碼say = 666//賬號(hào) = 密碼```

**3.** 打開 authz, 配置用戶組和權(quán)限我們可以將在passwd里添加的用戶分配到不同的用戶組里,以后的話,就可以對(duì)不同用戶組設(shè)置不同的權(quán)限,沒有必要對(duì)每個(gè)用戶進(jìn)行單獨(dú)設(shè)置權(quán)限。在[groups]下面添加組名和用戶名,多個(gè)用戶之間用逗號(hào) **,** 隔開
```java
[groups]topgroup=wenhang,say```

>**說(shuō)明**: wenhang 和 say 都是屬于 topgroup 這個(gè)組的,稍后再做權(quán)限配置

使用** [/] **代表SVN服務(wù)器中的所有資源庫(kù)
```java
[/]
@topgroup = rw //某個(gè)組有讀寫權(quán)限```

>上面的配置說(shuō)明 topgroup 這個(gè)組中的所有用戶對(duì)資源庫(kù)都有讀寫(rw)權(quán)限,組名前面要用@, 如果是用戶名,不用加@, 比如wenhang 這個(gè)用戶有讀寫權(quán)限

```java
[/]
wenhang = rw //某個(gè)用戶有讀寫權(quán)限```
>至于其他具體的權(quán)限,可以參考 authz 文件中的其他內(nèi)容

**4.** 啟動(dòng) SVN 服務(wù)器
`前三步都是為第四步啟動(dòng)服務(wù)器做準(zhǔn)備,接下來(lái)的第四步才是真正關(guān)鍵所在.`

在終端輸入下列指令: svnserve -d -r /Users/apple/svn

`或者輸入: svnserve -d -r /User/apple/svn/mycode`

**若沒有任何提示,恭喜你啟動(dòng)成功了**

**5.** 關(guān)閉 SVN 服務(wù)器如果你想要關(guān)閉 SVN 服務(wù)器,最便捷的辦法是打開其他里面的"活動(dòng)監(jiān)視器"
![Snip20161118_1.png](http://upload-images.jianshu.io/upload_images/1654839-fb414733c650e818.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
在活動(dòng)監(jiān)視器中`搜索svn`, 在列表中找到`進(jìn)程svnserve`, 點(diǎn)擊左上角的`強(qiáng)制退出進(jìn)程`

![Snip20161118_7.png](http://upload-images.jianshu.io/upload_images/1654839-fa9f5573f069e38c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

>`注意: 首次配置完成,須先關(guān)閉 svn 服務(wù)器,再進(jìn)行數(shù)據(jù)的上傳和下載操作.`

完成以上5步,那就是成功搭建了 svn服務(wù)器環(huán)境

###使用 SVN (終端命令)

**1.** 從本地導(dǎo)入代碼到服務(wù)器(第一次初始化導(dǎo)入)

- 在終端輸入:
 `svn import /Users/apple/Documents/workspace/wenhangtest svn://localhost/mycode/iOS/wenhangtest --username=wenhang --password=111 -m "初始化導(dǎo)入"`

> 詳解指令: 將/Users/apple/Documents/workspace/wenhangtest中的所有內(nèi)容,上傳到服務(wù)器mycode倉(cāng)庫(kù)的iOS/wenhangtest目錄下,后面雙引號(hào)中的"初始化導(dǎo)入"是注釋

**2.** 從服務(wù)器下載代碼到客戶端本地

- 方式一 在終端輸入:
 `svn checkout svn://localhost/mycode/iOS --username=wenhang --password=111 /Users/apple/Documents/code` 
----------- 
- 方式二 
在終端中進(jìn)入預(yù)先建好下載存放文檔的目錄文件夾
 終端輸入:
 `svn checkout svn://localhost/mycode/iOS --username=wenhang --password=111`

>詳解指令: 將服務(wù)器 mycode/iOS 倉(cāng)庫(kù)中的內(nèi)容下載到/ User/apple/Documents/code 目錄中

**3.** 提交更改過(guò)得代碼到服務(wù)器
1. 首先更新服務(wù)器端的代碼到客戶端
`(為避免多人協(xié)作,svn出現(xiàn)沖突,此步驟須執(zhí)行,且養(yǎng)成`先up, 再commit` 的好習(xí)慣)`如果是第一次提交,可不執(zhí)行 up 步驟

2. 提交代碼: 
  - 打開終端,先定位到/ Users/apple/Documents/code 目錄中,
 輸入:` cd/Users/apple/Documents/code` 
  - 輸入提交指令: `svn commit -m"測(cè)試修改 .main 文件"`

>這個(gè)指令會(huì)將/Users/apple/Documents/code下的所有修改都同步到服務(wù)器端,假如這次我只修改了main.文件,可以看到終端打印的信息.

```javaSending  wenhang/zwy/main.mTransmitting data .Committed revision 2 .```

注:`recision 2 `中 數(shù)字 2 表示的是提交 svn 項(xiàng)目版本的標(biāo)識(shí)數(shù)

**4.** 更新服務(wù)器端的代碼到本地客戶端

剛才在步驟3中其實(shí)已經(jīng)提到過(guò)了,很簡(jiǎn)單的一步.

首先在終端定位到客戶端代碼目錄后,然后再輸入指令: `svn update` 縮寫:(svn up)

**5.** 更多命令,可以在終端輸入 svn help 查看


![Snip20161118_8.png](http://upload-images.jianshu.io/upload_images/1654839-6030439ad5209e59.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

> 注: 系統(tǒng)自帶的 SVN 無(wú)法支持本地刪除文件的更新,即當(dāng)本地刪除文件后去更新服務(wù)器的文件時(shí),刪除的文件又從服務(wù)器上拖拽到本地文件中, 但是其支持文件修改后的操作更新操作.

###svn 操作解析

**1、往版本庫(kù)中添加新的文件**
`svn add file`
例如:svn add test.m(添加test.m)
svn add *.m(添加當(dāng)前目錄下所有的.m文件)
svn add xxx@2x.png 文件時(shí), 正常命令 svn add xxx@2x.png 會(huì)報(bào) xxx not found
需用 svn add xxx@2x.png@ 來(lái)添加,也就是圖片名字后面再添加一個(gè)@ 符號(hào),這是因?yàn)?svn 命令最后需要用@符號(hào)來(lái)指定一個(gè)版本導(dǎo)致的遇到 xxx@2x.png文件時(shí),如果用svn命令行添加到 版本庫(kù)的話,只能手動(dòng)一個(gè)一個(gè)添加,不能批量添加**

2、加鎖/解鎖**
`svn lock -m “LockMessage“ [--force] PATH`
例如:`svn lock -m “l(fā)ock test file“ test.m`svn unlock PATH

**3、更新到某個(gè)版本**
`svn update -r m path`
例如:svn update如果后面沒有目錄,默認(rèn)將當(dāng)前目錄以及子目錄下的所有文件都更新到最新版本。
`svn update -r 200 test.m`(將版本庫(kù)中的文件test.m還原到版本200)
svn update test.m(更新,于版本庫(kù)同步。如果在提交的時(shí)候提示過(guò)期的話,是因?yàn)闆_突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
簡(jiǎn)寫:svn up
**4、查看文件或者目錄狀態(tài)**
(如下狀態(tài)在 Xcode 中會(huì)體現(xiàn),相信大多數(shù)的 iOS 開發(fā)者都見過(guò)的)

![Snip20161118_9.png](http://upload-images.jianshu.io/upload_images/1654839-c1eecbf5f657c982.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
1)`svn status path`(目錄下的文件和子目錄的狀態(tài),正常狀態(tài)不顯示)
【?:不在svn的控制中;M:內(nèi)容被修改;C:發(fā)生沖突;A:預(yù)定加入到版本庫(kù);K:被鎖定】

2)`svn status -v path`(顯示文件和子目錄狀態(tài))
第一列保持相同,第二列顯示工作版本號(hào),第三和第四列顯示最后一次修改的版本號(hào)和修改人。

>注:svn status、svn diff和 svn revert這三條命令在沒有網(wǎng)絡(luò)的情況下也可以執(zhí)行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。

簡(jiǎn)寫:svn st

**5、刪除文件**
`svn delete path -m “delete test fle“`
例如:`svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
`或者直接`svn delete test.php` 然后再`svn ci -m ‘delete test file‘`,推薦使用這種

簡(jiǎn)寫:svn (del, remove, rm)

**6、查看日志**
`svn log path`
例如:`svn log test.m`顯示這個(gè)文件的所有修改記錄,及其版本號(hào)的變化

**7、查看文件詳細(xì)信息**
`svn info path`
例如:`svn info test.m`

**8、比較差異**
`svn diff path`(將修改的文件與基礎(chǔ)版本比較)
例如:`svn diff test.m`
`svn diff -r m:n path`(對(duì)版本m和版本n比較差異)
例如:`svn diff -r 200:201 test.m`

簡(jiǎn)寫:svn di

**9、將兩個(gè)版本之間的差異合并到當(dāng)前文件**
`svn merge -r m:n path`
例如:`svn merge -r 200:205 test.m`(將版本200與205之間的差異合并到當(dāng)前文件,但是一般都會(huì)產(chǎn)生沖突,需要處理一下)

**10、版本庫(kù)下的文件和目錄列表**
`svn list path`顯示path目錄下的所有屬于版本庫(kù)的文件和目錄

簡(jiǎn)寫:svn ls

**11、創(chuàng)建納入版本控制下的新目錄**
`svn mkdir`: 創(chuàng)建納入版本控制下的新目錄。
用法:
 1、`mkdir PATH…`
2、mkdir URL…創(chuàng)建版本控制的目錄。
  - 1)每一個(gè)以工作副本 PATH 指定的目錄,都會(huì)創(chuàng)建在本地端,并且加入新增調(diào)度,以待下一次的提交。
  - 2)每個(gè)以URL指定的目錄,都會(huì)透過(guò)立即提交于倉(cāng)庫(kù)中創(chuàng)建。在這兩個(gè)情況下,所有的中間目錄都必須事先存在。

**12、恢復(fù)本地修改**
svn revert: 恢復(fù)原始未改變的工作副本文件 (恢復(fù)大部份的本地修改)。
revert:用法: revert PATH…
注意: 本子命令不會(huì)存取網(wǎng)絡(luò),并且會(huì)解除沖突的狀況。但是它不會(huì)恢復(fù)被刪除的目錄

**13、代碼庫(kù)URL變更**
svn switch (sw): 更新工作副本至不同的URL。
用法: 
1、switch URL [PATH]
2、switch –relocate FROM TO [PATH...]

 - 1)更新你的工作副本,映射到一個(gè)新的URL,其行為跟“svn update”很像,也會(huì)將服務(wù)器上文件與本地文件合并。這是將工作副本對(duì)應(yīng)到同一倉(cāng)庫(kù)中某個(gè)分支或者標(biāo)記的方法。
 - 2)改寫工作副本的URL元數(shù)據(jù),以反映單純的URL上的改變。當(dāng)倉(cāng)庫(kù)的根URL變動(dòng)(比如方案名或是主機(jī)名稱變動(dòng)),但是工作副本仍舊對(duì)映到同一倉(cāng)庫(kù)的同一目錄時(shí)使用這個(gè)命令更新工作副本與倉(cāng)庫(kù)的對(duì)應(yīng)關(guān)系。

**14、解決沖突**
svn resolved: 移除工作副本的目錄或文件的“沖突”狀態(tài)。
用法: resolved PATH…
注意: 本子命令不會(huì)依語(yǔ)法來(lái)解決沖突或是移除沖突標(biāo)記;它只是移除沖突的相關(guān)文件,然后讓 PATH 可以再次提交。

**15、輸出指定文件或URL的內(nèi)容。**
svn cat 目標(biāo)[@版本]…如果指定了版本,將從指定的版本開始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以寫具體版本號(hào),這樣輸出結(jié)果是可以提交的)

**16、配置忽略文件 vi ~/.subversion/config**
找到 global-ignores 一行,去掉注釋,編輯成
global-ignores = build *~.nib *.so *.pbxuser *.mode *.perspective*
找到 enable-auto-props = yes 把注釋去掉,在[auto-props] Section聲明以下文本文件
*.mode* = svn:mime-type=text/X-xcode
*.pbxuser = svn:mime-type=text/X-xcode
*.perspective* = svn:mime-type=text/X-xcode
*.pbxproj = svn:mime-type=text/X-xcode

**17、清理工作拷貝/移除鎖/完成未完成的操作/等等**
`svn cleanup path`

###svn 常見報(bào)錯(cuò)`(這才是整理了半天,真正的干貨)

1.svn: Server sent unexpected return value (500 Internal Server Error) in response to OPTIONS request for 'http://svn.moon.ossxp.com/svn/test'
錯(cuò)誤的用戶名
檢查登錄的用戶名是否輸入錯(cuò)誤
svn: 服務(wù)器發(fā)送了意外的返回值(500 Internal Server Error),在響應(yīng) “OPTIONS” 的請(qǐng)求 “http://svn.moon.ossxp.com/svn/test” 中

2.svn: OPTIONS of 'http://svn.moon.ossxp.com/svn/test': authorization failed: Could not authenticate to server: rejected Basic challenge (http://svn.moon.ossxp.com)
錯(cuò)誤的口令
用正確的用戶名/口令登錄
svn: 方法 OPTIONS 失敗于 “http://svn.moon.ossxp.com/svn/test”: 認(rèn)證失敗: Could not authenticate to server: rejected Basic challenge (http://svn.moon.ossxp.com) 

3.svn: Server sent unexpected return value (403 Forbidden) in response to OPTIONS request for 'http://svn.moon.ossxp.com/svn/test'
用戶無(wú)權(quán)限聯(lián)系管理員,為用戶分配權(quán)限 
svn: 服務(wù)器發(fā)送了意外的返回值(403 Forbidden),在響應(yīng) “OPTIONS” 的請(qǐng)求 “http://svn.moon.ossxp.com/svn/test” 中 

4.svn: OPTIONS of 'http://www.moon.ossxp.com/svn/test': 200 OK (http://www.moon.ossxp.com)
服務(wù)器地址錯(cuò)誤,是普通Web頁(yè)面,不支持SVN的 WebDAV 協(xié)議
確認(rèn)輸入正確的 SVN 服務(wù)地址。
可以在瀏覽器中輸入該地址進(jìn)行確認(rèn) svn: 方法 OPTIONS 失敗于 “http://www.moon.ossxp.com/svn/test”: 200 OK (http://www.moon.ossxp.com) 

5.The version of your subversion (client) is below 1.5.0, upgrade to 1.5.0 or above. SVN below 1.5.0 can not handle mergeinfo properly. It can mess up our automated merge tracking!
是由于客戶端的軟件版本低于1.5.0造成的。服務(wù)器端對(duì)客戶端軟件版本進(jìn)行了限制,以免對(duì)合并跟蹤破壞。
升級(jí)本地的Subversion客戶端軟件到1.5.0或以上版本。 

6.svn: This client is too old to work with working copy '.'. You need to get a newer Subversion client, or to downgrade this working copy. See http://subversion.tigris.org/faq.html#working-copy-format-change for details.
安裝了多個(gè)版本的SVN客戶端(TSVN,Subclipse,...),且各個(gè)客戶端的版本不一致。高版本的SVN客戶端會(huì)自動(dòng)更新本地工作目錄中的 .svn 目錄下的文件格式,導(dǎo)致舊版本的SVN客戶端不能繼續(xù)訪問該本地工作目錄

將本機(jī)安裝的所有的SVN客戶端都更新到同一個(gè)大版本,以避免本地工作目錄的格式不一致-svn: 此客戶端對(duì)于工作副本 . 太舊。你需要取得更新的 Subversion 客戶端,或者降級(jí)工作副本。 參見 http://subversion.tigris.org/faq.html#working-copy-format-change 以獲得更詳細(xì)的信息。7. svn: Working cop-svn: 
此客戶端對(duì)于工作副本 “.” 太舊。你需要取得更新的 Subversion 客戶端,或者降級(jí)工作副本。 參見 http://subversion.tigris.org/faq.html#working-copy-format-change 以獲得更詳細(xì)的信息。

7.svn: Working copy 'trunk/src' locked svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)
異常操作導(dǎo)致目錄沒有解鎖。
一個(gè)簡(jiǎn)單的重現(xiàn)方法:在 .svn 目錄下創(chuàng)建空的名為 lock 的文件
使用命令行 "svn cleanup" 或者類似的“清理”動(dòng)作刪除鎖定
svn: 工作副本“trunk/src”已經(jīng)鎖定 svn: 運(yùn)行“svn cleanup”刪除鎖定 (輸入“svn help cleanup”得到用法)

 8.日志中沒有作者信息: ------------------------------------ r9 | (沒有作者信息) | … ossxp.com 
anonymous commit test
匿名提交導(dǎo)致沒有作者信息
檢查版本庫(kù)權(quán)限控制,禁止匿名提交 

9.正在發(fā)送 ... 傳輸文件數(shù)據(jù).svn: 提交失敗(細(xì)節(jié)如下): svn: Commit blocked by pre-commit hook (exit code 1) with output: 提交說(shuō)明至少應(yīng)包含 4 個(gè)字符, 或者太簡(jiǎn)單了。

這是由于用戶提交的提交說(shuō)明(commit log),太過(guò)簡(jiǎn)單了。在提交時(shí)需要輸入有意義的 commit log。

寫有意義的提交說(shuō)明,或者請(qǐng)求管理員更改版本庫(kù)插件

10.增加 Logger.c 傳輸文件數(shù)據(jù).svn: 提交失敗(細(xì)節(jié)如下): 
svn: Commit blocked by pre-commit hook (exit code 1) with output: Wide character in print at /opt/svn/svnroot/myrepos/hooks/scripts/check-case-insensitive.pl line 259. 
發(fā)現(xiàn)文件名大小寫沖突: trunk/src/Logger.c 已經(jīng)存在于 logger.c管理員設(shè)置了對(duì)新增文件是否重名(只有大小寫不同)的文件進(jìn)行檢查。
文件名只有大小寫不同,在Windows上進(jìn)行檢出會(huì)造成麻煩不要添加重名(僅大小寫不同)文件增加 src/文件aBc.txt 傳輸文件數(shù)據(jù).svn: 提交失敗(細(xì)節(jié)如下):
 svn: Commit blocked by pre-commit hook (exit code 1) with output: Clash: '/trunk/src/文件aBc.txt' '/trunk/src/文件abc.txt'

11.svn: While preparing '/home/jiangxin/tmp/svn.test/trunk/src/README.txt' for commit svn: Inconsistent line ending style
提交的文件已經(jīng)設(shè)置了 svn:eol-style 屬性,但是該文本內(nèi)的換行符有DOS的換行符CRLF,也有Unix換行符LF,不一致!
統(tǒng)一該文本文件內(nèi)的換行符。Linux 下可以用dos2unix, unix2dos, sed等命令。Windows下可用 UltraEdit 進(jìn)行轉(zhuǎn)換。 svn: 當(dāng)為提交操作準(zhǔn)備“/home/jiangxin/tmp/svn.test/trunk/src/README.txt”時(shí) svn: 不一致的行結(jié)束樣式

12.svn: Failed to add file 'Makefile': an unversioned file of the same name already exists
執(zhí)行更新(svn up)時(shí)報(bào)錯(cuò)。因?yàn)槠渌诵略鲆粋€(gè)文件到服務(wù)器,而本地卻存在一個(gè)同名文件(未版本控制)

先將本地重名文件改名,再執(zhí)行 "svn up",之后再比較、合并文件?;蛘邎?zhí)行 "svn up --force"-svn: 增加文件 'Makefile' 失敗: 同名未版本控制的文件已存在 13. Adding src/Makefile svn: Commit failed (details follow): svn: File '/svn/test/trunk/src/Makefile' already exists 添加新文件,提交時(shí)報(bào)錯(cuò)。
-svn: 增加文件 'Makefile' 失敗: 同名未版本控制的文件已存在 

13.Adding src/Makefile svn: Commit failed (details follow): svn: File '/svn/test/trunk/src/Makefile' already exists

添加新文件,提交時(shí)報(bào)錯(cuò)。因?yàn)槠渌艘呀?jīng)先于我增加了該文件。
先執(zhí)行更新操作("svn up"),再根據(jù)提示進(jìn)行操作:合并/提交...增加 src/Makefile svn: 提交失敗(細(xì)節(jié)如下): svn: 文件“/svn/test/trunk/src/Makefile”已存在 

14.$ svn up Conflict discovered in 'Makefile'. Select: (p) postpone, (df) diff-full, (e) edit, (mc) mine-conflict, (tc) theirs-conflict, (s) show all options: p C Makefile Updated to revision 5. Summary of conflicts: Text conflicts: 1
多人同時(shí)編輯同一個(gè)文件時(shí),可能會(huì)遇到?jīng)_突。別人先于我提交,則當(dāng)我提交時(shí)要先更新。更新可能遇到不能自動(dòng)解決的沖突使用工具進(jìn)行沖突解決

$ svn up 在 “Makefile” 中發(fā)現(xiàn)沖突。 選擇: (p) 推遲,(df) 顯示全部差異,(e) 編輯, (mc) 我的版本, (tc) 他人的版本, (s) 顯示全部選項(xiàng): p C Makefile 更新到版本 5。 沖突概要: 正文沖突:1 

15.svn: Commit failed (details follow): svn: File 'Makefile' is out of date svn: File not found: transaction '6-d', path '/trunk/src/Makefile'
提交的文件已被他人刪除
先執(zhí)行更新操作("svn up"),再根據(jù)提示解決該樹沖突:刪除文件或繼續(xù)添加...
svn: 提交失敗(細(xì)節(jié)如下): svn: 文件 “Makefile” 已經(jīng)過(guò)時(shí) svn: File not found: transaction '6-c', path '/trunk/src/Makefile'16.svn: Commit failed (details follow): svn: File or directory '/trunk/XXX' is out of date; try updating svn: resource out of date; try updating
基于舊版本修改是不允許的先更新("svn update"),再提交 svn: 提交失敗(細(xì)節(jié)如下): svn: 文件或目錄 “/trunk/XXX” 已經(jīng)過(guò)時(shí);請(qǐng)先更新 svn: resource out of date; try updating

17.svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent svn: At least one property change failed; repository is unchanged svn: Error setting property 'log': Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook
修改提交說(shuō)明等操作屬于高風(fēng)險(xiǎn)操作,因?yàn)樵摬僮鳑]有被版本控制,屬于不可恢復(fù)的操作。缺省禁止。
請(qǐng)聯(lián)系管理員,啟用該版本的相關(guān)鉤子,允許修改“版本屬性”。參見 管理員鉤子設(shè)置

svn: DAV 請(qǐng)求失敗;可能是版本庫(kù)的 pre-revprop-change 鉤子執(zhí)行失敗或者不存在 svn: 至少有一個(gè)屬性變更失??;版本庫(kù)未改變 svn: 設(shè)置屬性 “l(fā)og” 出錯(cuò): Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook


>更多技術(shù)交流請(qǐng)加群 iOS技術(shù)聯(lián)盟 27512466
```java 
                        深信積累的力量,時(shí)間就是你的朋友,否則,他就是你的敵人 ```
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,908評(píng)論 18 139
  • 命令的使用 1、檢出 svn cohttp://路徑(目錄或文件的全路徑)[本地目錄全路徑] --username...
    小李龍彪閱讀 4,457評(píng)論 0 9
  • SVN版本:1.5 及更新版本 名詞說(shuō)明: WC:Working Copy 你的工作區(qū) Versioned:受控的...
    日風(fēng)和閱讀 4,323評(píng)論 1 23
  • WC:Working Copy 你的工作區(qū) Versioned:受控的;受版本控制的 SVN是什么? SVN是開源...
    Programmer客棧閱讀 700評(píng)論 0 4
  • &開發(fā)過(guò)程中離不開源代碼的管理, 目地:為了解決在軟件開發(fā)過(guò)程中,由源代碼引發(fā)的各種蛋疼、繁瑣的問題。 目前開發(fā)使...
    早起的蟲兒子被鳥吃閱讀 2,460評(píng)論 0 16