1. 程式人生 > >SVN解決衝突(合併別人的修改)

SVN解決衝突(合併別人的修改)

我們可以使用 svn status -u 來預測衝突,當你執行svn update一些有趣的事情發生了:

$ svn update
U  INSTALL
G  README
C  bar.c
Updated to revision 46.

U和G沒必要關心,檔案乾淨的接受了版本庫的變化,檔案標示為
U表明本地沒有修改,檔案已經根據版本庫更新。
G標示合併,標示本地已經修改過,與版本庫沒有重迭的地方,已經合併。
C表示衝突,說明伺服器上的改動同你的改動衝突了,你需要自己手工去解決。


當衝突發生了,有三件事可以幫助你注意到這種情況和解決問題:
  • Subversion在更新時列印C標記,並且標記這個檔案已衝突。
  • 如果Subversion認為這個檔案是可合併的,它會置入衝突標記—特殊的橫線分開衝突的”兩面”—在檔案裡視覺化的描述重疊的部分(Subversion使用svn:mime-type屬性來決定一個檔案是否可以使用上下文的,以行為基礎的合併)
  • 對於每一個衝突的檔案,Subversion放置三個額外的未版本化檔案到你的工作拷貝:

filename.mine
你更新前的檔案,沒有衝突標誌,只是你最新更改的內容。(如果Subversion認為這個檔案不可以合併,.mine檔案不會建立,因為它和工作檔案相同。)
filename.rOLDREV
這是你的做更新操作以前的BASE版本檔案,就是你在上次更新之後未作更改的版本。
filename.rNEWREV
這是你的Subversion客戶端從伺服器剛剛收到的版本,這個檔案對應版本庫的HEAD版本。

這裡OLDREV是你的.svn目錄中的修訂版本號,NEWREV是版本庫中HEAD的版本號。

舉一個例子,Sally修改了sandwich.txt,Harry剛剛改變了他的本地拷貝中的這個檔案並且提交到伺服器,Sally在提交之前更新它的工作拷貝得到了衝突:

$ svn update
C  sandwich.txt
Updated to revision 2.
$ ls -1
sandwich.txt
sandwich.txt.mine
sandwich.txt.r1
sandwich.txt.r2

在這種情況下,Subversion不會允許你提交sandwich.txt,直到你的三個臨時檔案被刪掉。

$ svn commit -m "Add a few more things"
svn: Commit failed (details follow):
svn: Aborting commit: '/home/sally/svn-work/sandwich.txt' remains in conflict

如果你遇到衝突,三件事你可以選擇:

  • “手動”合併衝突文字(檢查和修改檔案中的衝突標誌)。
  • 用某一個臨時檔案覆蓋你的工作檔案。
  • 執行svn revert 來放棄所有的本地修改。

一旦你解決了衝突,你需要通過命令 svn resolved 讓Subversion知道,這樣就會刪除三個臨時檔案,Subversion就不會認為這個檔案是在衝突狀態了。[6]

手工合併衝突
假如你和同事Sally,同時編輯了sandwich.txt。Sally提交了修改,當你準備更新你的工作拷貝,衝突發生了,我們不得不去修改sandwich.txt來解決這個問題。首先,看一下這個檔案:

$ cat sandwich.txt
Top piece of bread
Mayonnaise
Lettuce
Tomato
Provolone
<<<<<<< .mine
Salami
Mortadella
Prosciutto
=======
Sauerkraut
Grilled Chicken
>>>>>>> .r2
Creole Mustard
Bottom piece of bread

小於號、等於號和大於號串是衝突標記,並不是衝突的資料,你一定要確定這些內容在下次提交之前得到刪除,前兩組標誌中間的內容是你在衝突區所做的修改:

<<<<<<< .mine
Salami
Mortadella
Prosciutto
=======

後兩組之間的是Sally提交的修改衝突:

=======
Sauerkraut
Grilled Chicken
>>>>>>> .r2

通常你並不希望只是刪除衝突標誌和Sally的修改—當她收到三明治時,會非常的吃驚。所以你應該走到她的辦公室或是拿起電話告訴Sally,你沒辦法從從義大利熟食店得到想要的泡菜。[7]一旦你們確認了提交內容後,修改檔案並且刪除衝突標誌。

