SVN 到 git 迁移只创建 .git 文件夹
SVN to git migration only creates .git folder
我正在尝试从 svn 迁移到 git。我尝试使用以下工具这样做
git-svn
svn2git
然而,这两种工具都只创建了一个 .git
文件夹,而没有签出文件和文件夹(说的是工作副本)。
使用 git-svn
我尝试执行以下操作
git svn clone REMOTE_SVN_REPO
svn2git REMOTE_SVN_REPO
我到底做错了什么?
p.s。我尝试使用谷歌搜索,但所有博客都声称这两个命令都应该创建一个包含所有文件和文件夹的本地存储库。还有一次我使用 hg convert 将 svn 项目转换为 mercurial 项目。将 svn 项目转换为 mercurial 项目后,我完成了 hg up 或类似的操作,它带来了项目的所有文件和文件夹,我可以轻松地将该项目推送到 mercurial 服务器。这里我只有一个 .git 文件夹。我错过了什么步骤或者我到底做错了什么?
嗯,git svn
是 远程 SVN 存储库的 git 后端。您可以将其视为双向代理 - 在内部它模拟 SVN 命令并允许其用户使用给定的 SVN 存储库,就好像它是 GIT 存储库一样。对于世界其他地区,用户仍然使用 SVN,GIT 在这种情况下仅用作 SVN 的便捷包装器。
因此,使用 git-svn
您可以在 .git
文件夹中获得来自 SVN 存储库的所有提交的个人镜像(或者只是其中的一部分,如果您使用 -r
选项选择了一些提交或选择一些分支机构)。您可以使用 gitk --all
命令检查整套导入的提交并使用 git checkout
检查选定的提交,或者只需使用 RMB 单击 gitk 中的提交并选择适当的菜单项.
现在您应该首先在本地提交您的更改(就像您对普通 GIT 存储库所做的那样),然后使用 git svn dcommit
将更改推送回 SVN 存储库。在推送到 SVN 存储库期间,提交将是 "re-played",就好像是由普通的 SVN 客户端完成的一样。与通常的 SVN 提交一样,可能存在冲突和其他此类问题。使用 git svn fetch
、git svn rebase
和 git svn --help
页面中描述的其他命令将您的更改重新定位到更新的树并解决冲突
另一方面,svn2git
是一种将现有本地 SVN 存储库(即 SVN 提交数据库的内容)转换为本地 GIT 存储库的方法。当整个团队或公司决定完全从 SVN 迁移到 GIT 时,通常会执行一次此步骤。转换后,您实际上将获得 GIT 的所有好处(复杂的分支和合并,精心设计的 GIT-specific system for code-reviewing* 等)
- 当然有基于 SVN 或 SCM 中立的系统用于代码审查。然而,这样的系统通常一次使用一个给定的补丁,而不是一系列有序的更改。两种方法各有利弊,但我个人更喜欢使用更改序列的方法。
我正在尝试从 svn 迁移到 git。我尝试使用以下工具这样做
git-svn
svn2git
然而,这两种工具都只创建了一个 .git
文件夹,而没有签出文件和文件夹(说的是工作副本)。
使用 git-svn
我尝试执行以下操作
git svn clone REMOTE_SVN_REPO
svn2git REMOTE_SVN_REPO
我到底做错了什么?
p.s。我尝试使用谷歌搜索,但所有博客都声称这两个命令都应该创建一个包含所有文件和文件夹的本地存储库。还有一次我使用 hg convert 将 svn 项目转换为 mercurial 项目。将 svn 项目转换为 mercurial 项目后,我完成了 hg up 或类似的操作,它带来了项目的所有文件和文件夹,我可以轻松地将该项目推送到 mercurial 服务器。这里我只有一个 .git 文件夹。我错过了什么步骤或者我到底做错了什么?
嗯,git svn
是 远程 SVN 存储库的 git 后端。您可以将其视为双向代理 - 在内部它模拟 SVN 命令并允许其用户使用给定的 SVN 存储库,就好像它是 GIT 存储库一样。对于世界其他地区,用户仍然使用 SVN,GIT 在这种情况下仅用作 SVN 的便捷包装器。
因此,使用 git-svn
您可以在 .git
文件夹中获得来自 SVN 存储库的所有提交的个人镜像(或者只是其中的一部分,如果您使用 -r
选项选择了一些提交或选择一些分支机构)。您可以使用 gitk --all
命令检查整套导入的提交并使用 git checkout
检查选定的提交,或者只需使用 RMB 单击 gitk 中的提交并选择适当的菜单项.
现在您应该首先在本地提交您的更改(就像您对普通 GIT 存储库所做的那样),然后使用 git svn dcommit
将更改推送回 SVN 存储库。在推送到 SVN 存储库期间,提交将是 "re-played",就好像是由普通的 SVN 客户端完成的一样。与通常的 SVN 提交一样,可能存在冲突和其他此类问题。使用 git svn fetch
、git svn rebase
和 git svn --help
页面中描述的其他命令将您的更改重新定位到更新的树并解决冲突
另一方面,svn2git
是一种将现有本地 SVN 存储库(即 SVN 提交数据库的内容)转换为本地 GIT 存储库的方法。当整个团队或公司决定完全从 SVN 迁移到 GIT 时,通常会执行一次此步骤。转换后,您实际上将获得 GIT 的所有好处(复杂的分支和合并,精心设计的 GIT-specific system for code-reviewing* 等)
- 当然有基于 SVN 或 SCM 中立的系统用于代码审查。然而,这样的系统通常一次使用一个给定的补丁,而不是一系列有序的更改。两种方法各有利弊,但我个人更喜欢使用更改序列的方法。