repo代码迁移到git服务器上之repo代码库迁移2

如果不保留OEM厂家给的远程服务器代码路径,在新的git服务器代码路径发生变化的情况下,迁移代码的方式如下:
假定代码下载到zhaojr账号下的AndroidO_Repo目录中,如下:
zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927$
repo init -u ssh://b_flyaudio001@release.autochips.com:29418/atc/android/o/manifest -b android-trunk-o1.ac8227L -g all,-notdefault
zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927$ repo sync -c -f
zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927$ repo forall -c "git checkout -b android-trunk-o1.ac8227L autochips/android-trunk-o1.ac8227L"

在开始创建之前,先说明一下.repo/manifests/default.xml文件的构成:
   remote=”” 来指定使用哪一个remote地址。
   revision 指定分支,从remote地址拖工程时指定拖哪个分支。
   path:本地相对路径,可以不指定,不指定的话表示和name相同。
   name:远程相对与remote地址的路径。
   version:
   groups:
   upstream:
这里的每个name就代表一个git子工程,整个android工程有很多个git子工程组成,这里指定了各个子工程相对于remote的路径、版本、拖下来后的本地路径。如下:
/home/zhaojr/project/AndoridOGO_8827L_20180927

以下部分开始创建过程:
1、拷贝.repo/manifests/default.xml文件到git服务器的/home/git/新代码库路径目录中,如下:
git@S2600CP:~$ mkdir -p ./Project/8227L_project
git@S2600CP:~$ cd ./Project/8227L_project
git@S2600CP:~/Project/8227L_project$

scp zhaojr@172.168.1.220:/home/zhaojr/projectAndoridOGO_8827L_20180927/.repo/manifests/default.xml ./
之后修改default.xml,将文件中的name= atc/android/o/xxxxx修改成name= xxxxx 其他不变,如下:
修改前:
  <project name="atc/android/o/ccu_tool" path="ccu_tool" />
  <project groups="broadcom_pdk,device,fugu,pdk" name="atc/android/o/device/asus/fugu" path="device/asus/fugu" />
  <project groups="broadcom_pdk,device,fugu,pdk" name="atc/android/o/device/asus/fugu-kernel" path="device/asus/fugu-kernel" />
  <project name="atc/android/o/device/autochips/8227LGO_demo" path="device/autochips/8227LGO_demo" />
  <project name="atc/android/o/device/autochips/8227L_demo" path="device/autochips/8227L_demo" />
  <project name="atc/android/o/device/autochips/8227L_evb" path="device/autochips/8227L_evb" />
  .................................

修改后:
  <project name="ccu_tool" path="ccu_tool" />
  <project groups="broadcom_pdk,device,fugu,pdk" name="device/asus/fugu" path="device/asus/fugu" />
  <project groups="broadcom_pdk,device,fugu,pdk" name="device/asus/fugu-kernel" path="device/asus/fugu-kernel" />
  <project name="device/autochips/8227LGO_demo" path="device/autochips/8227LGO_demo" />
  <project name="device/autochips/8227L_demo" path="device/autochips/8227L_demo" />
  <project name="device/autochips/8227L_evb" path="device/autochips/8227L_evb" />

.....................................................................
 之后保存
 
2、将之前repo代码库迁移1中的getnames_and_create_project.py拷贝到git服务器的新代码库路径中,如下:


git@S2600CP:~/Project/8227L_project$ scp zhaojr@172.168.1.220:/home/zhaojr/project/AndoridOGO_8827L_20180927/getnames_and_create_project.py ./
 内容如下:
 #!/usr/bin/python3

import os
import sys

if len(sys.argv) == 1:
    print('错误!请传入 xml 文件')
elif len(sys.argv) > 2:
    print('错误!传入参数太多')
else:
    print('传入的文件是 %s' % sys.argv[1])

