簡體   English   中英

合並后恢復svn

[英]svn revert after merge

我已經在兩個分支之間完成了svn合並-未簽入-現在我要“取消合並”工作副本中的某些文件。 類似於以下內容:

svn co svn://myserver/repo/branches/foo@1000 foo
cd foo
svn merge svn://myserver/repo/branches/foo@1000 \
          svn://myserver/repo/branches/bar@1000

(注意:我想使用svn merge ,而不僅僅是從bar的工作副本中復制文件,因為(1)存在一些合法的合並,即對foobar進行的不相關更改為相同的文件,以及(2)一些文件已在bar刪除,我簽foo也想從foo刪除它們。)

我想檢入大多數合並文件,但是其中一些我想排除bar分支中的更改,並保留foo分支中的現有文件。 所以我嘗試:

svn revert baz/qux.quux

這什么也沒做。 qux.quux仍然具有來自bar分支的更改。 我嘗試svn status ; 它是空白。 我嘗試從foo分支的常規副本進行復制:該文件現在具有正確的內容,但是svn diff現在顯示了bar < foo diffs bar < foo svn revert再次:現在我們已經拿到了bar更改回。 讓我們嘗試svn info

Path: baz/qux.quux
Name: qux.quux
Working copy root path: /home/mydir/foo
URL: svn://myserver/repo/branches/foo/baz/qux.quux
Repository root: svn://myserver/repo
Repository UUID: [whatever]
Revision: 1000
Node Kind: file
Schedule: normal
Last Changed Author: [author of last change on bar, not foo]
Last Changed Rev: [rev of last change on bar, not foo]
Last Changed Date: [date of last change on bar, not foo]

那么,如何返回fooqux.quux版本呢? 以及如何清除工作副本中的“不良”狀態信息?

我覺得我從根本上誤解了svn merge

看來您想通過選擇櫻桃( SVN)進行合並,這最多是一個hack 您需要成為svn合並專家才能做到這一點。 其他版本控制系統(hg,darcs,bzr) better支持這種開發方法,但也有自己的缺點。 因此,選擇您的毒葯並習慣它。

David,使用PEG修訂是否明智而必要的決定? 我只是嘗試使合並盡可能容易,並要求您使用新的干凈工作副本從頭開始重新合並,並在此處顯示全部,完整的真實命令和輸出 (UUID不是私有數據,可以通過測試的回購網址文件:///)。

我的測試結果(合並文件頭和還原單個文件)顯示了預期的結果(您可以在我的測試用例中重新檢查它-存儲庫已打開)

  • 您好,有一些歷史記錄的存儲庫: http : //mayorat.ursinecorner.ru : 8088/ svn/Hello/
  • 目標分支Leichtbau-Deutsch: http ://mayorat.ursinecorner.ru:8088/svn/Hello/branches/Leichtbau-Deutsch/
  • 來源分支branche-francaise: http ://mayorat.ursinecorner.ru:8088/svn/Hello/branches/branche-francaise/

步驟與操作

>svn co http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/Leichtbau-Deutsch/
A    Leichtbau-Deutsch\Hello.en.txt
A    Leichtbau-Deutsch\Hello.fr.txt
A    Leichtbau-Deutsch\Hello.de.txt
 U   Leichtbau-Deutsch
Checked out revision 37.

>cd Leichtbau-Deutsch

>svn merge http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/branche-francaise/
--- Merging r26 through r37 into '.':
U    Hello.fr.txt
Conflict discovered in 'Z:/Leichtbau-Deutsch/Hello.de.txt'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: tc
U    Hello.de.txt
--- Recording mergeinfo for merge of r26 through r37 into '.':
 U   .

>svn status
 M      .
M       Hello.de.txt
M       Hello.fr.txt

>svn revert Hello.fr.txt
Reverted 'Hello.fr.txt'

>svn st
 M      .
M       Hello.de.txt

最后的預期結果

PS:如果您願意,我可以使用PEG修訂版重復此測試。 但是-我更喜歡使用對應分支的真實修訂版,並且(與合並-還原無關)我必須執行(如果內存對我有用)將svn up (並盲目合並)到分支HEAD,然后才能提交合並-設置,因為您的svn co svn://myserver/repo/branches/foo@1000檢出非HEAD版本和SVN中的版本歷史必須是線性的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM