本地搭建repo服務(wù)器的方法:
首先得確保本地的git能夠正常使用,并下載一個(gè)repo可以正常運(yùn)行
目錄結(jié)構(gòu)如下:
首先新建一個(gè)文件夾repo-server,并在其下新建兩個(gè)目錄,如上圖所示
在manifest.git文件夾中執(zhí)行 git init 初始化一個(gè)git 庫并添加default.xml
其中比較重要的是manifest.git文件夾中的default.xml,該default.xml的內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="repo-server" fetch="/home/Neo/repo/repo-server" review="revie" />
<default revision="master" remote="repo-server" />
<project name="project/project1" path="project/project1"/>
<project name="project/project2" path="project/project2"/>
</manifest>
其中fetch就是你在服務(wù)器端所在的位置,可以是遠(yuǎn)程的,也可以是本地的,我這里設(shè)置的是本地的
客戶端與服務(wù)器同步就是依靠這個(gè)地址進(jìn)行repo sync的
其中default標(biāo)簽是用來設(shè)置分支名和遠(yuǎn)端服務(wù)器默認(rèn)名的
接下來的project標(biāo)簽就是你要通過repo來管理的git庫位置了
添加完畢后執(zhí)行g(shù)it add -A添加到緩沖區(qū),再通過git commit -m "Init"添加到倉庫中去(這些都是基本的git操作,這里不做詳述)
manifest.git的文件列表
配置好服務(wù)器端之后,通過同樣的方式建立project1和project2兩個(gè)git庫
客戶端:
在repo-client文件夾下執(zhí)行
repo init -u server_path
這個(gè)server_path是default.xml所在的目錄路徑
我的server_path是/home/Neo/repo/repo-server/manifest.git
所以我應(yīng)該執(zhí)行:
repo init -u /home/Neo/repo/repo-server/manifest.git
如果提示下面的錯誤:
fatal: Cannot get
fatal: error [Errno 101] Network is unreachable
這說明網(wǎng)絡(luò)連接有問題,而你確認(rèn)你網(wǎng)絡(luò)沒有問題的話,那就多連幾次吧,會好的(G.F.W)
結(jié)果如下:
[root@SVR6 repo-client1]# repo init -u /home/Neo/repo/repo-server/manifest.git/
Get
remote: Counting objects: 197, done
remote: Finding sources: 100% (144/144)
remote: Getting sizes: 100% (24/24)
remote: Compressing objects: 100% (246848/246848)
remote: Total 2401 (delta 202), reused 2380 (delta 199)
Receiving objects: 100% (2401/2401), 1.48 MiB | 340 KiB/s, done.
Resolving deltas: 100% (1402/1402), done.
From
* [new branch] maint -> origin/maint
* [new branch] master -> origin/master
* [new branch] stable -> origin/stable
* [new tag] v1.0 -> v1.0
* [new tag] v1.0.1 -> v1.0.1
* [new tag] v1.0.2 -> v1.0.2
* [new tag] v1.0.3 -> v1.0.3
* [new tag] v1.0.4 -> v1.0.4
* [new tag] v1.0.5 -> v1.0.5
* [new tag] v1.0.6 -> v1.0.6
* [new tag] v1.0.7 -> v1.0.7
* [new tag] v1.0.8 -> v1.0.8
* [new tag] v1.0.9 -> v1.0.9
* [new tag] v1.1 -> v1.1
* [new tag] v1.10.0 -> v1.10.0
* [new tag] v1.10.1 -> v1.10.1
* [new tag] v1.10.2 -> v1.10.2
* [new tag] v1.10.3 -> v1.10.3
* [new tag] v1.10.4 -> v1.10.4
* [new tag] v1.11.0 -> v1.11.0
* [new tag] v1.11.1 -> v1.11.1
* [new tag] v1.12.0 -> v1.12.0
* [new tag] v1.12.1 -> v1.12.1
* [new tag] v1.12.2 -> v1.12.2
* [new tag] v1.2 -> v1.2
* [new tag] v1.3 -> v1.3
* [new tag] v1.3.1 -> v1.3.1
* [new tag] v1.3.2 -> v1.3.2
* [new tag] v1.4 -> v1.4
* [new tag] v1.4.1 -> v1.4.1
* [new tag] v1.4.2 -> v1.4.2
* [new tag] v1.4.3 -> v1.4.3
* [new tag] v1.4.4 -> v1.4.4
* [new tag] v1.5 -> v1.5
* [new tag] v1.5.1 -> v1.5.1
* [new tag] v1.6 -> v1.6
* [new tag] v1.6.1 -> v1.6.1
* [new tag] v1.6.10 -> v1.6.10
* [new tag] v1.6.10.1 -> v1.6.10.1
* [new tag] v1.6.10.2 -> v1.6.10.2
* [new tag] v1.6.2 -> v1.6.2
* [new tag] v1.6.3 -> v1.6.3
* [new tag] v1.6.4 -> v1.6.4
* [new tag] v1.6.5 -> v1.6.5
* [new tag] v1.6.6 -> v1.6.6
* [new tag] v1.6.7 -> v1.6.7
* [new tag] v1.6.7.1 -> v1.6.7.1
* [new tag] v1.6.7.2 -> v1.6.7.2
* [new tag] v1.6.7.3 -> v1.6.7.3
* [new tag] v1.6.7.4 -> v1.6.7.4
* [new tag] v1.6.7.5 -> v1.6.7.5
* [new tag] v1.6.8 -> v1.6.8
* [new tag] v1.6.8.1 -> v1.6.8.1
* [new tag] v1.6.8.10 -> v1.6.8.10
* [new tag] v1.6.8.11 -> v1.6.8.11
* [new tag] v1.6.8.2 -> v1.6.8.2
* [new tag] v1.6.8.3 -> v1.6.8.3
* [new tag] v1.6.8.4 -> v1.6.8.4
* [new tag] v1.6.8.5 -> v1.6.8.5
* [new tag] v1.6.8.6 -> v1.6.8.6
* [new tag] v1.6.8.7 -> v1.6.8.7
* [new tag] v1.6.8.8 -> v1.6.8.8
* [new tag] v1.6.8.9 -> v1.6.8.9
* [new tag] v1.6.9 -> v1.6.9
* [new tag] v1.6.9.1 -> v1.6.9.1
* [new tag] v1.6.9.2 -> v1.6.9.2
* [new tag] v1.6.9.3 -> v1.6.9.3
* [new tag] v1.6.9.4 -> v1.6.9.4
* [new tag] v1.6.9.5 -> v1.6.9.5
* [new tag] v1.6.9.6 -> v1.6.9.6
* [new tag] v1.6.9.7 -> v1.6.9.7
* [new tag] v1.6.9.8 -> v1.6.9.8
* [new tag] v1.7 -> v1.7
* [new tag] v1.7.1 -> v1.7.1
* [new tag] v1.7.2 -> v1.7.2
* [new tag] v1.7.3 -> v1.7.3
* [new tag] v1.7.3.1 -> v1.7.3.1
* [new tag] v1.7.4 -> v1.7.4
* [new tag] v1.7.4.1 -> v1.7.4.1
* [new tag] v1.7.4.2 -> v1.7.4.2
* [new tag] v1.7.4.3 -> v1.7.4.3
* [new tag] v1.7.5 -> v1.7.5
* [new tag] v1.7.6 -> v1.7.6
* [new tag] v1.7.6.1 -> v1.7.6.1
* [new tag] v1.7.7 -> v1.7.7
* [new tag] v1.7.7.1 -> v1.7.7.1
* [new tag] v1.7.7.2 -> v1.7.7.2
* [new tag] v1.7.7.3 -> v1.7.7.3
* [new tag] v1.7.7.4 -> v1.7.7.4
* [new tag] v1.7.7.5 -> v1.7.7.5
* [new tag] v1.7.7.6 -> v1.7.7.6
* [new tag] v1.7.8 -> v1.7.8
* [new tag] v1.7.8.1 -> v1.7.8.1
* [new tag] v1.7.8.2 -> v1.7.8.2
* [new tag] v1.8.0 -> v1.8.0
* [new tag] v1.8.1 -> v1.8.1
* [new tag] v1.8.2 -> v1.8.2
* [new tag] v1.9.0 -> v1.9.0
* [new tag] v1.9.1 -> v1.9.1
* [new tag] v1.9.2 -> v1.9.2
* [new tag] v1.9.3 -> v1.9.3
* [new tag] v1.9.4 -> v1.9.4
* [new tag] v1.9.5 -> v1.9.5
* [new tag] v1.9.6 -> v1.9.6
... A new repo command ( 1.19) is available.
... You should upgrade soon:
cp /home/Neo/repo/repo-client1/.repo/repo/repo /bin/repo
Get /home/Neo/repo/repo-server/manifest.git/
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/Neo/repo/repo-server/manifest
* [new branch] master -> origin/master
Your Name [root]:
添加完名字和郵件地址即可。
然后這個(gè)時(shí)候依舊沒有代碼,這是因?yàn)榇a還只是存在git庫中,需要執(zhí)行repo syn
[root@SVR6 repo-client1]# repo sync
... A new repo command ( 1.19) is available.
... You should upgrade soon:
cp /home/Neo/repo/repo-client1/.repo/repo/repo /bin/repo
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/Neo/repo/repo-server/project/project1
* [new branch] master -> repo-server/master
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /home/Neo/repo/repo-server/project/project2
* [new branch] master -> repo-server/master
這時(shí)進(jìn)入project/project1中時(shí)通過git branch查看的時(shí)候確是no branch..
[root@SVR6 project1]# git branch
* (no branch)
那是因?yàn)闆]有從確定所取的分支,執(zhí)行
[root@SVR6 repo-client1]# repo forall -c git checkout -b master remotes/m/master
... A new repo command ( 1.19) is available.
... You should upgrade soon:
cp /home/Neo/repo/repo-client1/.repo/repo/repo /bin/repo
HEAD is now at 789317b... create project1
HEAD is now at 707deec... create project2
[root@SVR6 repo-client1]#
這里為什么會是remotes/m/master呢,這是需要查看下,你可以通過repo forall -c git branch -a
[root@SVR6 repo-client1]# repo forall -c git branch -a
... A new repo command ( 1.19) is available.
... You should upgrade soon:
cp /home/Neo/repo/repo-client1/.repo/repo/repo /bin/repo
* (no branch)
remotes/m/master -> repo-server/master
remotes/repo-server/master
* (no branch)
remotes/m/master -> repo-server/master
remotes/repo-server/master
[root@SVR6 repo-client1]#
執(zhí)行完repo forall -c git checkout -b master remotes/m/master之后再查看分支時(shí):
[root@SVR6 repo-client1]# repo forall -c git checkout -b master remotes/m/master
... A new repo command ( 1.19) is available.
... You should upgrade soon:
cp /home/Neo/repo/repo-client1/.repo/repo/repo /bin/repo
Branch master set up to track remote branch master from repo-server.
Switched to a new branch 'master'
Branch master set up to track remote branch master from repo-server.
Switched to a new branch 'master'
[root@SVR6 repo-client1]# repo forall -c git branch -a
... A new repo command ( 1.19) is available.
... You should upgrade soon:
cp /home/Neo/repo/repo-client1/.repo/repo/repo /bin/repo
* master
remotes/m/master -> repo-server/master
remotes/repo-server/master
* master
remotes/m/master -> repo-server/master
remotes/repo-server/master
[root@SVR6 repo-client1]#
這樣就完成了簡單repo服務(wù)器的搭建
其中repo forall這個(gè)命令的意思是針對repo下所有的git庫進(jìn)行同樣的操作
repo forall -c 后接git命令,比如說你要查看所有g(shù)it庫中的代碼情況,可以執(zhí)行repo forall -c git status
如果你要查看提交狀態(tài),可以執(zhí)行repo forall -c git log --stat
[root@SVR6 repo-client1]# repo forall -c git log --stat
... A new repo command ( 1.19) is available.
... You should upgrade soon:
cp /home/Neo/repo/repo-client1/.repo/repo/repo /bin/repo
commit 789317be88ecdc12b53e4c422016494d636b6b32
Author: root <root@SVR6.0_32_1>
Date: Thu Apr 25 15:52:27 2013 +0800
create project1
0 files changed, 0 insertions(+), 0 deletions(-)
commit 707deec1441ad98aba3fd845f2de79a708eaeb1c
Author: root <root@SVR6.0_32_1>
Date: Thu Apr 25 15:52:51 2013 +0800
create project2
0 files changed, 0 insertions(+), 0 deletions(-)
[root@SVR6 repo-client1]#
總結(jié):repo其實(shí)就是許多Git倉庫的總管理員,便于管理和操作的一個(gè)python腳本,如果不是很大型的項(xiàng)目,用一個(gè)git倉庫就好了,如果項(xiàng)目多且大,需要分開管理,那還是使用repo來管理比較好