svn迁移到git,并保持提交记录

svn迁移git是一个很常见的需求。

大部分人希望保留详细的提交记录,因为提交记录是代码版本管理的核心价值。

步骤

  1. 导出用户(非必要)
    svn log 远程SVN仓库地址 -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2"="$2" <"$2"@xxx.com>"}' | sort -u > ./users.txt
    执行完后手动修改对应的新用户映射关系,如果没有对应的都可以设置成同一个
  2. git svn clone 远程SVN仓库地址 --no-metadata --authors-file=users.txt GitProject, gitproject 是一个空的目录,表示git项目名称。
  3. 添加必要的.gitignore文件
  4. cd GitProject
  5. git remote -v,如果不为空,则删除原有origin:git remote rm origin
  6. 增加远程仓库的地址:git remote add origin git@x.x.x.x/project-name.git
  7. push到远程仓库,必要的话,强制push
    git push -u -f origin master

常见问题FAQ

  • 在clone中断时,我们尝试再次执行clone命令,提示了如下的内容:Using existing [svn-remote "svn"] svn-remote.svn.fetch already set to track :refs/remotes/git-svn
    解决:进入git目录,执行 git svn fetch,继续代码的clone行为。

  • 如果提示不支持 git svn,请安装 git-svn

  • 在执行的过程中提示APR does not understand this error code: ra_serf: An error occurred during decompression at /usr/share/perl5/Git/SVN/Ra.pm
    这个问题比较棘手,前后尝试了将近2天,刚开始以为仓库代码太大,几十G,大文件不稳定导致,所以尝试了好多次,后面google了下,感觉跟版本有关,又受限于服务器配置不能改,有点无奈。后面在windows中尝试,系统莫名重启,继续在ubuntu20中,才成功。
    出问题的环境版本
    ubuntu:14.04.3
    git: git version 1.9.1
    OK的环境
    ubuntu:ubuntu1~20.04
    Git:git version 2.25.1

android Kconfig搜索路径

安卓中,在kernel下运行make menuconfig时,能看到一些开关,但是很多比如在vendor下的驱动的Kconfig中的就看不到。

见网络摘引:
“menuconfig默认会到当前工作路径下去寻找Kconfig文件作为入口配置文件并解析,因此必须在顶层Kconfig文件所在路径下运行该命令。否则将无法找到kconfig文件或造成配置项加载不完全的问题。”

参考这句话,也就是默认是搜索kernel下的递归目录中的相关Kconfig文件的,所以vendor中的自然不加载。

解除gitlab仓库的保护

问题

在git push时,错误提示如下:

remote: GitLab: You are not allowed to force push code to a protected branch on this project.To git@xxx:xxx.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: 无法推送一些引用到 'git@xxx:xxx.git'

关键内容就是protected branch,所以我们需要确认是怎么protected。

解决

repo->settings->repository->protected branches:
file