文章目录
svn迁移至gitlab
1、ssh登录svn服务器,获取用户文件
# 我的svn服务器用户文件在这里 /home/svn/passwd ,原始文件大致长这样
[root@svn ~]#cat /home/svn/passwd
[users]
zhain = b3e811
zoiwei = 12.H-15
lqanng = 77ae315
# PHP
xun = e2d2635
huho = 629bfd9
2、将用户源文件,处理成只包含用户名的user-svn.txt
# sed '/^[ #]/d' # 去掉以空格和#开头的行
# sed '/^$/d' # 去掉空行
# sed 's/=.*//' # 去掉 = 后面的字符
# sed '/\[users\]/d' # 去掉 [users] 这行
cat /home/svn/passwd | sed '/^[ #]/d' | sed '/^$/d' | sed 's/=.*//' | sed '/\[users\]/d' > /root/user-svn.txt
3、进一步将 user-svn.txt 文件处理成 git可关联的用户文件 user-git.txt
# 最终需要的格式 (用户名=用户名<用户名@atstm.cc>)
while read line;do echo "$line=$line<$line@atstm.cc>" >> /root/user-git.txt;done < user-svn.txt
4、找一台centos系统安装git 和 git-svn,并拉取代码到本地
# 安装git 和 git-svn
dnf install git git-svn
# apt install git git-svn
# 创建本地存放代码的目录
mkdir /root/scripts/ -p
# 将代码从svn上clone下来,根据提示输入密码
git svn clone svn://192.168.3.10/scripts --no-metadata --authors-file=/root/user-git.txt /root/scripts/ --username=zhain
# 注意 1、若是上面的 git svn clone 未完成而失败了,请cd 到对应目录,重新执行 git svn fetch
cd /root/scripts/ ; git svn fetch
# 注意 2、若是git svn clone 完成后,svn项目中有新的代码提交,应该如何操作
cd /root/scripts/ ; git svn rebase # 未验证
5、去你的gitlab上创建一个项目,并获取项目地址
cd /root/scripts/
# 设置项目仓库地址
git remote add origin http://gitlab.atstm.cc/xxxx/scripts.git
# 注意:为了解决git不会提交空目录的情况,先找到空目录,再给下面创建一个固定名称的隐藏文件
find . -type d -empty -exec touch {}/.gitkeep \;
# 注意,还有一个大坑,小心之前虽然使用的svn,但是可能更早前使用了git,或者开源项目,导致部分目录下面有.gitignore文件。可能导致push后,代码不对
# find . -name .gitignore -exec rm -rf {} \; # 小心点,有的是要忽略的,不要搞错了哦
# 将当前分支重命名为main,并推送
git branch -M main
git push -uf origin main
6、去gitlab上自行验证,历史版本
7、若是之前svn项目 是 master + trunk两个目录,如何合并成gitlab的main
# 1、先去gitlab网页,基于前面提交的main分支创建一个名为 old_svn_release分支
# 2、回到当前的克隆目录,删除trunk目录,并将master内的内容复制到当前目录
rm trunk -rf
rsync -av master/* ./
rm master -rf
# 3、
git add .
git commit -m "从新的gitlab开始"
git push -uf origin main
单gitlab项目迁移至另一个gitlab
# 克隆老项目,--mirror 克隆整个项目的所有分支和标签
git clone --mirror <原GitLab项目URL>
# 将老项目地址改成新的项目地址
cd <克隆下来的项目目录>
git remote set-url origin <新GitLab项目URL>
# 推送到新的gitlab。--mirror 确保所有的分支、标签和引用都会被推送到新的远程仓库
git push --mirror origin
如果文章对你有帮助,欢迎点击上方按钮打赏作者
暂无评论