SVN代码迁移至GITLAB(保留日志分支标签)操作与问题记录

SVN代码迁移至GITLAB记录(保留日志分支标签)

一、操作

1.用户映射文件生成

在本地新建一个项目名称ABC的文件夹,此路径下打开git bush,输入以下命令,可以生成一个userInfo.txt文件

svn log https://你的svn项目地址 -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2"="$2" <"$2"@email.com>"}' | sort -u > ./userInfo.txt

其中【@email.com】可根据公司邮件地址修改该后缀。
userInfo.txt中文件内容示例如下:
userinfo文件内容

注意点:
如果迁移单个指定项目,svn版本库地址要精确到项目trunk或者某个分支。
如果迁移整个项目(包含trunk,分支,tag),注意路径不能写到trunk,否则会导致某个分支提交过代码的用户映射信息没导出,git svn clone时会执行到一半报错(这样就白跑了半天了……)

2. git svn clone

输入以下命令,克隆代码到打开git bash的路径下

git svn clone --stdlayout --no-metadata -A userInfo.txt https://你的svn项目地址

如有弹窗,则弹窗先输入p,后续根据相关提示输入用户名和密码即可。

命令相关参数释义:
–stdlayout:可缩写为-s ,代表–trunk=trunkname --branches=branches --tags=tags。主干/分支/标签这种结构的可以使用该选项,如果需要拉取指定项目内容,则将其替换指定项目即可。
–no-metadata:不拉取SVN metadata附加信息
-A userInfo.txt:–authors-file=filename 的简写,根据提供的文件,将提交的作者名称映射到对应的用户邮箱地址。
注意:使用-A 时,如果出现了不在映射文件中的用户,则此次克隆会被终止,请检查用户映射文件并重新执行命令。

如果没有发生其他故障或问题,请慢慢等待跑完,提交次数会决定跑多久才能跑完……
如果发生故障,请参考第二节遇到问题,未能解决的话,可以百度看看。

3. 标签和分支处理

代码已经克隆完了,这会查看下分支,发现svn上的所有标签和分支都位于远端,这样子上传代码,传上去的根本没有任何分支和标签。
未处理过的分支和标签
需要处理一下标签和分支。
按以下代码处理之后,上传代码就可以将所有分支和标签信息都上传上去了。

#查看分支
git branch -a
#创建本地标签/分支并删除远端标签/分支
git for-each-ref refs/remotes/origin/tags |cut -d / -f 5-|grep -v @| while read tagname; do git tag "$tagname" "origin/tags/$tagname"; done
git for-each-ref refs/remotes/origin/tags |cut -d / -f 5-|grep -v @| while read tagname; do git branch -r -d "origin/tags/$tagname"; done

此时上传的分支和标签信息,可能会有一些已经被删除的无用分支/标签(例如改过名字的A1和B1),我的项目就俩无用分支和标签,上传到git之后我手动在gitlab删除的,未探索自动处理方法。

4. 上传代码到git

gitlab新建一个项目,复制项目链接,然后再git bash里执行如下命令,添加远端的地址:

#删除远端关联地址命令
git remote rm origin
#关联
git remote add origin https://你的git项目地址.git

添加完成后,执行两次push,就能把所有branches和tags上传到远端了。

git push origin --all
 git push origin --tags

将提交过代码的项目组成员全部添加到项目中。

5. 提交测试

提交.gitignore.txt文件测试一下,是否正常使用功能。
记得给需要的分支都补充.gitignore.txt文件。

6. jenkins修改

修改jenkins路径从svn到git,测试一下是否能够正常打包。

二、遇到问题

1. git svn clone命令执行失败
报错信息1:

E0701+Administrator@E0701 MINGW64 /e/ABC
$ git svn clone --stdlayout --no-metadata -A userInfo.txt https://你的svn项目地址/trunk
Can't load '/usr/lib/perl5/vendor_perl/auto/SVN/_Core/_Core.dll' for module SVN::_Core: No such file or directory at /usr/lib/perl5/core_perl/DynaLoader.pm line 193.
 at /usr/lib/perl5/vendor_perl/SVN/Base.pm line 59.
BEGIN failed--compilation aborted at /usr/lib/perl5/vendor_perl/SVN/Core.pm line 5.
Compilation failed in require at F:/Git/mingw64/share/perl5/Git/SVN/Utils.pm line 6.
BEGIN failed--compilation aborted at F:/Git/mingw64/share/perl5/Git/SVN/Utils.pm line 6.
Compilation failed in require at F:/Git/mingw64/share/perl5/Git/SVN.pm line 32.
BEGIN failed--compilation aborted at F:/Git/mingw64/share/perl5/Git/SVN.pm line 32.
Compilation failed in require at F:/
………………
#省略了部分错误信息

解决方法:
升级git版本,win10操作如下:
管理员身份打开cmd,输入以下命令:

git update-git-for-windows

更新进度跑到100%之后,会自动弹窗安装,安装完成之后重新打开git bash,进行git svn clone即可正常使用。

报错信息2:

#
Initialized empty Git repository in E:/ABC/.git/
Using higher level of URL: https://svn项目地址/ABC/trunk => https://svn项目地址/ABC

解决方法:
git svn会默认拉取root路径的整个svn项目,如果你需要拉取整个项目,则修改git svn clone中的svn项目地址为=>后边的地址,重新执行命令。
如果只需要拉取指定项目,则在git svn clone这一串命令后边加上【 --no-minimize-url】,这样克隆时只会拉取你要求的项目,不会自动拉取上级内容。

2. git svn clone克隆过程中缺少用户映射
报错信息:

E7+Administrator@E7 MINGW64 /e/ABC
$ git svn clone --stdlayout --no-metadata -A userInfo.txt https://SVN项目地址/ABC
Initialized empty Git repository in E:/ABC/ABC/.git/
r1 = 0c6aee289ca677845e4ddef247039f02dd61703b (refs/remotes/origin/trunk)
        A       test.txt
Author: zhangs not defined in userInfo.txt file

解决方法:
产生原因是生成映射的时候,使用了trunk的路径,所以缺少了分支中的用户,修改路径重新生成一遍用户映射文件即可。

3. jenkins打包失败
报错信息:

Created release folders
ISDEV : error -6102: Error searching for dynamic files matching "E:\jenkins\ABC\otp-install\build\jasper\*.*"
InstallShield Script Compiler
Version 21.0.0.338
…………
Releases\SINGLE_EXE_IMAGE - 1 error(s), 0 warning(s)
Log file has been created: <file:E:\jenkins\ABC\releases\Releases\SINGLE_EXE_IMAGE\LogFiles\10-25-2022 03-02-55 ??.txt>



Build finished at ?? 25 2022 03:03 ??
:makeInstall FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':makeInstall'.
> Process 'command 'cmd'' finished with non-zero exit value 1
> 
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

Total time: 2 mins 47.724 secs
Build step 'Invoke Gradle script' changed build result to FAILURE
Build step 'Invoke Gradle script' marked build as failure
Finished: FAILURE

产生原因:
svn允许上传空文件夹,git不允许,所以一些历史残留的没用文件夹,没有上传,但打包程序里头还有那个文件夹的信息,导致打包失败,修改一下打包用的程序就可以正常使用了。
我司是古早的.ism文件,检查一下files and folders 里头的文件夹在git代码上都有没有,没有的话把ism里头的文件夹删了,重新上传一下ism文件。

三、参考

  1. 指定某项目迁移
  2. 整个项目迁移
  3. git svn官方手册
  4. git svn clone命令执行失败问题解决参考链接
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值