主要内容摘自:《Git权威指南》
Repo协同工作模式分析
1.repo + Gerrit
repo Gerrit是Android代码管理的两大支柱。
建立这样模式的系统一般方法为:
a.搭建Git服务器
b.导入repo.git,为了节省去Google clone的网络操作,有的时候还可能被功夫网拒之门外
c.搭建Gerrit服务器
d.创建项目仓储
e.建立manifest.git项目清单,其中remote fetch指向a所搭建的git服务器地址
2. repo无审核
Gerrit的搭建略显复杂,且需要进行一定维护,当然最重要的就是Gerrit平台的学习和使用(对提交者不是很重要,对管理者重要)。在一个开发环境优良的团队内,Gerrit确实不是很有存在的必要,每个成员都熟悉Git操作,编程能力都可信,单元测试质量由代码提交者保证,集成测试由单独的测试团队进行,即团队拥有一套完整、成型的研发工作流,引入Gerrit并非必要。
脱离Gerrit服务器向Git服务器直接打交道。可以利用repo forall迭代器实现多个项目代码的PUSH操作。一般方法:
a.repo start建立本地工作分支:
repo start master --all
b.PUSH要使用git push
repo forall -c git push
c.如果git服务器为只读,则需要为本地版本库一一更新服务器版本库地址
repo forall -c \
'git remote set-url --push master android@xxxxxx.com:android/${REPO_PROJECT}.git'
REPO_PROJECT是实现批量设置的关键,为项目名。
3. repo无审核的改进模式
通过repo forall向上游提交要求repo start所建立的分支一定要和上游一致,有可能导致问题。
作者 蒋鑫老师(《Git权威指南》)改进了repo,增加了两个子命令repo config/repo push,可以使得repo脱离Gerrit服务器直接向上游提交代码。改进后的REPO地址:http://github.com/ossxp-com/repo。一般方法:
a.从github上检出项目,用标准repo
repo init --repo-url=git://github.com/ossxp-com/repo.git \
--repo-branch=master --no-repo-verify \
-u git://github.com/ossxp-com/mainfest.git
repo sync
b.设置pushurl
repo config repo.pushurl ssh://git@github.com/ossxp-com/
c.PUSH到上游服务器
假设本地分支已经通过repo start建立好,在修改完若干项目后执行:
repo push
会弹出编辑器确认待推送项目列表,#号表示忽略,将真正需要提交的项目反注释掉,保存退出后就会进行PUSH操作了。
PS:使用改进后的repo向上游服务器推送新分支的操作:
repo start new1 --all
repo push --new_branch