我需要从git-svn中撤销一些修订版本。

7
我们使用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错误的文件夹中。在我的文件系统中,服务/活动服务文件夹不存在。我认为它试图修改文件(这就是svn更改的样子),但由于文件不存在,它就会崩溃。
所以我认为,如果我能删除过去的版本,然后重新获取它们,它可能会起作用。我只是不确定如何做到这一点。我尝试了交互式地重新定位,然后删除了一堆东西,但那并没有起作用。
那么,有人知道如何取消已经获取的版本吗?
3个回答

11

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


9

首先备份你的 .git 目录。

删除问题分支下面的 .git/svn 目录中的 .rev_map.$UUID 文件;然后回退代表问题分支(通常是 trunk)的 git-svn 生成的分支。要回退该分支,请运行 git pack-refs --all、git log $BRANCH,找到问题提交之前的提交,并编辑 .git/packed-refs,使该分支现在指向较旧的提交。然后运行 git svn fetch。它将从你现有的、回退的分支重新构建 rev-map,然后获取你还没有的 svn 提交,包括问题提交。现在你应该可以正常 rebase 和 dcommit 了。


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 提交

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接