好久沒有寫博客了,最近一直被其他的事情忙着,思考了很多,感覺停留在一個水平線上遲遲沒法更進一步,雖然依舊學習着新東西,重複着工作,今年已經換了兩份工作了,雖然都不是自己非常滿意的,但是那又能怎麼樣呢,還不是要繼續工作。有時候覺得之前沒有好好考慮自己的職業規劃,真的挺爲自己感到可笑,雖然很多人都勸告過我要選擇一條路,但是心裏有cto的路,不廣泛涉獵,以後怎麼能到達自己的目標呢,即使這個目標有點長遠,有點yy。既然選擇了遠方,留給世界的只能是背影。
言歸正傳吧,這次就是搭建簡易的repo服務器了,相信一般人都知道repo吧,google的android代碼就是通過repo來管理的。其實repo就是一個python的腳本,用來管理多個git倉庫,這麼理解比較容易些。至於其他種種,不多說了,開始搭建個測試下吧。
1、下載安裝repo
git clone https://review.mfunz.com/git-repo git-repo.git
下載好後,進入到目錄中:
cd git-repo.git
然後拷貝到相應目錄,其實也可以自己通過設置絕對路徑來完成,這裏還是拷貝過去吧。
sudo cp repo /usr/bin/repo
修改repo腳本:
vim /usr/bin/repo
修改
REPO_URL = 'https://gerrit.googlesource.com/git-repo'
爲
REPO_URL = '/home/jared/test/git-repo.git'
因爲我們已經下載了repo相關的代碼,所以就指定到下載到的那個路徑了。至此repo命令就可以正常使用了。
2、建立repo服務器
2.1、建立manifest
新建repos,然後創建manifest文件夾
mkdir manifest
新建defalut.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<manifest>
<remote name="origin" fetch="/home/jared/test/repos"/>
<default revision="master" remote="origin" />
<project name="test1" path="test1"/>
<project name="test2" path="test2"/>
</manifest>
這裏有兩個倉庫,test1和test2。接着我們就可以建立中心倉庫了:
➜ manifest git init
Initialized empty Git repository in /home/jared/test/repos/manifest/.git/
把剛添加的default.xml添加進去
➜ manifest git:(master) ✗git add .
提交修改
➜ manifest git:(master) ✗ git commit -m "init_repo"
[master (root-commit) 2694563] init_repo
1 file changed, 10 insertions(+)
create mode 100644 default.xml
新建manifest.git中心倉庫。
➜ repos git clone --bare manifest
Cloning into bare repository 'manifest.git'...
done.
新建完後可以把manifest刪除。
2.2、建立test1/test2倉庫
新建test1文件夾並且添加個readme.md文件。
➜ repos mkdir test1
➜ test1 echo test > readme.md
初始化git倉庫:
➜ test1 git init
Initialized empty Git repository in /home/jared/test/repos/test1/.git/
修改提交:
➜ test1 git:(master) ✗git add .
➜ test1 git:(master) ✗ git commit -m "init repo"
[master (root-commit) 3a25343] init repo
1 file changed, 1 insertion(+)
create mode 100644 readme.md
新建test1中心倉庫:
➜ repos git clone --bare test1
Cloning into bare repository 'test1.git'...
done.
至此test1.git中心倉庫建立完成,同理建立test2.git倉庫。
3、測試使用
既然已經建立好了,那麼就來使用下吧,首先就是初始化repo了,相信命令會很熟悉:
➜ work repo init -u ~/test/repos/manifest.git
Get /home/jared/test/git-repo.git
remote: Counting objects: 3725, done.
remote: Compressing objects: 100% (1755/1755), done.
remote: Total 3725 (delta 1910), reused 3725 (delta 1910)
Receiving objects: 100% (3725/3725), 3.39 MiB | 0 bytes/s, done.
Resolving deltas: 100% (1910/1910), done.
From /home/jared/test/git-repo
repo has been initialized in /home/jared/test/work
接着同步代碼:
➜ work repo sync
Fetching project test1
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
From /home/jared/test/repos/test1
* [new branch] master -> origin/master
* [new branch] v1.0.0 -> origin/v1.0.0
Fetching project test2
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
From /home/jared/test/repos/test2
* [new branch] master -> origin/master
* [new branch] v1.0.0 -> origin/v1.0.0
同步完成了,ls看下有沒有兩個倉庫:
➜ work ls
test1 test2
已經同步下來了,接着看下default.xml文件,之後如果需要增加其他的倉庫就在這裏添加:
➜ work ls .repo/manifests
default.xml
repo倉庫的簡單搭建基本完成了。