2010-01-20 73 views
6

我們使用svn,並且我使用git-svn來保持理智。有一次,我們的svn服務器決定爲某個文件夾返回一個403。這發生在每個人身上,而不僅僅是我。我需要從git-svn取下一些修訂版

因此,我無法做一個git-svn rebase。我看到這個錯誤:

Index mismatch: 164adbb93408bed4ff0bdbcbf07bdfb2c49ed0ce != 64443edc6089f7f737e51cf8ea5ff3680c95a7e9 
rereading 0f2fa25d15a35ac3fe311e3e0142f1d9e5a3be18 
    M test/system-tests/src/test/java/com/garmin/elevation/ElevationManagerSystemTest.java 
    M test/activity-test/src/test/java/com/garmin/elevation/ElevationManagerIntegrationTest.java 
    M test/activity-test/src/test/java/com/garmin/mb/activity/service/ActivityServiceManagerIntegrationTest.java 
    M system/deployment/src/main/resources/oracle/releases/2.9-SNAPSHOT/110-preference/4-data.dml.sql 
    M pom.xml 
service/activity-service-1.2/src/main/java/com/garmin/activity/service/impl/ActivityServiceImpl.java was not found in commit 0f2fa25d15a35ac3fe311e3e0142f1d9e5a3be18 (r8845) 

它在最後抱怨的文件是在我們發生錯誤時返回403的文件夾中。在我的文件系統上,service/activity-service文件夾不存在。我相信它試圖修改這個文件(這就是svn的變化),但是由於該文件不存在,它只會被炸燬。

所以我認爲如果我能夠刪除過去的修訂版,然後重新獲取它們,它可能會正常工作。我只是不知道該怎麼做。我嘗試了交互式重新綁定,然後刪除了一堆,但那沒有奏效。

那麼,任何人都知道如何取消已獲取的版本?

回答

8

首先備份你的.git目錄。

刪除問題分支的.rev_map.$UUID文件,低於.git/svn;並倒帶代表問題分支的git-svn生成的分支(通常爲trunk)。要倒回分支,請運行git pack-refs --all,git log $BRANCH,在問題提交之前找到提交,並編輯.git/packed-refs,以便分支現在指向較舊的提交。然後運行git svn fetch。它會從現有的迴繞分支重建rev-map,然後獲取你還沒有的svn提交,包括問題提交。您現在應該可以重新綁定並正常提交。

9

一個更好的辦法,現在做,這是git svn reset -r <rev>其中修訂版是修訂要開始重新獲取之前。完成之後,只需運行git svn fetch,它將重建其索引並在之後重新獲取修訂版。