2017-02-20 28 views
9

假設我已經使用Windows資源管理器將文件A更名爲文件B,並創建了新的文件C撤銷TortoiseSVN中的修復移動

在Tortoise SVN中,我無意中使用文件AC上的「修復移動」,而不是AB。有沒有簡單的方法來撤消修復(並用正確的文件重做)?在這一點上不會進行更改。

我目前知道的唯一方法是恢復刪除和添加,這將恢復文件A,然後再次手動刪除該文件並正確地重做關聯。由於涉及多個文件,這有些涉及意外恢復本地更改的風險,所以如果有更好的方法,我很感興趣。

注意:儘管TortoiseSVN被用來產生問題,但svn控制檯的答案也是可以接受的。


這裏是文件A.txtB.txt的例子和C.txt一步一步:

A被重命名爲BC被本地添加

>svn st 
!  A.txt 
?  B.txt 
?  C.txt 

之後烏龜SVN「修復移動「錯誤應用A - >C

>svn st 
D  A.txt 
     > moved to C.txt 
?  B.txt 
A + C.txt 
     > moved from A.txt 

我的工作流程解決的情況,這我不是真正的快樂:

>ren C.txt C.txt.bak 
>svn revert C.txt A.txt 
>ren C.txt.bak C.txt 
>del A.txt 

從那裏我可以重做修復與正確的文件

>svn st 
!  A.txt 
?  B.txt 
?  C.txt 

在出髮狀況可能引發

我會愛,但似乎並不存在

svn mv --force --ignore-files A.txt B.txt 
svn add --force C.txt 

的方式,它忽略了一個已標記刪除,並允許從A到B的歷史記錄轉移,從A重新詮釋C作爲清潔的添加而不是transfering歷史

+0

我可能會弄錯它,但不想做的是從分段中刪除更改,然後手動修復重命名,然後執行階段提交。是對的嗎?如果是這樣,那麼這個過程的自動版本究竟是什麼 - 即 - 你將如何告訴SVN你真正想要的變化? –

+0

還有幾件事 - 風險究竟是什麼?如果您提交錯誤的文件,您會丟失數據/工作嗎?我們在談論多少個文件? –

+0

@LeftyGBalogh我莫名其妙地希望有一種方法可以恢復SVN狀態(例如'deleted')而不實際恢復文件。這將允許我正確地重做關聯。風險是在項目元文件和代碼文件之間獲得不一致的狀態,破壞版本歷史記錄或丟失本地更改。我們正在談論過去發生在我身上的一件事情,並可能在未來再次發生。我照顧過去的事件,但我對我的工作流程並不滿意。 – grek40

回答

2

還有就是涉及到的方式對A. 2個命令txt而不是當前工作流程中的4個命令(也影響C.txt)。 TortoiseSVN的 「修復移動」 是正確應用後,執行:

svn revert A.txt 
del A.txt 

svn stat將是:

!  A.txt 
?  B.txt 
A + C.txt 

從龜SVN你現在可以A.TXT和B.txt之間的 「維修搬家」,導致在正確的狀態:

D  A.txt 
     > moved to B.txt 
A + B.txt 
     > moved from A.txt 
A + C.txt 

相同的技術可以在TortoiseSVN的UI可以使用(還原A.TXT,然後從資源管理器刪除A.TXT)。之所以這麼做,是因爲移動狀態與缺少的文件相關聯,而不是與非版本化的文件相關聯。對C的唯一修改txt是,它是通過使用修復移動命令添加的(無論如何你都可以添加)。

「修復移動」命令只有在完全相同的兩個文件是 選擇,一個具有「失蹤」和其他「非版本」 狀態的作品。只有這樣TortoiseSVN才能找出哪個文件被重命名爲 哪個文件。

https://tortoisesvn.net/repairmoves.html

恢復A.TXT的&刪除後你結束了丟失的文件(A.TXT)和非版本的文件(B.txt)再次,由於不正確應用修復前移動。因此,您可以在這兩個文件之間再次應用修復移動。

+1

感謝您的回答。這也將'A'的歷史鏈接到'C',但我想我只是要求一個簡單的解決方案,以便TortoiseSVN在後臺完成一些工作(修復移動),並且它不支持容易修復。這個額外的歷史鏈接可能不是問題。 – grek40

+0

啊,你是對的 - 在提交'C'後''也有'A'的歷史!這很奇怪,因爲在這種情況下提交之前''svn stat'沒有列出''從文件'C'的A.txt'移動。無論如何,我很高興它有幫助。 – Constantin