搭建repo服务器管理多个git工程

参考自:搭建repo服务器管理多个git工程
    repo系列讲解 —— Android系统源码(AOSP)下载

1、repo介绍

Android使用git作为代码管理工具,开发了gerrit进行代码审核,以便更好的对代码进行集中式管理。还开发了repo命令行工具,对git部分命令进行封装,将百多个git库有效的组织。

鉴于repo能够管理多个git库,针对一个项目需要多个git库分开管理,使用repo就非常方便。如嵌入式项目一般由uboot、kernel、文件系统rootfs、用户程序等组成。这里就以这样的项目组织来搭建repo服务器。

├── kernel
│   └── linux-3.5.y
├── rootfs
│   └── rootfs
├── uboot
│   └── uboot-2018.11
└── userdata
    └── UartTest

服务器:https://git.haier.net
账户:ihaier工号和门户密码

2、下载并配置repo工具

2.1 下载repo

git-repo下载可在服务器端通过以下任一方式下载。

git clone https://gerrit.googlesource.com/git-repo		(谷歌官方源)
git clone https://mirrors.tuna.tsinghua.edu.cn/git/git-repo	(国内清华源)
git clone https://gerrit-googlesource.lug.ustc.edu.cn/git-repo	(国内中科大源)

将下载的git-repo切换到master分支,然后进行下面的修改。

搭建repo服务器管理多个git工程_第1张图片
此处修改的目的:在客户端上通过repo拉取服务器端代码时,避免 repo 从git-repo源码中拷贝过来,而是让其从我们的服务器上拷贝过来,这样既省时又稳定。

注意:也可在客户端下载repo,进行相应修改后上传服务器端。

搭建repo服务器管理多个git工程_第2张图片

2.2 安装repo

将下载的 repo安装到您linux账号的环境变量的路径下,推荐安装到/usr/bin/目录,由于写入/usr/bin/目录需要管理员权限,这需要您的linux账号拥有管理员权限。

sudo cp git-repo-haier/repo /usr/bin/repo   #此处需确保repo有执行权限

3、初始化工程和mainifest git仓库

3.1 初始化项目代码仓库(git server端)

搭建repo服务器管理多个git工程_第3张图片

3.2 初始化manifest仓库(git server端)

3.2.1 初始化 manifest (git server端)

搭建repo服务器管理多个git工程_第4张图片

3.2.2 mainfest 提交default.xml

搭建repo服务器管理多个git工程_第5张图片
x30-default.xml


<manifest>

  <remote  name="origin"
           fetch="../../.."
           review="https://git.haier.net:18022/zhjdn_ai/aiot_terminal" />

  <default revision="master"
           remote="origin"
           sync-j="4" />

  <project path="Haier-x30-tina/tina3.5/build" name="os/tina3.5/build" groups="tina3.5" >
	  <copyfile src="top_main.mk" dest="Haier-x30-tina/tina3.5/Makefile" />
	  <copyfile src="rules.mk" dest="Haier-x30-tina/tina3.5/rules.mk" />
  project>
  <project path="Haier-x30-tina/tina3.5/config" name="os/tina3.5/config" groups="tina3.5" >
	  <copyfile src="top_config.in" dest="Haier-x30-tina/tina3.5/Config.in" />
  project>
  <project path="Haier-x30-tina/tina3.5/dl" name="os/tina3.5/dl" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/docs" name="os/tina3.5/docs" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/lichee/brandy-2.0/tools" name="os/tina3.5/lichee/brandy-2.0/tools" groups="tina3.5" >
	  <copyfile src="build.sh" dest="Haier-x30-tina/tina3.5/lichee/brandy-2.0/build.sh" />
  project>
  <project path="Haier-x30-tina/tina3.5/lichee/brandy-2.0/u-boot-2018" name="os/tina3.5/lichee/brandy-2.0/u-boot-2018" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/lichee/linux-4.9" name="os/tina3.5/lichee/linux-4.9" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/package" name="os/tina3.5/package" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/prebuilt" name="os/tina3.5/prebuilt" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/scripts" name="os/tina3.5/scripts" groups="tina3.5" >
	  <copyfile src="clean_kernel.sh" dest="Haier-x30-tina/tina3.5/clean_kernel.sh" />
	  <copyfile src="rebuild.sh" dest="Haier-x30-tina/tina3.5/rebuild.sh" />
  project>
  <project path="Haier-x30-tina/tina3.5/target" name="os/tina3.5/target" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/toolchain" name="os/tina3.5/toolchain" groups="tina3.5" />
  <project path="Haier-x30-tina/tina3.5/tools" name="os/tina3.5/tools" groups="tina3.5" />

  <project path="x30_uaibot_app/aibot-x30" name="app/x30/aibot-x30" groups="x30" />

  <project path="ota_pack_tool" name="tools/ota_pack_tool" groups="tools" />
