本地/遠程搭建repo服務器

本地搭建repo服務器的方法:

首先得確保本地的git能夠正常使用,並下載一個repo可以正常運行

目錄結構如下:


首先新建一個文件夾repo-server,並在其下新建兩個目錄,如上圖所示

在manifest.git文件夾中執行  git init  初始化一個git 庫並添加default.xml

其中比較重要的是manifest.git文件夾中的default.xml,該default.xml的內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
    <remote name="repo-server" fetch="/home/Neo/repo/repo-server" review="review.source.android.com" />
    <default revision="master" remote="repo-server" />
    <project name="project/project1" path="project/project1"/>
    <project name="project/project2" path="project/project2"/>
</manifest>

其中fetch就是你在服務器端所在的位置,可以是遠程的,也可以是本地的,我這裏設置的是本地的

客戶端與服務器同步就是依靠這個地址進行repo sync的

其中default標籤是用來設置分支名和遠端服務器默認名的

接下來的project標籤就是你要通過repo來管理的git庫位置了


添加完畢後執行git add -A添加到緩衝區,再通過git commit -m "Init"添加到倉庫中去(這些都是基本的git操作,這裏不做詳述)

manifest.git的文件列表


配置好服務器端之後,通過同樣的方式建立project1和project2兩個git庫


客戶端:

在repo-client文件夾下執行

repo init -u server_path

這個server_path是default.xml所在的目錄路徑

我的server_path是/home/Neo/repo/repo-server/manifest.git

所以我應該執行:

repo init -u /home/Neo/repo/repo-server/manifest.git

如果提示下面的錯誤:

fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle
fatal: error [Errno 101] Network is unreachable

這說明網絡連接有問題,而你確認你網絡沒有問題的話,那就多連幾次吧,會好的(G.F.W)

結果如下:

[root@SVR6 repo-client1]# repo init -u /home/Neo/repo/repo-server/manifest.git/
Get https://gerrit.googlesource.com/git-repo
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 https://gerrit.googlesource.com/git-repo
 * [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]: 

添加完名字和郵件地址即可。

然後這個時候依舊沒有代碼,這是因爲代碼還只是存在git庫中,需要執行repo sync

[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

這時進入project/project1中時通過git branch查看的時候確是no branch..

[root@SVR6 project1]# git branch
* (no branch)
那是因爲沒有從確定所取的分支,執行

[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]# 
執行完repo forall -c git checkout -b master remotes/m/master之後再查看分支時:

[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服務器的搭建

其中repo forall這個命令的意思是針對repo下所有的git庫進行同樣的操作

repo forall -c 後接git命令,比如說你要查看所有git庫中的代碼情況,可以執行repo forall -c git status

如果你要查看提交狀態,可以執行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 <[email protected]_32_1>
Date:   Thu Apr 25 15:52:27 2013 +0800

    create project1

 0 files changed, 0 insertions(+), 0 deletions(-)
commit 707deec1441ad98aba3fd845f2de79a708eaeb1c
Author: root <[email protected]_32_1>
Date:   Thu Apr 25 15:52:51 2013 +0800

    create project2

 0 files changed, 0 insertions(+), 0 deletions(-)
[root@SVR6 repo-client1]# 


總結:repo其實就是許多Git倉庫的總管理員,便於管理和操作的一個python腳本,如果不是很大型的項目,用一個git倉庫就好了,如果項目多且大,需要分開管理,那還是使用repo來管理比較好



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章