with open(sys.argv[1], 'r') as fin:
    while True:
        linestr = fin.readline()
        if linestr == '':       #表示文件结束
            break
        print(linestr)
        #下面开始对本行内容分析
        if (('name=' in linestr) or ('name =' in linestr)) and (('project' in linestr) or ('path' in linestr)):   #本行内容含有name信息
            print(linestr)
            #下面分析本行内容,并提取name
            charistr1 = 'name="'
            charistr2 = '"'
            gitprojstr = linestr[linestr.index(charistr1)+len(charistr1) : linestr.index(charistr1)+len(charistr1)+ linestr[linestr.index(charistr1)+len(charistr1):].index(charistr2)]
            print(gitprojstr)
            path_m=gitprojstr
            if path_m == 'autochips':
                print(path_m)
            else:
                #下面开始创建git工程
                #cmd = 'git init --bare %s.git' % gitprojstr
                cmd = 'git init --bare %s' % gitprojstr
                print(cmd)
                os.system(cmd)
getnames_and_create_project.py文件下载链接:https://download.csdn.net/download/jinron10/10696067

 运行脚本批量创建远程服务器新路径的git子库,如下:
 git@S2600CP:~/Project/8227L_project$ ls ./
 getnames_and_create_project.py
 default.xml
 git@S2600CP:~/Project/8227L_project$ ./getnames_and_create_project.py default.xml

  
 3、远程代码新路径下创建manifest的git库,用来管理第2章节中批量创建的git子库,如下:
 git@S2600CP:~/Project/8227L_project$ mkdir manifest
 git@S2600CP:~/Project/8227L_project$ cd manifest
 git@S2600CP:~/Project/8227L_project/manifest$ git init --bare

 以下在客户端执行:
 进入从OEM厂家拉下来的代码的.repo/manifests/路径中,将remote修改成git@172.168.1.63:/home/git/Project/8227L_project/manifest,如下:
 zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927/.repo/manifests$ git checkout -b android-trunk-o1.ac8227L origin/android-trunk-o1.ac8227L
 zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927/.repo/manifests$ git remote set-url origin  git@172.168.1.63:/home/git/Project/8227L_project/manifest

 修改.repo/manifests/default.xml 先进行备份 如下:
 zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927/.repo/manifests$ cp default.xml atc_default.xml
 <?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch="../../.." name="autochips" review="release.autochips.com:8080"/>
  
  <default remote="autochips" revision="android-trunk-o1.ac8227L" sync-j="4"/>
<project name="atc/android/o/ReleaseNote" path="ReleaseNote" />
  
  <project name="atc/android/o/ccu_tool" path="ccu_tool" />
  .....................................

 修改成:
 <?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch="ssh://git@172.168.1.63:/home/git/Project/8227L_project/" name="origin"/>或
  <remote fetch="ssh://git@172.168.1.63/home/git/Project/8227L_project/" name="origin"/>
  
  <default remote="origin" revision="android-trunk-o1.ac8227L" sync-j="4"/>
  <project name="ReleaseNote" path="ReleaseNote" />
  <project name="ccu_tool" path="ccu_tool" />
  .........................................

 其他保持不变。上传到git服务器的/home/git/Project/8227L_project/manifest库中,如下:
zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927/.repo/manifests$ git add ./
zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927/.repo/manifests$ git commit -m "init mt8827L AndroidO project init"
zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927/.repo/manifests$ git push origin android-trunk-o1.ac8227L

4、批量上传OEM厂家给的repo代码子库
   将之前在repo代码库迁移1中批量上传代码的脚本文件和之前修改的default.xml文件复制到本地的OEM厂家下载的代码库中,如下:
zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927$ cp ~/xxxx/getnames_and_init_push_git_proj.py ./
zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927$ cp .repo/manifests/default.xml ./

执行批量上传,如下:
zhaojr@OptiPlex-7040:~/project/AndoridOGO_8827L_20180927$ ./getnames_and_init_push_git_proj.py default.xml
getnames_and_init_push_git_proj.py的内容如下:
#!/usr/bin/python3

import os
import sys

#remote = 'git@127.0.0.1:rk3229'
#git@172.168.1.63/home/git/Project/8227L_project
##remote = 'git@172.168.1.63:atc/android/o'
remote = 'git@172.168.1.63:/home/git/Project/8227L_project'       ####注意这个地址,一定要跟服务的getnames_and_create_project.py这个脚本运行路径保持一致,否则会在上传代码时提示找不到repo初始化的情况
#remote = 'ssh://b_flyaudio001@release.autochips.com:29418'
#remote = 'ssh://b_flyaudio001@release.autochips.com:29418'