Top piece of bread
Mayonnaise
Lettuce
Tomato
Provolone
Salami
Mortadella
Prosciutto
Creole Mustard
Bottom piece of bread

現在執行svn resolved,你已經準備好提交了:

$ svn resolved sandwich.txt
$ svn commit -m "Go ahead and use my sandwich, discarding Sally's edits."

注意svn resolved不像我們本章學過的其他命令一樣需要引數,在任何你認為解決了衝突的時候,只需要小心執行svn resolved,一旦刪除了臨時檔案,Subversion會讓你提交這檔案,即使檔案中還存在衝突標記。

複製檔案到你的工作檔案

如果你只是希望取消你的修改,你可以僅僅拷貝Subversion為你生成的檔案替換你的工作拷貝:

$ svn update
C  sandwich.txt
Updated to revision 2.
$ ls sandwich.*
sandwich.txt  sandwich.txt.mine  sandwich.txt.r2  sandwich.txt.r1
$ cp sandwich.txt.r2 sandwich.txt
$ svn resolved sandwich.txt

腳註:使用svn revert

如果你得到衝突,經過檢查你決定取消自己的修改並且重新編輯,你可以恢復你的修改:

$ svn revert sandwich.txt
Reverted 'sandwich.txt'
$ ls sandwich.*
sandwich.txt

注意,當你恢復一個衝突的檔案時,不需要再執行svn resolved。

備註:

本文轉自svn中文手冊 http://svndoc.iusesvn.com/svnbook/1.4/
衝突網址:http://svndoc.iusesvn.com/svnbook/1.4/svn.tour.cycle.html#svn.tour.cycle.resolve

相關推薦

SVN解決衝突(合併別人修改)

我們可以使用 svn status -u 來預測衝突,當你執行svn update一些有趣的事情發生了: $ svn update U INSTALL G README C bar.c Updated to revision 46. U和G沒必要關

SVN解決衝突的幾種情況

SVN是非常實用也好用的版本管理工具,但不是萬能的,有時候還需要你手動解決。 一般在你準備提交一個新版本時,首先update一遍,有時候update完之後發現跟本地版本有衝突,這時候,在有衝突檔案的地方存在4個檔案: 1)petgeniusupdatelayer.ccb,這

linux上SVN解決衝突命令

svn resolve --accept working abc.c (這條命令會刪除abc.c.mine abc.c.r1234 abc.c.r1235等檔案) 注意,此處的accept前是

svn解決衝突revert和resolved用法總結

