2.git-repo部署及新项目创建

张开发
2026/4/7 4:52:42 15 分钟阅读

分享文章

2.git-repo部署及新项目创建
特别说明如果repo projects是可以下载的建议下载时repo init之后到.repo中找到对应manifest将所有的clone-depth删除避免后面在git push的时候出现难以解决的错误remote unpack failed:error Missing commit开始操作1. 遍历所有project在repo projects根目录执行repo forall-cecho $REPO_PROJECT|teeprojects.txt如果所有的proejcet放到Gerrit同一目录下而不是Gerrit根目录则可以repo forall-cecho xxx/$REPO_PROJECT|teeprojects.txt2.生成批量创建projects脚本修改{user}和{GerritServer}注意要确保user是有创建Project的权限seds/^/ssh -p 29418 {user}{GerritServer} gerrit create-project /projects.txtcreateProjects.sh3. 执行脚本创建空projectschmod777createProjects.sh ./createProjects.sh执行过程可能会报project already exist这说明存在多个Repo Path指向了同个Repo Project通常是branch或revision(commit id)不同。 这时候可以将前面的projects.txt内容贴到excel表利用excel表的查重功能找出这些project。再到manifest文件中搜索这些project确认是branch不同还是revision不同在Push完所有代码后再补操作。4. 确认Gerrit All-Projects的权限5. Push所有代码修改{user}、{GerritServer}、{xxx}和{BranchName}(repo forall-cpwd git push --tags -f -o skip-validation ssh://{user}{GerritServer}:29418/{xxx}/$REPO_PROJECT HEAD:refs/heads/{BranchName})21|teepush.log6. 单project推送如果出现个别project推送失败需要重新推送可以到相应路径下执行如下命令修改{user}、{GerritServer}和{ProjectName}gitpush--tags-f-oskip-validation ssh://{user}{GerritServer}:29418/{ProjectName}HEAD:refs/heads/{BranchName}7. project already exist处理 核对完manifest后1若是branch不同则查看Gerrit上现在的codebase是哪个Branch然后到还没被Push上去的Project Path用同样的push命令更换BranchName后执行2若是revision不同则查看Gerrit上的Branch log中有没有包含到所有revision若没有则到revision最新的Project Path下再执行一次push8. 建立自己的repo manifest1将原来的.repo/manifest/xxx.xml拷贝一份到自己Gerrit manifest仓库下然后将里面的dest-branch和upstream都改成自己新建的BranchName。2删除所有project revision可以用Nodepad的正则表达式将所有revision“xxx”替换为空但要保留内的revision3针对多Path指向同一个Project不同Branch则要特别保留它的dest-branch和revisionrevision没有保留的话会被上的revision覆盖4针对多Path指向同一个Project不同revision则要特别保留它的revisionrevision\([^\]*)\注意如果想避免多出一个空格想在查找目标中多加一个空格一起替换掉则要加在前面因为有的project把revision放在最后后面没有空格。9.manifaset修改配置文件中的remote“origin” 代表project默认关联的下载路径为origin定义的代码Gerrit project路径revision“master” 代表下载关联的分支名称若需要修改repo init默认的分支修改该定义值就行remotenameoriginfetch../eeasytech/sar-linux/remotenameforfunfetch../xxx/linux/defaultremoteoriginrevisionmastersync-j4/10.服务器开发代码与原厂SDK同步与维护下载原厂SDK并将SDK备份到Gerrit先将SDK代码打包拷贝到服务器下然后解压后进入到目录下执行如下命令一开始创建gerrit manifest项目时候创建两个分支一个是原厂分支一个是开发分支,修改{user}Gerrit用户、{GerritServer}Gerrit服务器地址{RepoProjectPatch}:Gerrit项目服务器的文件夹或路劲{BranchName}服务器远程SDK分支名称(repo forall-cpwd git push --tags -f -o skip-validation ssh://{user}{GerritServer}:29418/{RepoProjectPatch}/$REPO_PROJECT HEAD:refs/heads/{BranchName})21|teepush.log从Gerrit下载公板SDK修改{BranchName}manifests 仓库SDK项目对应的分支{ManifestsName}manifest 的xml配置文件名称repo init-ussh://$USER{GerritServer}:29418/git/manifests.git-b{BranchName}-m{ManifestsName}reposync举例repo init-ussh://$USER192.178.1.108:29418/git/manifests.git-ballwins-mlinux-v1.0.xml reposync开发线(master)rebase公板SDK#本地先重新下载全新开发线代码再执行如下命令{BranchName}:原厂SDK同步分支repo forall-cecho $REPO_PROJECT;git rebase origin/{BranchName}##通常执行完后很多仓库会有冲突需要到有冲突的仓库依次解完冲突然后执行gitrebase--continue通过以上命令rebase后本地解决所有冲突就可以强推到服务器开发线rebase后的结果是我们的所有commit都会基于最新sdk的commit。修改{RepoProjectPatch}:Gerrit项目服务器的文件夹或路劲{GerritServer}gerrit服务器地址master创建的项目开分支为主分支取决创建项目时定义开发分支的分支名(repo forall-cpwd git push --tags -f -o skip-validation ssh://$USER{GerritServer}:29418/{RepoProjectPatch}/$REPO_PROJECT HEAD:refs/heads/master)21|teepush.log

更多文章