svn - SVN库和历史记录如何迁移到新的Git库?

  显示原文与译文双语对照的内容
0 0

我阅读了Git手册,FAQ,Git - SVN速成课程,等等 和它们都解释了这一点,但你却找不到一个简单的指令,比如:

svn://myserver/path/to/svn/repos 仓库:

Git仓库:git://myserver/path/to/git/repos


git-do-the-magic-svn-import-with-history 
svn://myserver/path/to/svn/repos 
git://myserver/path/to/git/repos

我不认为它是那么简单,我也不期望它是一个单一的命令。 但是我期望它不会试图解释任何东西- 只是为了说明这个例子应该采取什么步骤。

时间: 原作者:

0 0

魔术:


$ git svn clone http://svn/repo/here/trunk

Git和SVN的操作截然不同。 你需要学习 Git,如果你想要跟踪来自SVN上游的更改,你需要学习 git-svngit-svn 手册页有一个很好的示例部分:


$ git svn --help

原作者:
0 0

干净地将Subversion存储库迁移到一个Git知识库 。 首先,你必须创建一个文件,将Subversion提交作者名称映射到 Git commiters,比如 ~/authors.txt:


jmaddox = Jon Maddox <jon@gmail.com>
bigpappa = Brian Biggs <bigpappa@gmail.com>

然后你可以将Subversion数据下载到一个Git仓库中:


mkdir repo && cd repo
git svn init http://subversion/repo --no-metadata
git config svn.authorsfile ~/authors.txt
git svn fetch

在MacPorts通过安装如果你是在Mac上,你可以得到

于所以初始化步骤,否则所有的same,相关如果你的版本库就为你提供在同一台机器上需要的git存储库,那么你可以使用这里 syntax:


git svn init file:///home/user/repoName --no-metadata

原作者:
0 0

我建议在尝试不断使用git-svn之前,先使用 Git,将SVN保持为集中式存储库并使用 Git 。

但是,对于所有历史的简单迁移,下面是几个简单步骤:

初始化本地存储库:


mkdir project
cd project
git svn init http://svn.url

标记要开始导入修订的距离:


git svn fetch -r42

( 或者只是"git svn获取"为所有转速)

实际上从那时起获取一切:

 
git svn rebase

 

你可以使用Gitk检查导入结果。 我不确定这是否适用于 Windows,它在OSX和Linux上运行:

 
gitk

 

当你在本地克隆了 SVN repo后,你可能想要将它推送到一个集中的Git存储库,以便更轻松地协作。

首先创建你的空远程仓库( 可能在 GitHub的上):?


git remote add origin git@github.com:user/project-name.git

然后,可以选择同步主分支,这样拉操作会自动将远程主控形状与你的本地主控形状合并,当两者包含新的内容时:


git config branch.master.remote origin
git config branch.master.merge refs/heads/master

之后,你可能会对我自己的git_remote_branch 工具感兴趣,这有助于处理远程分支:

第一个解释日志:" Git远程分支"

最新版本的后续版本: "与 git_remote_branch的合作时间"

原作者:
0 0

从Subversion迁移到 Git ( 或者同时使用同时) 有一个新的解决方案: SubGit ( http://subgit.com/ ) 。

我正在处理这个项目。 我们在我们的仓库中使用 SubGit - 一些助手使用Git和一些 Subversion,目前它工作得很好。

要使用SubGit从Subversion迁移到 Git,你需要运行:


$ subgit install svn_repos
...
TRANSLATION SUCCESSFUL 

之后,你将在 svn_repos/。Git中获得Git仓库,并可以克隆它,或者继续使用Subversion和这个新的Git仓库: SubGit将确保两者始终保持同步。

如果你的Subversion存储库包含多个项目,那么 svn_repos/Git目录中将创建多个Git存储库。 要在运行前自定义翻译,请执行以下操作:


$ subgit configure svn_repos
$ edit svn_repos/conf/subgit.conf (change mapping, add authors mapping, etc)
$ subgit install svn_repos

使用 SubGit,你可以迁移到纯 Git ( 不是 git-svn ) 并开始使用它,同时仍然保持 Subversion,只要你需要它( 对于已经配置的构建工具,例如) 。

希望有帮助!

0 0

查看官方的git-svn手册 。 特别是,查找"基本示例":

跟踪并贡献整个Subversion-managed项目( 使用主干,标记和分支完成):


# Clone a repo (like git clone):
 git svn clone http://svn.foo.org/project -T trunk -b branches -t tags

0 0

使用 git,SVN和bash的一些扩展的答案。 它包括一些步骤,这些步骤不使用常规布局,而不使用 trunk/branches/tags 目录布局( SVN绝对不需要执行这种布局) 。

首先使用这个bash脚本为不同的人扫描你的SVN仓库,并为映射 file: 生成一个模板


#!/usr/bin/env bash
authors=$(svn log -q | grep -e '^r' | awk 'BEGIN { FS ="|" } ; { print $2 }' | sort | uniq)
for author in ${authors}; do
 echo"${author} = NAME <USER@DOMAIN>";
done

使用这里选项创建一个 authors 文件,你可以将svn用户名映射到用户名和电子邮件,由开发人员使用 git config 属性 user.nameuser.email ( 注意,对于像GitHub这样的服务,只有匹配的电子邮件足够了) 设置。

然后让 git svn 将svn仓库克隆到一个git仓库,告诉它映射:

git svn clone --authors-file=authors --stdlayout svn://example.org/Folder/projectroot

这可能需要相当长的时间,因为 git svn将逐个检查每个存在的标记或者分支的每次修订。 ( 注意,在SVN中的标记实际上是个分支,所以它们在Git中是一样的) 。 你可以通过删除你不需要的旧标签和分支来加快这个速度。

在同一个网络或者同一服务器上运行这个服务器也可以加快这个速度。 使用,另外,如果由于某些原因你这个过程中发生了中断 可以恢复它

git svn rebase --continue

在很多情况下,你在这里完成了。 但是如果你的SVN仓库有一个非常规的布局,你只需在SVN中安装一个目录,你就可以在 git branch 中做一些额外的步骤。

最简单的方法是在你的服务器上创建一个新的SVN仓库,它遵循惯例并使用 svn copy 将你的目录放在主干或者分支中。 这可能是唯一的方法,如果你的目录一直在存储库的根目录,当我上次尝试这个 git svn 只是拒绝做一个签出。

你也可以使用git进行这里操作。 对于 git svn clone,只需使用你想要放入 git branch 中的目录即可。

运行后


git branch --set-upstream master git-svn
git svn rebase

请注意,这个要求的Git 1.7或者更高版本。

原作者:
...