if len(sys.argv) == 1:
    print('错误!请传入 xml 文件')
elif len(sys.argv) > 2:
    print('错误!传入参数太多')
else:
    print('传入的文件是 %s' % sys.argv[1])

with open(sys.argv[1], 'r') as fin:
    while True:
        linestr = fin.readline()
        if linestr == '':       #表示文件结束
            break 
        #####for project-list.txt       
        #else:
            #print(linestr)            
            #localpath = sys.path[0] + '/' + linestr        # git工程的本地绝对路径
            #remotepath = remote + '/' + linestr            # git工程远程相对路径
            #cmd = 'cd %s && git remote set-url autochips %s &&git push -u autochips android-trunk-o1.ac8227L && cd %s' % (localpath, remotepath, sys.path[0])
            #print(cmd)
            #os.system(cmd)
            #end for  project-list.txt
        print(linestr)
        #下面开始对本行内容分析
        if (('name=' in linestr) or ('name =' in linestr)) and (('project' in linestr) or ('path' in linestr)):   #本行内容含有name信息
            #print(linestr)
            #先无条件提取name路径
            charistr1 = 'name="'
            charistr2 = '"'
            namestr = linestr[linestr.index(charistr1)+len(charistr1) : linestr.index(charistr1)+len(charistr1)+ linestr[linestr.index(charistr1)+len(charistr1):].index(charistr2)]
            if 'path=' in linestr:            #如果path存在则用path的路径作为本地路径
                charistr1 = 'path="'
                charistr2 = '"'
                pathstr = linestr[linestr.index(charistr1)+len(charistr1) : linestr.index(charistr1)+len(charistr1)+ linestr[linestr.index(charistr1)+len(charistr1):].index(charistr2)]
            else:                             #如果path不存在,则认为path路径(本地路径)就是name路径
                pathstr = namestr
            print('name="%s", path="%s"' % (namestr, pathstr))
            path_m = pathstr
            if path_m == 'autochips':  #路径等于origin,那么不创建 这里因为OEM给的git remote -v 指向autochips,如果指向origin,那么这里将使用origin,这个将不上传
                print(path_m)
            else:
                #下面开始初始化并提交git工程
                localpath = sys.path[0] + '/' + pathstr        # git工程的本地绝对路径
                remotepath = remote + '/' + namestr            # git工程远程相对路径
                print('localpath="%s"' %localpath)
                print('remotepath="%s"' %remotepath)
                #判断本地目录是否为空,为空的话则新建一个文件,空目录会导致git提交失败
                if os.path.exists(localpath):     #目录存在上传文件
                    #cmd = 'touch %s/._USELESSFILE_' % (localpath)
                    #cmd = 'touch %s/.gitignore' % (localpath)
                    print(localpath)
                    #os.system(cmd)
                    if not os.listdir(localpath):       # 本地目录为空 这里首先判断目录是否存在,然后再判断是否为空目录,那么需要创建文件,否则无法上传,如:default.xml下的:groups="notdefault,AndroidO-All-GRP-AVIN"这类型的路径
                        cmd = 'touch %s/.gitignore' % (localpath)
                        print(localpath)
                        os.system(cmd)
                    #cmd = 'cd %s && git remote add set-url autochips %s && git add . && git commit -m "init base 8827L project" &&git push -u autochips android-trunk-o1.ac8227L && cd %s' % (localpath, remotepath, sys.path[0])
                    #cmd = 'cd %s && git remote set-url autochips %s &&git push -u autochips android-trunk-o1.ac8227L && cd %s' % (localpath, remotepath, sys.path[0])
                    print(remotepath)

           ###########这里将更新子库的远程服务器地址
                    cmd = 'cd %s && git remote set-url autochips %s && cd %s' % (localpath, remotepath, sys.path[0])
                    print(cmd)
                    os.system(cmd)

           #############这里开始上传代码
                    cmd = 'cd %s &&git push -u autochips android-trunk-o1.ac8227L && cd %s' % (localpath, sys.path[0])         
                    print(cmd)
                    os.system(cmd)
                else:       #目录不存在不上传
                    print(localpath)
                   #cmd = 'cd %s && rm -rf .git && git init && git remote add origin %s && git add . -f && git commit -m "init " &&git push -u origin master && cd %s' % (localpath, remotepath, sys.path[0])
                    #print(cmd)
                    #os.system(cmd)