解決版本衝突的命令。在衝突解決之後,需要使用svnresolved來告訴subversion衝突解決,這樣才能提交更新。衝突發生時,subversion會在WorkCopy中儲存所有的目標檔案版本(上次更新版本、當前獲取的版本,即別人提交的版本、自己更新的版本、目標檔案。

SVN衝突解決 合併別人修改zz

在專案中,基本不可避免多個人同時參與一個專案,因此就可能會出現多個人同時修改一個檔案的情況,就不可避免的會出現衝突。svn已經很聰明瞭,如果你和別人對於同一個檔案的修改之間不存在重疊(比如你在檔案最開始增加了一行,而你同事在檔案的結尾出增加了一行),svn會自動將你們的修

SVN進階解決衝突,版本控制工具

什麼時候容易出現衝突? 多個人同時修改了同個檔案中的同一行程式碼 無法進行對比的二進位制檔案,比如圖片等 如何解決衝突? 例項分析 下面,我們根據實際應用場合,模擬出現衝突,到如何通過SVN提供的Edit Conflicts 介面,通過顏色標識和操作按鈕,快速準確地合併

SVN程式碼衝突解決方案

原文連結:https://www.cnblogs.com/dunitian/p/4333443.html 對於剛接觸svn的人來說,svn衝突後,不能提交是件讓人很鬱悶的事情。最讓人鬱悶的事,是程式碼間的覆蓋。你把我程式碼蓋了,我會很火大的。誰把誰的蓋了都不爽。 為什麼會出現程式碼

git合併分支時如何解決衝突

合併時有衝突  $ git merge --no-ff modifyGR error: Merging is not possible because you have unmerged files. hint: Fix them up in the work tree,

SVN(TortoiseSVN)詳細教程(三)--SVN更新及如何解決衝突檔案

一. SVN更新(SVN Update)及如何解決衝突檔案: 1. SVN update: 更新原生代碼與SVN伺服器上最新的版本一致,只要在需要更新的資料夾上點選右鍵或者在檔案下空白處點選右鍵,選擇”SVN Update” (獲取指定版本中

SVN解決版本衝突

SVN衝突出現場景 如今是一個團結協作的時代,開發一個系統,往往會多人協作共同完成。版本管理是必不可少的,常用的軟體有Git,SVN等。今天說一下,SVN管理版本時,如果出現衝突後,如何快速解決衝突。 首先說明一個問題,有一種情況無論如何都不會出現衝突。假如有一個叫qaz

在Eclipse上使用SVN,安裝、提交、拉取程式碼、解決衝突等操作---------健康之家

一,什麼是SVN ?    svn是一種版本控制軟體,主要作用就是用於公司的專案管理。這裡先大概說一下svn的使用流程。    首先由專案經理在SVN伺服器上建立SVN倉庫(放專案的地方),併為各個專案成員註冊對應的賬號。在開始一個專案時,一般專案經理

關於Git的提交(本篇為同一分支的提交、不同分支的合併以及解決衝突的方法)

一、同一分支的提交 1.修改過的檔案會出現一個‘>’ 2.右鍵單擊工程檔案-Team-Commit(將修改過的檔案提交到本地倉庫) 3.如圖所示,左側為要提交到本地倉庫的檔案(預設展示所有修改過的檔案),右側可以填寫你修改了什麼,用做備註 4.將在本地

淺談svn版本衝突解決方法

(1)合理分配專案開發時間 譬如: 甲:上午開發 乙:下午開發 (2)合理分配專案開發模組,為每個人分配單獨的模組 譬如: 甲:負責開發購物車模組 乙:負責開發文章模組 (3)通過SVN解決版本衝突問題             (1)更新伺服器端資料到本地        

git合併解決衝突的步驟是

先本地直接提交程式碼:git push origin master 如果別人在自己之前提交了修改,git會提示push失敗,需要先pull遠端程式碼:git pull origin/master

本地修改後,再拉取遠端程式碼,解決衝突

git add . git commit -m "修改內容" git pull origin master 如果出現Unlink of file'*******'failed.Should I try again?(y/n) 開啟工作管理員,把adb.exe停止掉,然

intellij idea svn使用一 匯入、更新、提交、解決衝突

大體上是轉載,針對版本14有一些特殊的新增。 檢視svn的資源庫:   下面的多出了一個svn的視窗,在左邊有加號可以新增一個svn的庫 輸入svn的地址,我用的是本地的測試,所以地址為svn://127.0.0.1/newproject 根據服務不同這個

SVN同步,更新,解決衝突的方法

給初學者一個教程,來講一下,我們開發過程中,如何使用SVN. 如圖,我們一般都是選中專案以後,右鍵 -team-與資源庫同步 下面會跳轉到myeclipse的 同步的模式,下圖中的三個按鈕很重要,是我們同步的三個主要按鈕。 這個藍色的按鈕,在沒有衝突的前提

如何在Eclipse上使用SVN,安裝、提交、拉取程式碼、解決衝突等操作

將SVN整合到Eclpise 第一種方法 第一種方法是通過zip檔案在Eclipse中安裝(本外掛適用Eclipse 4.5以下版本,4.6未驗證.4.7上不能使用) svn外掛(中文版)下載地址:點選開啟連結 在選單欄找到最右的Help,選擇安裝新軟體 :

SVN程式碼衝突解決方案小集合

對於剛接觸svn的人來說,svn衝突後,不能提交是件讓人很鬱悶的事情。最讓人鬱悶的事,是程式碼間的覆蓋。你把我程式碼蓋了,我會很火大的。誰把誰的蓋了都不爽。 為什麼會出現程式碼衝突問題呢,因為不同的人,同時修改了同一個檔案的同一個地方,這個時候,他提交了,你沒有提交,你就提交不了,這個時候,你要先更新,更新

SVN版本衝突解決

版本衝突原因: 假設A、B兩個使用者都在版本號為100的時候,更新了kingtuns.txt這個檔案,A使用者在修改完成之後提交kingtuns.txt到伺服器,這個時候提交成功,這個時候kingtuns.txt檔案的版本號已經變成101了。同時B使用者在版本號為100的k