2010-01-20 41 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,它将重建其索引并在之后重新获取修订版。