将SVN文件夹结构导入Git Repo,无历史记录和用户

时间:2017-04-12 07:02:38

标签: git svn

我正在寻找一种简单的方法来导入一些继承的SVN代码(虽然它在包含分支/标签和主干的SVN文件夹结构中,但是没有任何.svn文件夹,因此不包含任何历史记录或SVN用户等)。我们只有完整的旧SVN代码,没有.svn文件夹,也无法访问原始的SVN仓库。

2 个答案:

答案 0 :(得分:1)

.svn目录包含项目中最后签出的文件版本。从概念上讲,它类似于Git上HEAD指向的提交内容。 Subversion使用这些信息来了解修改了哪些文件(并显示了差异),并将文件还原为上次更新(签出)的版本。

由于您无法访问Subversion存储库,因此.svn目录的内容几乎无用。

然后在项目运行的根目录中删除.svn目录:

git init
git add .
git commit -m "the initial import"

替换文字"初始导入"用你想要的任何提交信息。

详细了解Git命令:https://git-scm.com/docs

答案 1 :(得分:1)

好吧,如果您只拥有没有历史记录的最新版本,那么您可以做的最好就是将其作为新代码导入git。

您不知道分支和标记之间的关系,因此您可以简单地将每个作为单独的根导入,或者您可以尝试从明显的属性重建关系,例如每个版本都基于之前的版本。

因此,您只需创建一个空的git存储库,然后为每个分支/标记创建:

  1. 准备合适的分支。

    • 新的存储库以分支master开头,没有父级。这是您导入trunk的地方,但在此之前,您导入之前知道的任何标记。
    • 您使用git checkout -b 新名称 base 从已知基础创建新分支。例如,如果您知道某个分支基于特定版本。
    • 使用git checkout --orphan 新名称创建一个没有父级的新分支。对于您不知道分支基于什么的情况。见git-checkout
  2. 删除以前的内容:git rm -rf .

  3. 复制SVN分支/标记的内容。

  4. 添加所有内容git add .

  5. 提交:git commit -m 消息

  6. 冲洗并重复直至完成。

  7. 如果您不关心关系,可以轻松编写此脚本。如果您想重建某些历史记录,例如主人成功发布第3版,然后成功发布第2版和第1版,你必须手动排序并选择分支。

    您也可以在每个目录中简单地git init + git add . + git commit,并以适当的名称将每个目录推送到相同的中央仓库,但这不会让您重建任何历史记录。