搭建Git服务器
使用 git init --bare my-repo.git
来创建裸仓库
搭建Gerrit服务器
搭建Repo服务器
搭建Repo服务器
如何使用Google Repo管理复杂项目
怎么针对自己项目工程建立Repo管理多个git仓库?
repo并不是一个程序,而是一个脚本工程,git才是真正的版本管理工具。说到底,Repo就是一堆批处理,它把git的命令进行了合理封装,目标就是同时管理多个git工程。
repo init -u git://10.203.138.81/RepoServer/manifest.git
- 首先它创建一个.repo的文件夹,这个文件夹是隐藏的。接下来Repo所做的事情都是在.repo这个文件夹底下进行的。
- 它从网上下载一个repo.git的工程,这个工程才是整整的Repo的全部,也就是我们前面说过的”git命令脚本工程”,它是使用python语言写的。
- 最后它把”-u git://10.203.138.81/RepoServer/manifest.git”传递给了repo工程。manifest.git工程中其实只有一个文件:default.xml,这个文件记录了一个工程列表。
当我们执行repo sync时,Repo通过解析default.xml这个文件,循环遍历下载所有的工程,从而达到统一管理的目的。
.
├── manifests
├── manifests.git
├── manifest.xml -> manifests/default.xml
├── project.list
├── projects
└── repo
其中 repo
和 manifests
是两个 git仓库
,分别为 repo仓库
和 manifests仓库
> /.repo > cd repo
> /.repo/repo > git remote -v
origin http://xxx.xxx.xxx.xxx/git/repo.git (fetch)
origin http://xxx.xxx.xxx.xxx/git/repo.git (push)
> /.repo/repo > cd ../manifests
> /.repo/manifests > git remote -v
origin http://xxx.xxx.xxx.xxx/git/a/b.git (fetch)
origin http://xxx.xxx.xxx.xxx/git/a/b.git (push)
Repo工作原理
Repo工具实际上是由一系列的Python脚本组成的,这些Python脚本通过调用Git命令来完成自己的功能。比较有意思的是,组成Repo工具的那些Python脚本本身也是一个Git仓库。这个Git仓库在AOSP里面就称为Repo仓库。
上面我们讨论的是Repo仓库,但是实际上我们执行Repo命令想操作的是AOSP。这就要求Repo命令要知道AOSP都包含有哪些子项目,并且要知道这些子项目的名称、仓库地址是什么。换句话说,就是Repo命令要知道AOSP所有子项目的Git仓库元信息。我们知道,AOSP也是不断地迭代法变化的,例如,它的每一个版本所包含的子项目可能都是不一样的。这意味着需要通过另外一个Git仓库来管理AOSP所有的子项目的Git仓库元信息。这个Git仓库在AOSP里面就称为Manifest仓库。
提到了三种类型的Git仓库,分别是Repo仓库、Manifest仓库和AOSP子项目仓库。Repo仓库通过Manifest仓库可以获得所有AOSP子项目仓库的元信息。有了这些元信息之后,我们就可以通过Repo仓库里面的Python脚本来操作AOSP的子项目。那么,Repo仓库和Manifest仓库又是怎么来的呢?答案是通过一个独立的Repo脚本来获取,这个Repo脚本位于AOSP的一个官方网站上,我们可以通过HTTP协议来下载。
通过一个图来来勾勒一下整个AOSP的Picture,它由Repo脚本、Repo仓库、Manifest仓库和AOSP子项目仓库组成,如图1所示:
把已有的repo工程提交到服务器
一、基础知识
1、git
2、repo
3、manifest.xml文件
二、把已有的repo工程提交到自己的服务器
1、客户端和服务端都安装python3
2、客户端准备一个干净的工程
3、服务器端创建manifest.git工程
4、客户端修改并上传manifest.xml文件
5、服务端分析manifest.xml文件,批量创建工程
6、客户端分析manifest.xml文件,批量上传到服务器
7、测试
拆分repo仓库
使用 git subtree 來分拆子目錄成獨立的新 repo
分离子目录到单独的 Git Repo
pushd ~/Code/node-browser-compat/
git subtree split -P btoa -b btoa-only
popd
mkdir ~/Code/btoa/
pushd ~/Code/btoa/
git init
git pull ~/Code/node-browser-compat btoa-only