IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> SVN代码迁移至GITLAB(保留日志分支标签)操作与问题记录 -> 正文阅读

[开发工具]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命令执行失败问题解决参考链接
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:20:15  更:2022-10-31 12:22:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 12:16:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码