日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SVN:冲突解决 合并别人的修改

發(fā)布時間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SVN:冲突解决 合并别人的修改 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在項目中,基本不可避免多個人同時參與一個項目,因此就可能會出現(xiàn)多個人同時修改一個文件的情況,就不可避免的會出現(xiàn)沖突。svn已經(jīng)很聰明了,如果你和別人對于同一個文件的修改之間不存在重疊(比如你在文件最開始增加了一行,而你同事在文件的結(jié)尾出增加了一行),svn會自動將你們的修改進行合并,然而意外總是會發(fā)生,而且超出了svn的處理范圍,只好采用人工智能(手工)來進行合并了。
要解決沖突,我們首先得制造個沖突,保證你現(xiàn)在已經(jīng)有兩個工作拷貝了,我們現(xiàn)在修改其中的一個,例如這里我們修改sally_calc中的main.c文件。

root@letuknowit:/home/kris/sally_calc/trunk# cat main.c #include <stdio.h> #include "add.h" #include "sub.h"int main() {printf("5 + 10 = %d.\n",add(5,10));printf("15 - 10 = %d.\n",sub(15,10));//sally's testprintf("sally: 60 - 33 = %d.\n",sub(60,33));return 0; }

在這里sally增加了一個屬于她自己的測試語句,改好后,提交到svn

root@letuknowit:/home/kris/sally_calc/trunk# svn ci -m "sally add some test code" Sending trunk/main.c Transmitting file data . Committed revision 7.

下面回到kris的工作副本,做類似的修改,具體如下

root@letuknowit:/home/kris/calc/trunk# cat main.c #include <stdio.h> #include "add.h" #include "sub.h"int main() {printf("5 + 10 = %d.\n",add(5,10));printf("15 - 10 = %d.\n",sub(15,10));//kris's testprintf("kris: 12 + 28 = %d.\n",add(12,28));return 0; }

好了,下面的工作自然是提交了。

root@letuknowit:/home/kris/calc/trunk# svn ci -m "kris add some test code" Sending trunk/main.c svn: Commit failed (details follow): svn: File '/trunk/main.c' is out of date

很抱歉,提交失敗了,原因是本地文件過期了(因為之前sally提交了對于main.c的修改)。原來如此,趕緊把sally的修改update過來。不過在這之前提供一個檢測本地文件是否已經(jīng)過期的辦法,還記得經(jīng)常用到的svn st命令吧

root@letuknowit:/home/kris/calc/trunk# svn st M main.c root@letuknowit:/home/kris/calc/trunk# svn st -u M * 6 main.c Status against revision: 7

看到那個*了吧,出現(xiàn)這個標記就說明本地副本的文件已經(jīng)過期了,需要執(zhí)行svn update了。

root@letuknowit:/home/kris/calc/trunk# svn up Conflict discovered in 'main.c'. Select: (p) postpone, (df) diff-full, (e) edit,(mc) mine-conflict, (tc) theirs-conflict,(s) show all options:

額滴個小心臟啊,又出錯了,還要做選擇題,糾結(jié)啊,糾結(jié)前還是看看各個選項都是做啥的吧

(p) postpone 暫時推后處理,我可能要和那個和我沖突的家伙商量一番 (df) diff-full 把所有的修改列出來,比比看 (e) edit 直接編輯沖突的文件 (mc) mine-conflict 如果你很有自信可以只用你的修改,把別人的修改干掉 (tc) theirs-conflict 底氣不足,還是用別人修改的吧 (s) show all options 顯示其他可用的命令

這里我們先選擇p稍候處理,系統(tǒng)會給出如下輸出,main.c前面的C標識說明這是一個沖突中的文件,需要手工處理以解決沖突。

(s) show all options:p C main.c Updated to revision 7. Summary of conflicts:Text conflicts: 1

如果這個時候你查看一下工作拷貝,你會發(fā)現(xiàn)多了幾個文件,對于每一個沖突的文件,svn會放置三個額外的未版本化文件到你的工作拷貝。

root@letuknowit:/home/kris/calc/trunk# ls -al m* -rw-r--r-- 1 root root 312 2012-09-20 16:35 main.c -rw-r--r-- 1 root root 216 2012-09-20 16:35 main.c.mine -rw-r--r-- 1 root root 156 2012-09-20 16:35 main.c.r6 -rw-r--r-- 1 root root 218 2012-09-20 16:35 main.c.r7

其中main.c.mine是融合了你的修改的版本,里面是你更新的內(nèi)容,main.c.r6是你做更新操作以前的版本,你是在這個版本的基礎(chǔ)上做的修改,main.c.r7是版本庫中的最新版本,這里有別人的修改,而就是這個修改和你的修改沖突了。這幾個文件可以自己去查看下,應(yīng)該很好理解。
對了,還有主角沒有登場,這個時候如果你看下mian.c的內(nèi)容,估計你又要郁悶了,和你原先的修改完全不一樣了。

root@letuknowit:/home/kris/calc/trunk# cat main.c #include <stdio.h> #include "add.h" #include "sub.h"int main() {printf("5 + 10 = %d.\n",add(5,10));printf("15 - 10 = %d.\n",sub(15,10)); <<<<<<< .mine//kris's testprintf("kris: 12 + 28 = %d.\n",add(12,28)); =======//sally's testprintf("sally: 60 - 33 = %d.\n",sub(60,33)); >>>>>>> .r7return 0; }

你會看到由小于號、等于號和大于號串組成的三個部分,其中小于號和等號之間的內(nèi)容是你的修改,而等號和大于號之間的修改是其他人的修改,在明確了沖突的原因之后,我們已經(jīng)知道怎么修改了,兩個人的修改都是需要保留的。
OK,那就保留所有的修改,刪除掉<、=和>,最后的結(jié)果如下。
小于號、等于號和大于號串是沖突標記,并不是沖突的數(shù)據(jù),你一定要確定這些內(nèi)容在下次提交之前得到刪除。

root@letuknowit:/home/kris/calc/trunk# cat main.c #include <stdio.h> #include "add.h" #include "sub.h"int main() {printf("5 + 10 = %d.\n",add(5,10));printf("15 - 10 = %d.\n",sub(15,10));//kris's testprintf("kris: 12 + 28 = %d.\n",add(12,28));//sally's testprintf("sally: 60 - 33 = %d.\n",sub(60,33));return 0; }

沖突解決了,下面的工作就是通知svn,我們已經(jīng)把沖突搞定了(使用svn resolved命令),下面該你了,可以看到svn將生成的幾個臨時文件刪除了。

root@letuknowit:/home/kris/calc/trunk# svn resolved main.c Resolved conflicted state of 'main.c' root@letuknowit:/home/kris/calc/trunk# ls -al m* -rw-r--r-- 1 root root 278 2012-09-20 17:07 main.c

接下來提交代碼,搞定收工。

root@letuknowit:/home/kris/calc/trunk# svn ci -m "kris add some test code" Sending trunk/main.c Transmitting file data . Committed revision 8.

svn中的沖突解決看起來非常的復(fù)雜,實則很簡單,只要掌握了原理,舉一反三,就可以得心應(yīng)手了!
原創(chuàng)文章請注明轉(zhuǎn)載于知蟻博客,本文地址:http://www.letuknowit.com/archives/svn-conflict-resolution
86%的同時也會看下面的內(nèi)容:
SVN:修改已經(jīng)提交的日志信息
svn checkout單個文件
導(dǎo)入文件到svn版本倉庫
通過svn命令行忽略單個文件
svn changelist命令的使用

總結(jié)

以上是生活随笔為你收集整理的SVN:冲突解决 合并别人的修改的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。