Ubuntu 下配置 repo 服务器

直从公司的服务器上用repo sync拉代码,今天得空,也想尝试着自己在本机上搭建个repo server试试。

上网搜了一堆教程。。。好多都是copy的,折腾了半天,终于成功,特此分享。Ubuntu12.04下亲测。

1. 之前写过一篇在本机搭建Git服务器的文章(见  ),当时是需要在Server里添加Client的ssh keygen信息,Client才能访问的,这次,借助与git-daemon ,配置之后,外部Client就都能访问了,首先在Ubuntu里安装 git-daemon:(我之前已经装好Git了)

$ sudo apt-get install git-daemon

2. 然后在主目录下新建文件夹 RepoServer 并进入:

$ mkdir /home/ritterliu/RepoServer

$ cd /home/ritterliu/RepoServer

3. 新建manifest.git,用来存放repo下载代码所依据的xml文件:

$ git init --bare manifest.git

4. 此时可以将想要被分享的被git管理的工程拷贝至此目录,例如,我将自己eclispe工作区里的AngryBird5和DLNA拷贝至此目录下:

$ cp -r /work/workSpace/AngryBird5 .

$ cp -r /work/workSpace/DLNA .


注意这两个工程都要被git管理,并提交过才行,也可以在此时进入工程,执行git init,git add,git commit操作。

5. 现在先放下这个目录不管,去配置下git-daemon的执行路径,需要root权限:

$ sudo su

# vi /etc/sv/git-daemon/run

将 /etc/sv/git-daemon/run 文件配置为如下内容

#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec chpst -ugitdaemon \
   "$(git --exec-path)"/git-daemon --verbose --export-all --base-path=/home/ritterliu/

重启git-daemon:

# sv restart git-daemon

6. 然后在其他任意目录clone出manifest.git,此时为空,会clone出一个manifest空文件夹:

$ mkdir /home/ritterliu/clone

$ cd /home/ritterliu/clone

$ git clone ritterliu@127.0.0.1:/home/ritterliu/RepoServer/manifest.git

7. 进入manifest文件夹,并新建如下的default.xml文件:

$ vi default.xml

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
   <remote  fetch="git://192.168.10.1/RepoServer" review="review.source.Android.com" />
   <default revision="master" remote="korg" />
   <project path="AngryBird5" />
   <project path="DLNA" />
</manifest>


其中 fetch="git://192.168.10.1/RepoServer 中填本机的ip地址,project 处是刚才在/home/ritterliu/RepoServer中添加的想被分享的工程。

然后依旧是git add,git commit ,git push系列操作,最后一定要记得git push,把增加的default.xml变化push到manefest.git里:

$ git add .

$ git commit -a -m "add default.xml"

$ git push origin master

8. 此时,Server端就完全配置好了,去别的机子上,新建文件夹,下载repo,然后执行repo init即可:

$ mkdir /home/ubuntu/download

$ cd /home/ubuntu/download

url https://dl-ssl.google.com/dl/googlesource/git-repo/repo > repo
$ chmod +x repo

$ ./repo init -u git://192.168.10.1/RepoServer/manifest.git

此处如果出现 fatal: unable to connect a socket (Connection refused) ,通常是在git-daemon或default.xml中配置路径出错。

最后同步下代码:

$ ./repo sync

如果出现 error: revision master in AngryBird5 not found ,应该是工程未commit过导致的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/066f7a552c552e2d8bb0c729b9616fb8.html