参考链接:

背景:

已经搭建Nexus3.6.0,需要迁移原有 两个 nexus2上的jar包 到nexus3统一管理。

分析:

  • Nexus2.x 服务器直接存储jar包
  • Nexus3.x 服务器存储的是二进制文件
  • 所以不能通过 copy原Nexus2.x服务器上的 repositories目录 到nexus3.X,刷新index方式来迁移。

迁移导入方法:

  1. 官方Upgrading
    具体实施可以参考上一篇blog。
    这种方法有两个小问题:
    - 需要原nexus版本为2.14.x版本
    - 每个nexus2导入都会在nexus3上面都会创建一个仓库,不适合有多个nexus2统一迁移到一个nexus3

  2. mvn deploy命令上传
    如果原nexus2待迁移的jar包并不多,可以使用这种方式。
    1. 只上传jar,自动生成pom.xml (独立jar,pom不需要依赖其它)
    mvn deploy:deploy-file -DgroupId=$groupId -DartifactId=$artifactId -Dversion=$version -Dpackaging=jar -DrepositoryId=nexus -Durl=http://$ip:8081/repository/$repository_name -Dfile=$path/XX.jar

    2. 上传jar 和 pom.xml (pom里面有依赖)
    mvn deploy:deploy-file -DgroupId=$groupId -DartifactId=$artifactId -Dversion=$version -DgeneratePom=false -Dpackaging=jar -DrepositoryId=nexus -Durl=http://$ip:8081/repository/$repository_name -DpomFile=$path/pom.xml -Dfile=$path/XX.jar
    需要注意:
    - 命令里面-DrepositoryId=nexus对应的是本机mvn settings.xml文件配置
    - 写脚本封装上面命令实现批量迁移

  3. http协议上传
    直接使用http put 文件到/repository/$repo-id/$path-of-file
    curl -v -u admin:admin123 –upload-file pom.xml http://$ip:8081/repository/maven-releases/org/foo/1.0/foo-1.0.pom
    我们需要上传的文件:jar和pom.xml

    创建 mavenimport.sh 脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash

# Get command line params
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done

find . -type f -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' -exec curl -u $USERNAME:$PASSWORD -X PUT -v -T {} $REPO_URL{} \;
登陆到Nexus2.x服务器执行
    cd $releases_dir
    cp $path/mavenimport.sh .
    sh mavenimport.sh -u admin -p admin123 -r http://$ip:8081/repository/$release_repository_name

    cd $snapshots_dir
    cp $path/mavenimport.sh .
    sh mavenimport.sh -u admin -p admin123 -r http://$ip:8081/repository/$snapshots_repository_name

需要注意:
    - 上面命令里面 -u admin -p admin123 请更换成nexus管理员帐户密码 (nexus默认管理员/密码 admin/admin123)
    - 上面命令里面 $releases_dir 是指Nexus2.x服务器上存储releases仓库路径。
    - 上面命令里面 $snapshots_dir 是指Nexus2.x服务器上存储snapshots仓库路径。
    - 如果不切换到上面目录里面,那么上传的jar包 group_id会有问题。

Comment and share

背景:

公司主要使用git作为代码管理仓库,现需要把部分使用svn管理的代码迁移到git。

需求:

需要保留所有 branches、主干、tags的历史记录。

迁移方法:

使用git官方提供的git svn命令

系统环境:

  • OS: macOS 10.13.3
  • SVN:1.9.4
  • GIT:2.16.2

迁移步骤:

  1. 获取指定svn代码库涉及的开发同学名单并转换:
    svn log $SVN_URL –xml | grep author | sort -u | perl -pe ‘s/.>(.?)<.*/$1 = /‘ > user.txt

user.txt内容如下:
dev1_name =
dev2_name =
因为svn只有用户名,而git需要提供用户名和邮箱,所以我们需要做下用户转换。
修改上述命令得到的user.txt如下:
dev1_name = dev1_name
dev2_name = dev2_name
2. 使用git svn cloned代码库到本地:
git svn clone $SVN_URL –no-metadata –authors-file=user.txt -s
3. 调整本地库目录结构:
cd $project_dir
mv .git/refs/remotes/origin/tags/$tags_name .git/refs/tags/
mv .git/refs/remotes/origin/$branches_name .git/refs/heads/
rm -rf .git/refs/remotes/origin
4. 上传本地库到remote仓库:
git remote add origin $GIT_URL
git push origin –all
git push origin –tags

PS:

  1. 如果svn历史记录太多,而且并不需要很久之前的版本的话,可以选择从指定版本进行转换。
    git svn clone $SVN_URL -r $指定版本:HEAD
  2. 较新版本的git都原生带了 git svn命令,如果你使用的git版本没有此命令,建议升级新版git或者单独安装git-svn命令。
  3. git clone命令执行时间主要和 原SVN库大小、log多少有关。
  4. svn迁移git后需要注意git不支持空目录,需要使用在空目录增加隐藏文件来上传,通常使用.gitkeep文件。
  5. 如果原SVN库结构不是规范的branches、tags、trunk结构
    git svn clone $SVN_URL –branches= –tags= –trunk=
    如果没有tags的话–tags可以不写,branches同理;subdir写相对路径即可
    上面使用的-s参数表示的是–stdlayout适合标准结构的SVN项目。

Comment and share

  • page 1 of 1
Author's picture

Weilong

    Write something about work-life:

PM


Shenzhen