我需要取消git-svn的一些修订版

时间:2010-01-20 21:22:27

标签: svn git git-svn

我们使用svn,并使用git-svn来保持理智。有一次,我们的svn服务器决定为某个文件夹返回403。它发生在每个人身上,而不仅仅是我。

因此,我无法进行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的变化),但由于文件不存在,它只会爆炸。

所以我认为如果我能够删除过去的修订版,然后重新获取它们,它可能会起作用。我只是不确定该怎么做。我尝试以交互方式重新定位然后删除一堆,但这不起作用。

那么,有谁知道如何取消已经获取的版本?

3 个答案:

答案 0 :(得分:10)

现在更好的方法是git svn reset -r <rev>,其中 rev 之前的修订,您要开始重新获取。完成后,只需运行git svn fetch,它将重建其索引并在 rev 之后重新获取修订版。

答案 1 :(得分:8)

首先备份.git目录。

删除.rev_map.$UUID下方问题分支的.git/svn文件;并回滚代表问题分支的git-svn生成的分支(通常为trunk)。要回滚分支,运行git pack-refs --allgit log $BRANCH,在问题提交之前找到提交,并编辑.git / packed-refs,以便分支现在指向较早的提交。然后运行git svn fetch。它将从您现有的重绕分支重建rev-map,然后获取您尚未拥有的svn提交,包括问题提交。你现在应该可以正常变换和拒绝。

答案 2 :(得分:1)

git svn reset -r <last-good-revision>@dOxxx's answer)很简单,并且在大多数情况下都有效,除非要重新获取的提交是分支的第一次提交。 @Tobu's answer即使在这种情况下也可以使用。

这是@Tobu的改进版本。 (不同之处在于您可以使用git update-ref命令来编辑参考)

  1. 备份您的.git目录
  2. 删除.git/svn/refs/remotes/<your-svn-remote>/<your-svn-branch>目录
  3. git update-ref refs/remotes/<your-svn-remote>/<your-svn-branch> <last-good-commit>
  4. 现在git svn fetch将在<last-good-commit>之后重新获取SVN提交