我正在使用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
添加到上述命令会产生错误。
答案 0 :(得分:1)
将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