getnames_and_init_push_git_proj.py文件下载链接:https://download.csdn.net/download/jinron10/10696074
5、创建master分支和dev分支
首先下载之前上传的代码,如下:
zhaojr@OptiPlex-7040:~$ mkdir test_AndroidO_Repo_self
zhaojr@OptiPlex-7040:~$ cd test_AndroidO_Repo_self
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self$ repo init -u git@172.168.1.63:Project/8227L_project/manifest.git -b android-trunk-o1.ac8227L
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self$ repo sync -c && repo forall -c "git checkout -b android-trunk-o1.ac8227L origin/android-trunk-o1.ac8227L"

 创建master分支并上传:
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self$ repo forall -c "git checkout -b master"
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self$ repo forall -c "git push origin master"

 为服务器的所有代码子库的master创建default.xml文件,如下:
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self$ cd .repo/manifests$
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self/.repo/manifests$ git checkout -b master

修改default.xml文件,将version=android-trunk-o1.ac8227L 修改成version=master,保存并上传,如下:
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self/.repo/manifests$ git add ./
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self/.repo/manifests$ git commit -m "init mt8227l androidO project master barnch default.xml confiogure"
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self/.repo/manifests$ git push origin master

 创建Dev分支:
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self$ repo forall -c "git checkout -b dev"
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self$ repo forall -c "git push origin dev"

 为服务器的所有代码子库的master创建default.xml文件,如下:
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self$ cd .repo/manifests$
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self/.repo/manifests$ git checkout -b dev

修改default.xml文件,将version=android-trunk-o1.ac8227L 修改成version=dev,保存并上传,如下:
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self/.repo/manifests$ git add ./
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self/.repo/manifests$ git commit -m "init mt8227l androidO project dev barnch default.xml confiogure"
zhaojr@OptiPlex-7040:~/test_AndroidO_Repo_self/.repo/manifests$ git push origin dev

6、下载编译
 zhaojr@OptiPlex-7040:~$ mkdir test_AndroidO_Repo1
 zhaojr@OptiPlex-7040:~$ cd test_AndroidO_Repo1

 master分支:
 zhaojr@OptiPlex-7040:~/test_AndroidO_Repo1$ repo init -u git@172.168.1.63:Project/8227L_project/manifest.git -b master
 zhaojr@OptiPlex-7040:~/test_AndroidO_Repo1$ repo sync -c && repo forall -c "git checkout -b master origin/master"
 zhaojr@OptiPlex-7040:~/test_AndroidO_Repo1$ ./allmake.sh

 Dev分支:
 zhaojr@OptiPlex-7040:~/test_AndroidO_Repo1$ repo init -u git@172.168.1.63:Project/8227L_project/manifest.git -b Dev
 zhaojr@OptiPlex-7040:~/test_AndroidO_Repo1$ repo sync -c && repo forall -c "git checkout -b Dev origin/Dev"
 zhaojr@OptiPlex-7040:~/test_AndroidO_Repo1$ ./allmake.sh

 android-trunk-o1.ac8227L分支:
 zhaojr@OptiPlex-7040:~/test_AndroidO_Repo1$ repo init -u git@172.168.1.63:Project/8227L_project/manifest.git -b android-trunk-o1.ac8227L
 zhaojr@OptiPlex-7040:~/test_AndroidO_Repo1$ repo sync -c && repo forall -c "git checkout -b android-trunk-o1.ac8227L origin/android-trunk-o1.ac8227L"
 zhaojr@OptiPlex-7040:~/test_AndroidO_Repo1$ ./allmake.sh

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值