gitlab是一个可以自己搭建维护的git服务器,已经有很多公司开始使用。gitlab-mirrors是github上开源的项目,用于实现gitlab从其它版本库同步代码,如:Bazaar, Git, Mercurial, Subversion.
1. 概述
创建系统用户用于gitmirror
在gitlab建立用户并赋予admin权限
用新建的用户登录gitlab并建立用于存放同步代码的group
安装gitmirror
更改gitmirror配置文件
创建计划任务用于定时同步代码
2. 配置
2.1 创建系统用户并生成key
1 2 3 |
# useradd svnmirror # su - svnmirror $ ssh-keygen |
2.2 登录gitlab创建用户并赋予admin权限
创建group:mirrors_svn
创建用户:svnmirror
2.3 gitmirrors运行的环境
1 2 3 |
yum install python-pip pip install python-gitlab yum install git-svn |
2.4 拉取gitmirrors代码
1 2 3 4 5 6 7 |
# su - gitmirror $ mkdir repositories $ touch private_token $ git clone https://github.com/samrocketman/gitlab-mirrors.git $ cd gitlab-mirrors $ chmod 755 *.sh $ cp config.sh.SAMPLE config.sh |
2.5 修改配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
$ cat config.sh | grep -v ^# system_user="svnmirror" #运行gitmirror的系统用户 user_home="/home/${system_user}" repo_dir="${user_home}/repositories" enable_colors=true git_svn_additional_options="-s" #如果svn的库不是按照标准格式建立的,这里要清空 no_create_set=false no_remote_set=false force_update=false prune_mirrors=false gitlab_namespace="mirrors_svn" #gitlab上的group名称 gitlab_url="http://gitlab.xxx.com" #gitlab地址 gitlab_user="svnmirror" #gitlab用户 gitlab_user_token_secret="$(head -n1 "${user_home}/private_token" 2> /dev/null || echo "")" ssl_verify=true http_remote=false issues_enabled=false wall_enabled=false wiki_enabled=false snippets_enabled=false merge_requests_enabled=false public=false |
2.5 在gitlab找到用户的Personal Access Tokens写入配置
settings->Access Token->Personal Access Tokens
$ cat xxxxxxxxxx >> ~/private_token
3. 同步项目
3.1 将系统用户的公钥存入github和gitlab,用于验证
用户设置 -> SSH Keys
3.2 svn转换用户文件gitsvn_authors.txt
svn作者 = git Username <邮箱地址>
3.3 获取svn用户信息
1 |
svn log --xml | grep "^<author" | sort -u | \awk -F '<author>' '{print $2}' | awk -F '</author>' '{print $1}' > userinfo.txt |
3.4 操作开始
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#添加项目 $ ./add_mirror.sh --git --project-name test --mirror git@github.com:evan-git/test.git--project-name #为gitlab建立的mirros项目名称 #svn项目 $ ./add_mirror.sh --svn --project-name pivas --mirror https://192.168.31.66/svn/PIVAS --authors-file ./gitsvn_authors.txt #手动同步代码 $ ./git-mirrors.sh #通过计划任务定期同步代码 $ crontab -e @hourly /home/gitmirror/gitlab-mirrors/git-mirrors.sh #其它命令 $ ./ls-mirrors.sh 列出以添加的项目 $ ./delete_mirror.sh --delete someproject 删除项目 $ ./update_mirror.sh project_name 单独同步某个项目 $ ./git-mirrors.sh 同步所有项目 |