git svn - 在提交中找不到

问题描述 投票:21回答:5

在使用git-svn下拉(相当大)的svn repo的过程中,我遇到了以下错误消息(替换为真实信息的通用信息):

Found possible branch point: svn://server/project/trunk/dir => svn://server/project/branches/branchname, <revision>
Initializing parent: refs/remotes/branchname@<revision>
project/trunk/dir/file was not found in commit <hash> (r<revision>)

我在other posts读过,可以通过一些修补来“取消”这个信息。但是,我宁愿不要失去历史,尽可能无痛地前进。

我如何让git-svn fetch继续?

git git-svn
5个回答
29
投票

这可能意味着您正在接收一个新的svn修订版,该修订版修改了一个文件(由于某种原因)在您的git commit中不存在等同于父svn修订版的文件。导致这种情况的一种非常简单的方法是与--ignore-paths不一致(最初没有办法配置它们,并且必须在每个可能获取的git-svn命令行上输入它们)。另一种方法是让svn服务器端的某个人更改存储库权限,以便突然出现(从您的角度来看)您的git存储库没有历史记录的整个文件子树。

通过这个直接问题并继续git-svn fetch的最简单方法是使用--ignore-paths(或更好的svn-remote.svn.ignore-paths配置条目)来忽略树的问题部分。您可以使用命令行参数来传递单个修订版,直到有人在svn端修改它时才会再次遇到问题。

如果你想在没有--ignore-paths的情况下恢复,那么你需要修复父修订版,以便它包含被修改的文件。我特意写了git-svn reset来做你所提到的“取消取消”,而不是修修补补。它可以将您的svn遥控器重置回文件真正创建的位置,以便将其集成到历史记录中。这不会消除您的工作副本,但您需要在此新历史记录中重新显示任何工作分支。


2
投票

当存储库有svn:externals urls设置时,我从git svn fetch得到了这个错误,而我的--ignore-paths regexp会将它们过滤掉。


1
投票

这里的一个快速解决方案是在出现问题之前将其重置为修订版。

git svn reset <a past revision>

例如,当错误消息提及r1000时,例如运行git svn reset r990

并运行git svn rebasegit svn fetch


0
投票

在Windows上与文件名中的特殊字符(此处为:变音符号)相关的错误:

(...)
r36770 = 24d589b34b952dd13ee8d231e7ce4d675ec1a82c (refs/remotes/origin/xxx)
    M   doc/specification/xxx/2013 03 07 Workflows.xls
xxx/branches/xxx/doc/specification/xxx/2013 03 07 München.xls 
    was not found in commit 24d589b34b952dd13ee8d231e7ce4d675ec1a82c (r36770)

有问题的文件确实在引用的修订版中,但git svn无法看到它。

我能够通过为语言和语言环境设置环境变量来解决这个问题,如下所示:

SET LANG=C
SET LC_ALL=C

您可以在运行git svn之前执行这些命令,但只有当前shell存在时它们才会持久存在。如果要永久设置它们,请转到“控制面板”>“系统”>“高级系统设置”>“环境变量”。


0
投票

我遇到了包含unicode字符的目录名称的问题,即使错误抱怨目录中的特定文件。我试过了

git svn fetch --ignore-paths path/up/to/filename

与文件的完整路径,但这不起作用。也没有用unicode字符尝试目录的完整路径。

最终工作的命令是带有unicode字符的目录的父目录,如下所示:

git svn fetch --ignore-paths path/up/to/but-not-including-unicode-chars
© www.soinside.com 2019 - 2024. All rights reserved.