Android开源工程的代码,使用了一个叫repo的工具,有效的管理着Android底下的几百个git工程。
事实上repo本上并不是一个程序,而是一个脚本工程.......而git才是真正的版本管理工具。
说白了,repo就是一堆批处理(python语言写的),它把git的命令进行了合理封装,目标就是同时管理多个git工程。repo只是联合manifest.git中project list xml的多个工程,统一管理。在运行repo sync的情况下,xml文件中指定的工程都统一被sync下来
--------------------------------------
以下就是搭建repo服务器端的步骤,有了它我们也能像Android项目那样在linux系统下同时管理几百个工程了。
mkdir repositories
cd repositories
git init --bare manifest.git
cd repositories
git init --bare project1.git
sudo gedit /etc/sv/git-daemon/run
Modify the last line to:
exec git-daemon --verbose --enable=receive-pack --export-all --base-path=/home/Frank/repositories
Reboot the machine
Login a client machine, run following command to clone manifest.git repository:
mkdir MyRepo
cd MyRepo
git clone [email protected]:repositories/manifest.git
cd manifest
Create a default.xml file with following content:
"1.0" encoding="UTF-8"?>
"korg" fetch="git://192.168.5.141/" review="review.source.android.com" />
<default revision="master" remote="korg" />
"project1" name="project1" />
Run following command to commit default.xml file
git add --all
git commit -a -m "add default.xml"
git push --all
Login a client machine, run following command to clone project1.git repository:
cd MyRepo
git clone [email protected]:repositories/project1.git
cd project1
echo "Hello Project1" > Hello.txt
Run following command to commit Hello.txt file
git add --all
git commit -a -m "add Hello.txt"
git push --all
Run following command on the client machine side.
mkdir bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
Export ~/bin to system enviroment path.
mkdir MyProject
cd MyProject
repo init -u git://192.168.5.141/manifest.git
repo sync
====================================================================
repo实例1:
http://blog.csdn.net/21cnbao/article/details/7272708
repo实例2:
http://www.linuxidc.com/Linux/2013-04/83563.htm
repo实例3:
http://wenku.baidu.com/link?url=q_fGazjkzNuH8kKluJvm2P_nL4Hdd-EJd8y8VE-NR8XhIpr8qALD3Gdufh4QGLUT-5WzWaXFaXsw9kJPT2SVJbnmo6w9A-Nm48McxCfHfia====================================================================
curl其实是一个下载工具,下面这个命令其实就是把网络上一个文件下载到了本地bin目录下。
curl http://android.git.kernel.org/repo > ~/bin/repo
我们通过chmod a+x ~/bin/repo 使得repo文件可以执行。
这个文件其实很关键,它相当于启动Repo的启动器。但是,很多初学者都进入了一个误区,认为repo文件就是Repo的全部。
其实这是不对的,当执行下面这个命令时:repo其实做了很多很多的事情.....
repo init -u git://192.168.5.141/manifest.git
1、首先它创建一个.repo的文件夹,这个文件夹是隐藏的。接下来Repo所做的事情都是在.repo这个文件夹底下进行的。
2、它从网上下载一个repo.git的工程,这个工程才是整整的Repo的全部,也就是我们前面说过的"git命令脚本工程"
可惜它是使用python语言写的,要想看懂它,实在是不容易....
3、最后它把"-u git://192.168.5.141/manifest.git"传递给了repo工程。
manifest.git工程中其实只有一个文件:default.xml,这个文件记录了一个工程列表。
当我们执行repo sync时,Repo通过解析default.xml这个文件,循环遍历下载所有的工程,从而达到统一管理的目的。