使用 git-svn 克隆克隆非标准 svn 存储库时缺少分支

问题描述 投票:0回答:2

我是一个完全的 git 新手,我想使用 git-svn 克隆我的 svn 存储库。但是,运行克隆命令后,分支丢失了。

回购布局如下:

trunk/
branches/team/releases/release-1
branches/team/releases/release-2
...
branches/development/user1/feature1
branches/development/user1/feature2
branches/development/user2/feature3
branches/development/user2/feature4
...
tags/release1
tags/release2

我使用的命令是:

git svn clone --trunk=/trunk --branches=branches/*/* --tags=tags/*/* --prefix=svn/ --authors-file=authors.txt <my-repo> <git-repo-name>

我尝试将分支选项修改为

/branches/development/user1/*
/branches/development/user1/*/*
(也同时使用两者)并再次运行
clone
命令以查看是否拾取了任何其他分支,但它们没有。

可以再次运行

clone
还是我必须从头开始并删除 git 存储库?

克隆后运行

git branch -r
我能看到的只是:

svn/development/user1
svn/development/user1
svn/team/releases
svn/trunk
note that all the tags are present but omitted for brevity

如何获得丢失的树枝?

这不是使用 Git-Svn 克隆非标准 Svn 存储库如何通过 git-svn 使用嵌套分支的重复。

git svn git-svn git-clone
2个回答
4
投票

事实上可以在不重新克隆整个存储库的情况下完成此操作,这对于大型颠覆存储库可能需要几个小时。我通过编辑

config
目录中的
.git
文件来正确设置我的分支和标签来完成此操作。

如果你做一个简单的

git svn fetch
,什么都不会发生。诀窍是欺骗/强制 Git 重新获取所有修订版:

git svn fetch -r 0:HEAD

此命令会导致所有标签/分支被引入,而无需经历漫长而繁琐的主干导入,它足够聪明地跳过在初始运行中已导入的主干修订。我现在在现有的 Git 存储库中拥有 SVN 标签/分支,无需新克隆。


0
投票

您可以多次指定 --branches 标签。 来自文档

这些是 init 的可选命令行选项。每个标志都可以指向相对存储库路径 (--tags=project/tags) 或完整 url (--tags=https://foo.org/project/tags)。您可以指定多个 --tags 和/或 --branches 选项,以防您的 Subversion 存储库将标签或分支放置在多个路径下。选项 --stdlayout 是将 trunk、tags、branches 设置为相对路径的简写方式,这是 Subversion 的默认设置。如果还给出了任何其他选项,则它们优先。

对于您的情况,请尝试:

git svn clone \
  --branches=branches/team/releases/* \
  --branches=branches/development/user1/* \
  --branches=branches/development/user2/* \

...等等

是否可以再次运行克隆,或者我必须从头开始并删除 git 存储库?

一般来说你应该从头开始尝试。 该工具并不是一个更新脚本。

© www.soinside.com 2019 - 2024. All rights reserved.