git-svn clone失败“致命:不是有效的对象名称”

时间:2012-07-06 15:37:20

标签: git-svn

在做git svn clone -s https://svn.example.com/repo/的同时,我收到了以下输出:

r3073 = a6132f3a937b632015e66d694250da9f606b8333 (refs/remotes/trunk)
Found possible branch point: https://svn.example.com/repo/trunk => https://svn.example.com/repo/branches/v1.3, 3073
W: Refspec glob conflict (ref: refs/remotes/trunk):
expected path: repo/branches/trunk
    real path: repo/trunk
Continuing ahead with repo/trunk
W: Refspec glob conflict (ref: refs/remotes/trunk):
expected path: repo/branches/trunk
    real path: repo/trunk
Continuing ahead with repo/trunk
W: Refspec glob conflict (ref: refs/remotes/trunk):
expected path: repo/branches/trunk
    real path: repo/trunk
Continuing ahead with repo/trunk
W: Refspec glob conflict (ref: refs/remotes/trunk):
expected path: repo/branches/trunk
    real path: repo/trunk
Continuing ahead with repo/trunk
fatal: Not a valid object name refs/remotes/tags/Sync Controllers
cat-file commit refs/remotes/tags/Sync Controllers: command returned error: 128

正在运行git branch -a

remotes/tags/Sync%20Controllers
remotes/tags/v1.1
remotes/trunk
remotes/v1.2

我认为问题在于“遥控器/标签/同步控制器”!=“遥控器/标签/同步%20控制器”。

5 个答案:

答案 0 :(得分:16)

SVN上的标签中有一个空格,但是git中的标签将此空间转换为%20(URL编码)。要解决此问题,只需手动添加一个带有逐字名称的新标签:

cd .git/refs/remotes/tags/
mv Sync%20Controllers Sync\ Controllers

然后再次运行git svn clone命令。

(通常你会用git tag OLDTAG NEWTAG执行此操作,但git不允许我定义带有空格的标记。标记文件只是包含相关提交哈希的文本文件。)

答案 1 :(得分:4)

您可以使用git-svn服务器端替代,SubGit以避免许多git-svn转换问题。

我是一名SubGit开发人员,可以说我们已经做了很多工作来解决上面提到的字符翻译问题;在此特定情况下,标记将转换为refs/tags/Sync+Controllers标记。

另请注意,git-svn已将Subversion标记转换为分支而非标记。

答案 2 :(得分:2)

我今天遇到了这个问题,并认为这个包含其中步调的分支并不重要,我只是运行

git branch -r -d partialPayment%202.4

重新运行git svn fetch 它跳过当前分支并继续抓住下一个分支。

答案 3 :(得分:0)

我认为空格的问题在Git> = 1.8.0中是固定的(参见:#786942)。

所以你应该升级它。

我已经测试了它,它似乎适用于最新版本的git。

请参阅GitHub主页:https://github.com/git/git

答案 4 :(得分:0)

我正在使用git 1.29.2并且也遇到了问题。此外,它正在运行到Windows Server 2016中,并且git在cygwin下。

正在检入/** * Filter orders formatterd billing address. * * @since 3.8.0 * @param string $address Formatted billing address string. * @param array $raw_address Raw billing address. * @param WC_Order $order Order data. @since 3.9.0 */ function filter_woocommerce_order_get_formatted_billing_address( $address, $raw_address, $order ) { // Get meta $value = $order->get_meta( 'billing_company_id' ); // NOT empty if ( ! empty ( $value ) ) { // Append $address .= $value; } return $address; } add_filter( 'woocommerce_order_get_formatted_billing_address', 'filter_woocommerce_order_get_formatted_billing_address', 10, 3 ); ,并且文件夹在那里没有空格,/GitMigration/.git/svn/refs/remotes/origin没什么变化。

但是,在%20中,出现问题的标记没有出现,没有名称,也没有哈希。

该问题应该还有另一个与之相关的问题,该问题会导致产生错误,而不仅仅是错误。

查看packed-refs后发现了以下几行的重复:

./.git/config

每当我运行git-svn clone语句时,就会产生这种情况。因此,我确实从配置文件中删除了这些文件,保存并再次运行,但是这次使用branches = server/branches/*:refs/remotes/origin/* tags = server/tags/*:refs/remotes/origin/tags/* ,以防止再次出现重复的行,瞧!问题解决了。