manifest>

● remote标签: 包含一些远程仓库的一些信息
(1) name:远程仓库在本地的别名,可以理解为讲解git仓库时提到的origin
(2) fetch:项目名称的前缘,在构造项目仓库远程地址时使用到
(3) review:code review的服务器地址

● default标签: 默认标签,下面的标签会默认包含这个标签的属性,当然也可以在里重新更改这几个属性
(1) revision:repo init -b的时候指定的分支或tag,默认是master分支。当然如果直接在manifests里切换分支并git pull,这里也会相应改变。
(2) remote:对应上面的标签的名字
(3) sync-j:指定同步工作的并行数量,个人理解最大数不宜超过cpu的线程数
(4) sync-c:【sync-c=“true”】代表repo sync的时候只同步revision指定的分支或tag

● project标签: 每个标签指定的都是一个git管理的源码库
(1) path:源码库下载后存放的本地路径
(2) name:远程仓库的名称

3.3 客户端git提交初始代码

以3.1图中tina3.5目录下build仓库为例,其他仓库同理。

cd tina3.5/build
git init
git add . -A
git commit -s -m "add initial code"
git remote add origin https://git.haier.net/zhjdn_ai/aiot_terminal/os/tina3.5/build.git
git branch -M master #此步可有可无,作用是将当前分支重命名为master
git push -uf origin master

4、repo拉取工程代码

在客户端上repo拉取服务器端代码

mkdir Haier-X30-Project
cd Haier-X30-Project
repo init -u ssh://[email protected]:18022/zhjdn_ai/aiot_terminal/tools/git_repo/r328_tina/manifest.git -b master -m x30-default.xml
repo sync
repo start master --all # 全部下载完成之后,创建分支

repo init 参数
-u: 指定项目清单库的url地址
-m: 指定使用哪个项目清单文件
-b: 指定具体的分支,默认情况下指定master分支
--repo-url: 指定repo库的url地址
--config-name: 指定访问服务器的用户名和邮箱。这个选项后面不接内容,运行的时候会提示你输入用户名和邮箱
.
repo init主要有两部分工作:下载两个git管理的仓库(repo库和manifest库)。
repo库: 主要存放一些python脚本,配合之前说的repo脚本来共同管理众多源码仓库;
manifest库: 项目清单库,用来管理各个版本的清单文件。

搭建repo服务器管理多个git工程_第6张图片

5、repo常用指令

5.1 对每个git仓库执行相同的shell命令

用法:

repo forall -c "命令"         #不限于repo或者git的命令,其他shell命令也可以,例如ls,pwd等。

举例: 恢复用repo管理的系统源码

repo forall -c "git clean -df" && repo forall -c "git checkout ."

5.2 给整个工程打tag标签

git打tag命令:

git tag -a TAG_NAME -m "add tag TAG_NAME"

我们在此版本上打上标签为TINY4412_V1.0.0,命令如下

repo sync
repo forall -pv -c "git tag -a TINY4412_V1.0.0 -m "add tag TINY4412_V1.0.0""
repo forall -pv -c "git push origin TINY4412_V1.0.0"

5.3 帮助命令

用法:

repo help 命令选项

举例: 查看repo forall的使用帮助

repo help forall


Options:
  -h, --help            show this help message and exit
  -r, --regex           Execute the command only on projects matching regex or
                        wildcard expression
  -i, --inverse-regex   Execute the command only on projects not matching
                        regex or wildcard expression
  -g GROUPS, --groups=GROUPS
                        Execute the command only on projects matching the
                        specified groups
  -c, --command         Command (and arguments) to execute
  -e, --abort-on-errors
                        Abort if a command exits unsuccessfully
  --ignore-missing      Silently skip & do not exit non-zero due missing
                        checkouts

  Output:
    -p                  Show project headers before output
    -v, --verbose       Show command error messages
    -j JOBS, --jobs=JOBS
                        number of commands to execute simultaneously

你可能感兴趣的:(#,代码仓库管理Git/Repo,repo,git,服务器,代码)