SVN to Git:提取存储库的一部分

时间:2017-11-22 18:30:17

标签: git svn

我正在使用https://docs.gitlab.com/ce/user/project/import/svn.html上的文档将SVN回购转换为少数git回购 - 指定使用此https://github.com/nirvdrum/svn2git工具。

我的基本目标是拥有一个镜像原始SVN仓库的git仓库。该回购将主要作为历史记录。然后我想将SVN repo中的一些子目录移动到他们自己的git repos中。

我正在使用以下脚本执行此操作:

#!/bin/sh

mkdir repo.git
pushd repo.git
git config --global gc.auto 0
svn2git svn+ssh://svnhost/svn/dvl/svn/repo --authors ~/authors.txt
git gc
git config --global unset gc.auto
popd

pushd repo.git
git subtree split -P subdir/project/ -b project-subtree
popd

mkdir project.git
pushd project.git
git init
git pull ../repo.git project-subtree
popd

repo.git包含我期望的分支和标记,但project.git没有任何分支和标记。有没有办法让分支和标签进入project.git?如果不是,"权利"这样做的方法?

我也试过

svn2git svn+ssh://svnhost/svn/dvl/svn/repo/subdir/project --authors ~/authors.txt --no-minimize-url

但是当它寻找svn+ssh://svnhost/svn/dvl/svn/repo/subdir/project/trunk时会产生一个空的回购。将--rootistrunk添加到上述命令会产生错误。

1 个答案:

答案 0 :(得分:1)

git filter-branch

将repo从svn转换为git后,你应该可以使用以下命令将一个子目录作为独立的git repo提取:

git filter-branch --prune-empty --subdirectory-filter subdir -- --all

要小心,它可以在本地转换您的仓库(因此最好处理副本)... 然而,使用refs / original / refs / heads / master暂时可以访问旧的master(以及类似的其他分支) 这样你就可以恢复它......

检查完毕后,您可以在instructions后删除它,特别是:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d