我有一个 SVN 存储库,其当前结构如下:
最初具有以下结构:
也就是说,该项目被分成两个单独的“子存储库”(或者任何你想称呼的名称)
有什么方法可以将其迁移到 git而不丢失历史记录吗?对于这种情况,svn2git 会比 git-svn 更好吗?还有其他迁移工具吗?
编辑:我按照建议尝试了 git svn clone ,但正如我所想,它没有遵循从旧结构到新结构的转变。它仅导入新结构的修订。
我正在尝试克隆一个新的 SVN 存储库,其中只有主干/分支/标签,但它失败了,信息相对较少:
git svn clone --stdlayout https://mydomain.com/svn/myrepo
Initialized empty Git repository in /Users/datguy/myrepo/.git/
Authentication realm: <https://mydomain.com> (null)
Password for 'datguy':
error: git-svn died of signal 6
Run Code Online (Sandbox Code Playgroud)
我以为我使用的是 OSX 10.8.3 附带的 git & svn 的默认版本,但我注意到以下两个命令报告的 svn 版本不同:
$ git svn --version
git-svn version 1.7.10.2 (Apple Git-33) (svn 1.6.18)
$ svn --version
svn, version 1.7.7 (r1393599)
Run Code Online (Sandbox Code Playgroud)
我显然用自制软件(在/usr/local/bin/svn)中安装了较新版本的 svn 。我可以使用 svn 处理这个存储库,包括导入、结帐等。我如何找出 git-svn 出了什么问题,或者更新 svn 绑定?
编辑- 我深入控制台并找到了这个 perl 崩溃报告。不幸的是,我没有足够的阅读这些报告的经验来知道它想告诉我什么。
Process: perl5.12 [13309]
Path: /usr/bin/perl5.12
Identifier: perl5.12
Version: 77.2 …Run Code Online (Sandbox Code Playgroud) 所以我设置了一个 git-svn repo 并将其推送到 github。但是,如果克隆它,则克隆中没有 svn 配置。
我推送的存储库与我推送后从 github 克隆的存储库之间的差异是:

