我在Subversion中有许多要迁移到git的存储库。
迁移完成后,svn仓库将被标记为只读,并且不再提交。
在我正在处理的特定情况下,有两个活动分支,我们称它们为BranchA
和BranchB
。
迁移完成后,我希望它们看起来像没有前缀的“常规” git分支。
当前我正在使用以下命令:
git svn clone --prefix=svn/ --stdlayout http://repos-url/ <git-name>
在这种情况下,我的分支最终被称为svn/BranchA
和svn/BranchB
但是我宁愿使用
git svn clone --prefix="" --stdlayout http://repos-url/ <git-name>
在git中将它们分别命名为BranchA
和BranchB
。
但是,the docs警告说
在任何情况下都强烈建议设置前缀(带有斜杠)...
但是我不确定我为什么。它还说SVN URL将作为“远程”添加,但这并不是我真正想要的。
我担心使用--prefix=""
会在以后遇到麻烦,因为我不太了解警告。
所以我想我的问题是:
--prefix=""
有什么弊端?答案 0 :(得分:1)
您根本无法使用--prefix
。从文档中...
-prefix = <前缀>
这允许指定一个前缀,前缀为 如果指定了中继线/分支/标签,则为遥控器。前缀不 自动包含一个斜杠,因此请确保在 如果那是您想要的参数。
如果您不想在分支名称前添加前缀,请不要使用--prefix
。当您镜像SVN存储库以使SVN分支与Git分支分开时,这主要有用。如果您要迁移,则不需要。
后面的斜杠注释只是清楚地表明,如果您说--prefix=foo
,则会得到fooBranchA
和fooBranchB
。无论您的分支名称是否带有斜杠,对Git都没有关系。
它还说SVN网址将作为“远程”添加,但这并不是我真正想要的。
这也用于镜像,在迁移时没有用。
您稍后可以使用git remote rm
将其删除。或者您可以忽略它。远程服务器连接到磁盘上的物理.git
目录,但不共享。该遥控器不会被推送到Git服务器。克隆存储库的任何人都不会拥有此svn远程。
因此,您只需简单地克隆迁移的对象即可在迁移后获得一个“干净”的存储库。您可以克隆目录。
git clone path/to/migrated/repo path/to/clean/repo
Bitbucket has a nice guide on migrating from SVN to Git。
与在SVN中“分支”是相当繁琐的事情不同,Git“分支”只是实际分支上的标签。与SVN的历史记录就像一叠煎饼一样,您只能将其添加到顶部,而Git历史记录则是节点和连接的graph,并且可以更改。
您不必担心在迁移过程中得到正确的解决,而后可以进行一些微调。例如,您可以在迁移后安全地在Git中更改分支名称。您可以删除SVN遥控器。