Repo是一个工具,可以有效的管理Android底下的几百个git工程。Repo并不是一个程序,而是一个脚本工程,git才是真正的版本管理工具。说到底,Repo就是一堆批处理,它把git的命令进行了合理封装,目标就是同时管理多个git工程。以下就是搭建Repo服务器端的步骤。
见另一篇博文, Ubuntu上搭建Git服务器。
$ mkdir RepoServer(如,当前目录为/home/david)
$ cd RepoServer
$ git init --bare manifest.git
$ git init --bare bootable.git
$ git init --bare cpp.git
$ git init --bare device.git
$ sudo apt-get install git-daemon-run
$ sudo gedit /etc/sv/git-daemon/run
做如下修改:
exec“(git –exec-path)”/git-daemon --verbose --reuseaddr --enable=receive-pack --enable=upload-pack --enable=upload-archive --export-all --base-path=/home/david
重启git-daemon,使修改生效。
$ sudo sv restart git-daemon
登陆一个库户机,克隆manifest.git仓库。
$ cd C:\Users\XXX\git81
$ mkdir MyRepo
$ cd MyRepo
$ git clone [email protected]:/home/david/RepoServer/manifest.git
(会要求输入用户david在10.203.138.81上的密码)
$ cd manifest
在manifest仓库下创建一个default.xml文件。
提交我们的更改.
$ git add --all
$ git commit -m“add default.xml”
$ git push origin master(可能会出push失败的情况,可以尝试git push –-all或者git push [email protected]:/home/david/RepoServer/manifest.git master)
登陆客户机,分别克隆源码仓库(此时是空仓库)。
$ git clone [email protected]:/home/david/RepoServer/bootable.git
$ git clone [email protected]:/home/david/RepoServer/cpp.git
$ git clone [email protected]:/home/david/RepoServer/device.git
在相应的源码仓库中加入源码文件,提交并上传。
$ cd bootable
$ echo “hello Project” > hello.txt
$ git add --all / git add . (注意这里有个点'.',表示添加当前目录所有文件)
$ git commit –m “add hello.txt”
$ git push origin master
(其他仓库做类似处理)
在repo脚本中有个REPO_URL,它指向服务器端repo仓库的URL。在这里我们定制自己的Repo仓库。我们可以下载一个repo工具 (https://github.com/android/tools_repo 或 http://pan.baidu.com/s/1gXeRs) ,这里我们下载的是tools_repo-master.zip,解压并改名到服务器段的某个目录(/home/david/RepoServer)。
$ cd /home/david/RepoServer
$ unzip tools_repo-master.zip
$ mv tools_repo-master repo
将repo置于版本管理下:
$ cd repo
$ git init
$ git add --all
$ git commit –m “initial”
在一个Ubuntu客户机上进行测试。
$ cd ~
$ mkdir bin
$ curl http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo > ~/bin/repo
(repo脚本可自行下载)
$ chmod a+x ~/bin/repo
$ export PATH=~/bin:$PATH
$ mkdir MyProject
$ cd MyProject
$ repo init --repo-url=git://10.203.138.81/RepoServer/repo --no-repo-verify --repo-branch=master –u git://10.203.138.81/RepoServer/manifest.git
(--repo-branch根据具体情况而定,一般为default或master)
$ repo sync
curl其实是一个下载工具,下面这个命令其实就是把网络上一个文件下载到了本地bin目录下。
curl http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo > ~/bin/repo
我们通过chmod a+x ~/bin/repo 使得repo文件可以执行。
这个文件其实很关键,它相当于启动Repo的启动器。但是,很多初学者都进入了一个误区,认为repo文件就是Repo的全部。其实这是不对的,当执行下面这个命令时:repo其实做了很多很多的事情.....
repo init -u git://10.203.138.81/RepoServer/manifest.git
1、首先它创建一个.repo的文件夹,这个文件夹是隐藏的。接下来Repo所做的事情都是在.repo这个文件夹底下进行的。
2、它从网上下载一个repo.git的工程,这个工程才是整整的Repo的全部,也就是我们前面说过的"git命令脚本工程",它是使用python语言写的。
3、最后它把"-u git://10.203.138.81/RepoServer/manifest.git"传递给了repo工程。manifest.git工程中其实只有一个文件:default.xml,这个文件记录了一个工程列表。
当我们执行repo sync时,Repo通过解析default.xml这个文件,循环遍历下载所有的工程,从而达到统一管理的目的。
参考:
1、《Git权威指南》
2、《版本控制之道:使用Git》
3、《Git Community Book》
4、《Pro Git》