赞
踩
1. repo和git的区别 当你完成了repo init以后,你会在你的目录下发现一个.repo的隐藏目录,进到.repo/manifest/中,打开 default.xml,这就是之前所说的用来记录一个版本中需要哪些库的文件。其实manifest目录本身其实也是一 个git库,一个android版本对应一个分支,其中的default.xml就记录着这个版本所需要的库,repo工具再根 据这个文件去把各个库的对应分支最终组合起来。总结一下,git管理单独的模块,而repo管理所有的git库, 将多个git库组合在一起,形成一个完整的大版本。 2. repo在ubuntu上安装[repo安装软件] 2.1 将附件的两个文件拷贝到 $HOME/bin目录下 2.2 解压repo_mtk.git.tar.gz 文件 tar -xzvf repo_mtk.git.tar.gz 2.3 修改repo_mtk文件里的 REPO_URL = '/bin/repo_mtk.git' 设置完毕,在终端输入repo --version可以查看版本号,使用repo init 路径来初始化代码了,然后使用repo sync来更新代码。 3. repo仓库搭建 3.1 准备:拉取外部服务器代码,由mtk提供代码地址。本次要搭建的O版本61/62地址为: repo init -u http://user-git@git01.mediatek.com/alps_release/platform/manifest -b bird -m alps-release-o1.mp7-default.xml --no-repo-verify; repo sync -c -f -j8 --no-repo-verify --optimized-fetch 3.2 同时要在主文件夹中新建文件.netrc,输入mtk提供的账号和密码。文件见.netrc 3.3 服务器上创建目录 mkdir BIRD_O1MP1_K39TV1_BSP_8.1 3.4 从default.xml中提取目录,default.xml文件在.repo/manifests/文件夹下,根据版本选择指定的xml文件。 cat default.xml | grep path= | sed "s/ /\n/g" | grep path | sed "s/path=\"//g" | sed "s/\"//g"| sed "s/\/>//g" | sed "s/>//g" > project.list 将project.list拷贝到BIRD_O1MP1_K39TV1_BSP_8.1目录下 3.5 根据project.xml文件生成指定目录 for proj in `cat ./project.list`; do mkdir -p $proj; done 3.6 对应的目录生成空的git仓库 for proj in `cat ./project.list`;do pushd $proj; git init --bare --shared ; popd ;done 3.4 | 3.5 | 3.6 脚本的作用就是要根据.repo/manifests文件夹下的default.xml文件生成project.list,再通过project.list生成对应的git仓库目录,将git仓库拷贝到远程服务器工程的文件夹下。 我的用法是直接用default.xml文件生成git仓库目录,通过脚本实现,再将目录拷至服务器。getnames_and_create_project.py,文件见附录 添加客制化目录bird目录,mediatek是远程仓库名,refs/heads/alps-release-p0.mp1是远程分支。 <default remote="mediatek" revision="refs/heads/alps-release-p0.mp1" sync-j="4"/> <project name="bird" path="../bird" > <linkfile dest="mk" src="script/core/makeBird"/> <linkfile dest="../bird/git" src="script/tool/git_wrap.sh"/> <linkfile dest="repo" src="script/tool/repo_wrap.sh"/> <linkfile dest="../clear.sh" src="script/tool/clear.sh"/> </project> <project name="modem" path="../modem" > </project> 3.7 创建bird仓库,该步骤可以现在添加也可以等上传完成后再添加。 mkdir bird cd bird git init --bare ps1:在创建bird目录后要通过git clone 命令将bird目录拷贝到本地,同时替换远程库地址和名称,如将origin改成mediatek,另分支也要改成上传对应的分支,要不拉代码会出现报错。 ps2:在bird目录中要添加链接mk文件,这时要一起添加,因为要在manifest.git文件中配置路径。 3.8 在BIRD_O1MP1_K39TV1_BSP_8.1下创建一个manifest仓库 mkdir manifest.git git init --bare manifest.git 3.9 clone manifest.git仓库到本地 git clone git@192.168.50.56:../../var/repo/BIRD_O1MP1_K39TV1_BSP_8.1/manifest.git git是用户名,192.168.50.56是远程服务器IP地址。 3.10 将default.xml拷贝到manifest目录 git add default.xml git commit -m "init repo base" git push origin master 本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。 3.11 替换远程库中各个git仓库的url find ./projects -name "config" | xargs sed -i "s/username@192.168.50.56:..\/..\/var\/BIRD_VEHICLE_P0MP13_E02/http:\/\/git-user@git01.mediatek.com\/alps_release/g" 3.12 使用如下命令推送到服务器,这样在服务器上创建了alps-release-o1.mp7分支 repo forall -c 'git push mediatek HEAD:refs/heads/alps-release-o1.mp7' 3.13 代码上传后使用下如下命令恢复远程库的url find ./projects -name "config" | xargs sed -i "s/http:\/\/git-user@git01.mediatek.com\/alps_release/user@192.168.50.56:..\/..\/var\/vehicle/g" 3.14 拉取repo仓库 repo init -u username@192.168.50.56:../../var/project/vehicle/manifest.git -b branch_name -m manifest.xml 其中-b和-m是指定manifest.git仓库的分支和相应的default.xml。我们这里暂时不需要使用这两个参数 repo sync 3.15 代码上传和下拉命令 repo start branch_name --all 创建本地分支,否则后续单独库更新的时候无法pull 3.16 bird仓库修改都要使用如下命令 git push mediatek HEAD:refs/heads/alps-release-o1.mp7 git pull mediatek refs/heads/alps-release-o1.mp7:master 4. repo操作指令 4.1 清理工程命令 repo forall -c 'git checkout -f' repo forall -c 'git clean -df' 4.2 后续修改代码使用如下命令提交 repo forall -c 'git add -A' repo forall -c 'git commit -m "仓库推送后的修改"' repo forall -c 'git push mediatek HEAD:refs/heads/alps-release-o1.mp7' repo upload 二 代码同步步骤: 1. 创建本地分支 repo init -u git@192.168.50.55:../../var/repo/BIRD_O1MP1_K39TV1_BSP/manifest.git repo sync -c repo start branch_name --all 使用repo branch可以查看目前处于branch_name分支。 2. 修改各git仓库的config url使之指向远程仓库对应地址。这一步可以使用脚本执行替换动作 3. repo forall -c 'git fetch mediatek refs/tags/t-alps-release-o1.mp7-V1.167' refs/tags/t-alps-release-o1.mp7-V1.167 是远程仓库的分支 4. repo forall -c 'git merge origin/master' 5. 修改各git仓库的config url,使之指向本地仓库对应的地址。这一步可以使用脚本执行替换动作 6. repo forall -c 'git push origin HEAD:master' //将当前分支直接push到远程仓库的主线上,这一步如果主线有上传代码会有冲突。 因为我们alps目录是不会修改,所以一般情况下是不会有冲突的。我们自己修改的只是bird目录 7. 每次同步后要将此次同步的标签一起上传 repo forall -c 'git tag t-alps-release-01.mp1-V1.42' //创建t-alps-release-01.mp1-V1.41标签 repo forall -c 'git push origin t-alps-release-01.mp1-V1.42' //将标签t-alps-release-01.mp1-V1.41上传到远端服务器 将本地代码切换到某一个tag repo forall -c 'git checkout t-alps-release-01.mp1-V1.42' 下面介绍下tag的用法 1) 添加标签: git tag -a version -m "note" 注解:git tag 是打标签的命令,-a 是添加标签,其后要跟新标签号,-m 及后面的字符串是对该标签的注释。 2) 提交标签到远程仓库 :git push origin -tags 注解:就像git push origin master 把本地修改提交到远程仓库一样,-tags可以把本地的打的标签全部提交到远程仓库。 3) 删除标签:git tag -d version git tag -d test_tag //本地删除tag 注解:-d 表示删除,后面跟要删除的tag名字 4) 删除远程标签:git push origin :refs/tags/version 可以不用删除本地tag,直接删除远端tag git push origin :refs/tags/test_tag //删除远端tag 注解:就像git push origin :branch_1 可以删除远程仓库的分支branch_1一样, 冒号前为空表示删除远程仓库的tag。 5) 查看标签:git tag或者git tag -l
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。