我推送的那个(带有 svn 信息的 svn 克隆)在右边 - 来自 github 的克隆在左边
我应该分享哪些(文件夹/文件(或配置部分))让人们设置 git-svn 作为我有 ?从某种意义上说,他们克隆然后复制粘贴这些文件(并可能运行 git svn rebase),并且它们具有与我相同的设置。我也将 svn repo 的所有分支和标签克隆为远程分支,我也想分享这些。理想情况下,即使在我(我们)开始在 git 和 svn repo 之间推送/提交之后,这些文件也应该仍然有效
我有一个平面 svn 存储库,它看起来像:
my_repo/
??? file1.c
??? file2.c
??? file3.c
??? README
Run Code Online (Sandbox Code Playgroud)
这个 repo 没有分支或标签,我想要做的就是将它转换为 git 存储库并维护提交历史。
我试过了:
git svn clone --trunk=/ -A users.txt svn+ssh://user@svn.example.com/projects/my_repo dest_dir
我认为这会起作用,但是,当我导航dest_dir并执行时git svn fetch,它似乎没有获取任何东西。使用git log产量:
fatal: bad default revision 'HEAD'
如果我使用svn checkout svn+ssh://user@svn.example.com/projects/my_repo
它返回:
A my_repo/file1.c
A my_repo/file2.c
A my_repo/file3.c
A my_repo/README
Checked out revision 57.
Run Code Online (Sandbox Code Playgroud)
因此,存储库是活动的且可访问的。
我尝试了各种工具,包括subgit给我这个错误的工具:svn: E170003: 'stat' not implemented我认为这是因为托管存储库的服务器使用的是旧版本的 subversion。我无法控制服务器,因此无法执行更新。
我也试过使用svn2git, 使用命令
svn2git svn+ssh://user@svn.example.com/projects/my_repo --rootistrunk -authors users.txt …
我已经通过下载 tar ball 安装了 git,然后执行以下步骤
./configure --prefix=/scratch/custom/git
make
make install
Run Code Online (Sandbox Code Playgroud)
但是在运行这些命令后,我仍然看到 git 是在/usr/local下面创建的
bash-4.1$ whereis git
git: /usr/bin/git /usr/local/git /usr/share/man/man1/git.1.gz
Run Code Online (Sandbox Code Playgroud)
我想删除并重新安装,我该怎么做?
我想使用 git-svn 来处理具有以下结构的现有 SVN 存储库:
http://thesvn/project
branch1
branch2
...
Run Code Online (Sandbox Code Playgroud)
我无法配置 svn remote 以正确获取分支。目前我有这个配置:
[svn-remote "svn"]
url = http://thesvn/project
branches = *:refs/remotes/branches/*
Run Code Online (Sandbox Code Playgroud)
当我尝试时git svn fetch svn,我得到以下信息:
ref: 'refs/remotes/' ends with a trailing slash; this is not permitted by git or Subversion
Run Code Online (Sandbox Code Playgroud)
请注意,我正在使用 msysgit 在 Windows 上工作。有什么建议吗?
这是来自本地测试存储库的示例 git-svn-id。
git-svn-id: file:///tmp/svnrepo/branches/foobar@6 0f7bc949-3f51-4b04-a2a6-16f580a5904d
Run Code Online (Sandbox Code Playgroud)
最后一部分是什么?“@6”意味着它是 svn 修订号 6,但之后看起来是一些哈希。每次提交似乎都是一样的。
最后一部分是如何生成的?我假设它是应用于 git repo 的第一次提交的哈希算法。这样 git-svn-id 也可以保证该提交的总祖先相同或不同,给定另一个 git-svn-id。
我有一些 linux 机器不允许我使用 yum 来安装软件包。相反,我需要下载 zip 或 tar,然后使用包管理器在我的 linux 机器上安装这些项目。
当您转到git-scm页面时,他们提供的安装 git 的唯一方法是从命令行使用 yum、apt-get 等。
为什么不只有一个 zip 文件?我在哪里可以找到要安装的软件包?有没有其他人遇到过同样的问题?
我正在尝试使用git svn以下命令对大型 subversion 存储库进行从 subversion 到 Git 的单向迁移(重要的是迁移后仅使用 Git):
git svn clone --no-minimize-url --trunk=/trunk/GBI --branches=/branches/GBI --tags=/tags/GBI --authors-file=authors.txt https://yyy/svn-repos/zzz/ GBI
Run Code Online (Sandbox Code Playgroud)
运行几个小时后,克隆进程崩溃并出现以下错误:
r79791 = 00349b8063f90447ea8a040751cd2a40e74b74f3 (refs/remotes/origin/trunk)
Error from SVN, (175009): Malformed network data: The XML response contains invalid XML: Malformed XML: no element found
Run Code Online (Sandbox Code Playgroud)
然后我想也许有一种聪明的方法可以在违规修订后立即恢复流程......这可能吗?
任何想法首先导致此错误的原因是什么?
这个问题的答案建议首先使用--log-window-size来防止这个问题发生......我可以添加该选项并从失败的修订版中重试吗?这个问题是git svn内存使用问题还是仅与损坏的颠覆修订版有关的问题?
是否有一个git svn 选项来强化过程以忽略错误,而不仅仅是由于此错误而停止冗长的过程?
更新:我按照Atlassian Stash Migrating to Git 指南到达了这一点,该指南指示使用git svn及其svn-migration-scripts.jar实施
从带有 svn externals 的 svn 迁移到 git。每个 svn externals 可能有它自己的 svn:externals。我发现这里没有关于如何将带有外部的 svn 迁移到 git 的指南。每个分支可能有它自己的分支标签主干。迁移整个存储库的最佳方法是什么?我正在查看主存储库的 git svn clone 添加 git 子模块,以及每个外部克隆的子模块。但是由于外部是嵌套的,我不知道什么是最好的解决方案。到目前为止使用的脚本:
https://github.com/eneroth/git-externals
https://github.com/eneroth/git-externals
Run Code Online (Sandbox Code Playgroud) git-svn svn-externals git-submodules git-subtree git-subrepo