我们使用svn,而我使用git-svn保持理智。有一次,我们的svn服务器决定为某个文件夹返回403。它发生在每个人身上,而不仅仅是我。
因此,我无法执行git-svn变基。我看到此错误:
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中的更改的样子),但是由于该文件不存在,因此只会被炸掉。
所以我认为,如果我能够删除以前的修订,然后重新获取它们,则可能会起作用。我只是不确定该怎么做。我尝试以交互方式进行基准调整,然后删除一堆,但这没有用。
所以,有人知道如何取消获取已获取的版本吗?
现在更好的方法是git svn reset -r <rev>
,其中rev是要开始重新提取的修订版[[before。完成之后,只需运行git svn fetch
,它将重建其索引并在rev之后重新获取修订。
在.rev_map.$UUID
下面,删除问题分支的.git/svn
文件;然后倒退git-svn
生成的代表问题分支的分支(通常为trunk
)。要倒回分支,请运行git pack-refs --all
,git log $BRANCH
,在问题提交之前找到提交,然后编辑.git / packed-refs,以使分支现在指向较早的提交。然后运行git svn fetch
。它将从您现有的,已倒带的分支中重建rev-map,然后获取您尚未使用的svn提交,包括问题提交。现在,您应该能够正常进行基准调整和dcommit。
git svn reset -r <last-good-revision>
在大多数情况下都有效,除非要重新获取的提交是分支的第一次提交。即使在这种情况下,@Tobu's answer也可以使用。这是答案的改进版本。 (不同之处在于您可以使用git update-ref
编辑参考).git
目录.git/svn/refs/remotes/<your-svn-remote>/<your-svn-branch>
目录git update-ref refs/remotes/<your-svn-remote>/<your-svn-branch> <last-good-commit>
git svn fetch