-1

我正在尝试从 svn 迁移到 git。我尝试使用以下工具这样做

git-svn
svn2git

然而,这两个工具只创建了一个.git文件夹,没有签出文件和文件夹(说一个工作副本)。

git-svn尝试执行以下操作

git svn clone REMOTE_SVN_REPO
svn2git REMOTE_SVN_REPO

我到底做错了什么?

ps 我试过谷歌搜索,但所有博客都声称这两个命令都应该创建一个包含所有文件和文件夹的本地存储库。还有一次我使用 hg convert 将 svn 项目转换为 mercurial 项目。在将 svn 项目转换为 mercurial 项目后,我完成了 hg up 或类似的操作,它带来了项目的所有文件和文件夹,我可以轻松地将该项目推送到 mercurial 服务器。这里我只有一个 .git 文件夹。我错过了哪一步,或者我到底做错了什么?

4

1 回答 1

1

嗯,git svn远程SVN 存储库的 git 后端。您可以将其视为双向代理 - 在内部它模拟 SVN 命令并允许其用户使用给定的 SVN 存储库,就像它是 GIT 存储库一样。对于世界其他地方的用户仍然使用 SVN,在这种情况下,GIT 仅用作 SVN 的方便包装器。

因此,git-svn您可以在.git文件夹中获得来自 SVN 存储库的所有提交的个人镜像(或者只是其中的一部分,如果您选择了一些带有-r选项的提交或选择了一些分支)。gitk --all您可以使用命令检查整个导入的提交集,并使用git checkout或仅使用 RMB 在 gitk 中单击提交并选择适当的菜单项来检查选定的提交。

现在您应该首先在本地提交您的更改(就像使用普通的 GIT 存储库一样),然后将更改推送回 SVN 存储库git svn dcommit。在推送到 SVN 存储库期间,提交将被“重新播放”,就好像它们是由普通的 SVN 客户端完成的一样。与通常的 SVN 提交一样,可能存在冲突和其他此类问题。使用git svn fetch,git svn rebase和页面中描述的其他命令将git svn --help您的更改重新定位到更新的树并解决冲突

另一方面svn2git是将现有的本地 SVN 存储库(即 SVN 提交数据库的内容)转换为本地 GIT 存储库的方法。通常,当整个团队或公司决定从 SVN 完全迁移到 GIT 时,会执行一次此步骤。转换后,您实际上将获得 GIT 的所有好处(复杂的分支和合并、用于代码审查的详细 GIT 特定系统*等)

  • 当然有基于 SVN 或 SCM 中立的代码审查系统。然而,这样的系统通常一次运行一个给定的补丁,而不是一系列有序的更改。这两种方法各有利弊,但我个人更喜欢有变化序列的那一种。
于 2015-03-09T06:09:48.943 回答