2012-11-19 36 views
4

有人提出了一個單一的subversion commit來刪除一個文件,並添加了一個同名的新文件,這個文件由原始文件和155行新文件組成。在顛覆中,有人刪除了一個文件,並在一次提交中添加了修改,我該如何解決這個問題?

(我不知道他們是如何做到這一點。)

現在「SVN的日誌」只顯示歷史可以追溯到那個承諾,我也赴湯蹈火,如果我想的diff修訂該文件來自他們這樣做的時間點之前和之後。 (比如'svn diff url @ oldrev url @ newrev'而不是'svn diff -r n:m')

發生這種情況後,已經對這個文件進行了一些提交。 (約3)。

我該如何解決這個問題?

我在Linux上使用命令行'svn'客戶端。

+2

這已經有一段時間,因爲我已經做到了這一點,但你可以再次刪除該文件,恢復與該版本的變化原始刪除(忽略其他更改),並重新應用3個最近的提交? – Mightymuke

+1

我不想做任何我不確定的事情,並進一步搞亂了共享庫。我不知道如何在文件被刪除之前恢復文件,並以svn認爲是具有歷史記錄的原始文件的方式進行操作。如果我能做到這一點,那麼重新應用其餘的改變應該很容易。 – Tim

+0

是的 - 這當然是推薦的,你當然不希望冒你的生產代碼。我將創建一個臨時存儲庫來測試,或者如果這很困難,那麼在您的主要存儲庫中使用測試分支(甚至是同一分支中的測試文件夾)。 – Mightymuke

回答

2

Mightymuke實際上是正確的:

下面是說明:

  1. 記下新創建的文件(我稱他們爲R1 ..至Rn)
  2. 注修訂版的所有版本,當原始文件被刪除(我稱之爲Rd)
  3. 檢出工作副本至少有此文件
  4. 刪除新文件並提交更改並提交郵件中的狀態File添加錯誤提交R1(州的修訂,並確保每個人都可以理解爲什麼這是錯的加入)
  5. 讓你workingcopy(「SVN更新」)
  6. 的更新,如果使用TortoiseSVN,使用show日誌,並在歷史上找到路,點擊它並右鍵單擊已刪除的文件,然後選擇「還原此版本中的更改」。請勿在整個版本中使用此版本,因爲那樣您也會撤消其他更改。在其他操作系統使用反向合併爲這個( 「 - C-RD」 是指例如 「-C-50」,如果50是你刪除的文件的修訂版):

    SVN合併-C-RD

  7. 將當前文件內容從已刪除的文件複製到恢復的並提交(在您的提交消息中聲明撤消修訂R2..Rn)。另一種方法:你可以重新創建每個舊版本,並分別提交它們(註明原始版本R2,...,RN在每一個提交信息)

+0

我沒有使用tortoiseSVN,我在Linux上使用命令行svn客戶端。我不知道你的#5「更新」是什麼意思。你的#6是我不知道該怎麼做的部分。我知道如何使用'svn merge'來恢復一個提交,但是這會真正恢復原始文件的歷史嗎? – Tim

+0

是的,它會使以前刪除的文件的svn副本,並保持其歷史。在#6之後提交之前,你可以用svn status檢查它你可以看到一個「A」和一個「+」作爲恢復文件的狀態。這意味着您從共享相同歷史記錄的回購中的其他位置(或修訂版本)複製該文件。 –

0

下面是命令:

$ svn log affected # Find the last rev that is good, and write it down. 
$ svn rm affected 
$ svn ci -m'Reverting to save.' affected 
$ svn cat -rGOOD_REV affected > affected 
$ svn up # important 
$ svn add affected 
$ svn ci -m'Readding damaged file.' affected 
$ svn up # important 
# Get revisions after bad import 
$ svn diff -rBAD_REV:BAD_REV_PLUS_ONE > diff1.txt 
$ patch -p0 < diff1.txt 
$ svn ci -m'Rescued -rBAD_REV_PLUS_ONE.' affected 
$ svn diff -rBAD_REV_PLUS_ONE:BAD_REV_PLUS_TWO > diff2.txt 
$ svn ci -m'Rescued -rBAD_REV_PLUS_TWO.' affected 
+0

這沒關係,因爲我已經有了修訂號,但是你的第一個命令不起作用。受影響的'svn日誌'將在最後修正版之前停止。另外,請你解釋一下,如何運行'svn rm',然後將文件放回並運行'svn add'恢復原始歷史記錄?在我看來,這會讓我回到我已經處於相同的境地,從'svn add'之後的版本開始。 – Tim

0

我知道這是一個古老的問題,但它似乎還沒有一個簡單的答案呢。

最初描述的問題很容易做到。在一次提交中,您刪除了一個文件。在稍後的提交中,您重新添加該文件。這打破了兩個文件名稱相同的svn歷史記錄。

修復很簡單。您需要執行最新文件svn rmsvn cp正確的預先刪除的文件修訂版,然後手動更新最新更新的文件並重新檢入。

例如,假設在myFile.h 1234修訂版刪除了:

$ cp myFile.h myFile.h.latest  # save copy of latest edits. 
$ svn rm myFile.h     # remove file from svn 
$ svn cp [email protected] myFile.h  # restore the pre-deleted revision (along with history) 
$ cp myFile.h.latest myFile.h  # overwrite local copy with latest edits 
$ svn ci myFile.h     # save to SVN 
相關問題