Lazy loaded imagesvn转git
2023-4-2
| 2023-5-1
字数 1873阅读时长 5 分钟
slug
status
password
icon
AI summary
date
summary
tags
type
category

1.前置条件

1.1.注册gitlab帐号并创建项目

gitlab新建一个仓库(如:sms)存放迁移项目
账号: xxx/xxx@segimail.com
注:
如果注册账号的角色为:Developer,为该仓库为新建空白仓库,没有默认分支,push的时候会有问题。
解决方案:
(1)更改帐号权限,使其有创建默认分支的权限
(2)有创建默认分支权限的人,创建一个默认分支

1.2.svn项目地址和svn帐号密码

地址:https://xxx
账号:xxx/xxx@segimail.com

1.3.导出SVN提交的用户清单

格式为svn_username=git_username,提交记录里出现的所有svn_user都要有对应git_user
git bash下执行如下命令 #svn log svn项目路径 -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2"="$2" <"$2"邮箱后缀>"}' | sort -u > 要保存的文件路径
如果生成的不满足,修改对应关系即可,后面会用到
notion image

2. git帐号配置

配置git信息:
查看配置:

3.从svn拉取代码

3.1本地创建项目,和svn用户清单同级

notion image

3.2 拉取代码

Git Bash Here,然后输入
git svn clone -r 282506:HEAD svn_url --no-metadata -A userinfo_path local_path
  • r 282506:HEAD 代表从svn的282506版本到最新版本的提交记录,避免从第一个版本拉取数据量过大,操作耗时高。 如果需要拉取所有记录,可去除 -r 282506:HEAD
svn_url 你的svn项目地址。
  • no-metadata 防止git拉取无用的SVN附加信息
local_path 为git clone下来的svn目录,会自动新建
  • A userinfo_path 你的svn2git.txt路径
注:
  1. 第一次操作,会多次要求账号密码:请注意每次提示信息,第一次密码输入是操作系统的用户密码,第二次为svn账号和密码,第三次为git的账号密码。注意按提示输入。
  1. 拉取代码(项目越大,花费时间越多),此处会用到第一步获取的svn用户清单
  1. 出现文件找不到,乱码等-(refs/remotes/git-svn) *** was not found in commit,
    1. 修改拉取屏蔽这个文件:git svn clone --ignore-paths="(.txt|.xlsx)$" "svn地址" "本地路径"
  1. Software caused connection abort at C:/Program Files (x86)/Git/mingw32/share/perl5/Git/SVN/Ra.pm 第 312 行
    1. 修改SVN Server 的 http.conf中设置更高的服务器超时按照建议简单地附加 Timeout 1800;(如果这部分提交记录不重要)也可以修改git svn clone -r 282506:HEAD,跳过这个修订的版本

4. 提交代码到本地仓库

4.1. 项目总大小不大于50M:

执行可查看关联情况
关联ok的
notion image
如果关联错了,可以使用 git remote rm origin删除错位关联后重新关联即可
如果在gitee上建的仓库上有.gitignore文件,需要先rabase,但因项目过大,多次rebase都卡住了,所以清空了远程的仓库,不执行rebase
(如果code = 411,则是由postBuffer引起的,可以在客户端执行 git config --global http.postBuffer 52428800,改为最大50M)

4.2. 项目总大小大于50M:

项目文件过大,超过http实体最大值(50M),需要换成ssh传输,错误提示:
需要换成ssh传输
如果已经生成了就不用下面的命令生成
这个命令需要自己输入,直接复制粘贴会导致错误
将生成的公钥,复制到你的gitee ssh公钥设置
测试是否能用ssh登录git
出现下面提示则成功
修改提交操作

5. push代码到远端

6.总结整体流程

7.问题

7.1 remote: Ask a project Owner or Maintainer to create a default branch:

申请把gitlab帐号的角色改成Maintainer或者让有权限的用户创建默认分支

7.2 fatal: remote origin already exists.

解决办法如下: 1、先输入 git remote rm origin 2、再输入 git remote add origin https://github.com/(user_name)/(app_name).git 就不会报错了! 3、如果输入 git remote rm origin 还是报错的话,error: Could not remove config section 'remote.origin'. 我们需要修改gitconfig文件的内容 4、找到你的github的安装路径 C:\Users\xxx\PortableGit_054f2e797ebafd44a30203088cd3d58663c627ef\etc 5、找到一个名为gitconfig的文件,打开它把里面的[remote "origin"]那三行删掉就好了!

7.3 git svn - was not found in commit

解决方案:
  • 奇怪的文件,直接屏蔽,--ignore-paths regexp (忽略指定的文件类型)
  • 在有问题的版本之前重置到一个版本,git svn reset
  • 在 Windows 上遇到与文件名中的特殊字符(此处:元音变音)相关的相同错误,临时设置环境变量,

    7.4 'fatal: Couldn't find remote ref master'

    解决方案:
    1.该问题是由于某些单个修订非常大并且需要 10 多分钟才能下载。他们不会在 Apache 服务器超时和切断连接之前完成。
    解决方案是在 SVN Server 的 http.conf中设置更高的服务器超时
    按照建议简单地附加 Timeout 1800
    2.修改拉取git svn clone的-r 282506:HEAD,改到这个修订之后的版本号,放弃这个(如果需要这部分记录,则必须用上面的方法)。

    8.相关资料

     
  • 开发
  • 软件
  • Typora+picgo自动上传到chevereto图床java开发环境
    Loading...