git服務器搭建

服務器操作系統Ubuntu
安裝git
root@164:~#apt-get install git-core
root@164:~#useradd -m git (-m參數同時創建git家目錄,ubuntu默認添加用戶是不創建家目錄)
修改git用戶登錄shell
將後面的/bin/sh 修改成/bin/bash
git:x:1024:1024::/home/git:/bin/bash
給git用戶添加密碼
root@164:~# passwd git
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

安裝配置gitosis
初始化一下的git用戶,這一步其實是爲了安裝gitosis做準備。在任何一臺機器上使用git,第一次最好要初始化一下:
git@164:~$ git config --global user.name"myname"
git@164:~$ git config --global user.email "myname@server"
安裝一下python的setup tool, 這個也是爲了gitosis做準備:
git@164:~$ sudo apt-get install python-setuptools
獲得gitosis包:
git@164:~$ cd /tmp
git@164:/tmp$ git clone https://github.com/res0nat0r/gitosis.git
git@164:/tmp$ cd gitosis
git@164:/tmp/gitosis$ sudo python setup.py  install
gitosis一般默認安裝在git的家目錄

如果你將作爲git服務器的管理員,那麼在你的電腦上(另一臺pc)生成ssh公鑰:
usr@pc1:~$ ssh-keygen -t rsa
將公鑰拷貝到服務器的/tmp下:
usr@pc1:~$ scp .ssh/id_rsa.pub git@<server>:/tmp
回到git服務器上
a@server:/tmp/gitosis$ sudo chmod a+r /tmp/id_rsa.pub
讓gitosis運行起來:
a@server:/tmp/gitosis$ sudo -H -u git gitosis-init < /tmp/id_rsa.pub
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/
gitosis的有趣之處在於,它通過一個git倉庫來管理配置文件,倉庫就放在了/home/git/repositories/gitosis-admin.git。
我們需要爲一個文件加上可執行權限:
root@164:/home/git# cd repositories
root@164:/home/git/repositories# cd gitosis-admin.git/
root @164:/home/git/repositories/gitosis-admin.git

#sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

 在服務器上新建一個測試項目倉庫
我建了一個叫“test”的倉庫。
切換到git用戶:
a@server:/home/git$ su git
$ cd ~/repositories
$ mkdir test.git
$ cd test.git
$ git init --bare
$ exit
但是,到目前爲止,這只是一個空倉庫,空倉庫是不能clone下來的。爲了能做clone,我們必須先讓某個有權限的人放一個初始化的版本到倉庫中。
所以,我們必須先修改一下gitosis-admin.

4. 管理gitosis的配置文件
剛剛提到,gitosis本身的配置也是通過git來實現的。在你自己的開發機裏,把gitosis-admin.git這個倉庫clone下來,就可以以管理員的身份修改配置了。
root@ubuntu:/test# git clone git@XXXX:gitosis-admin.git
Cloning into 'gitosis-admin'...
remote: Counting objects: 22, done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 22 (delta 5), reused 4 (delta 0)
Receiving objects: 100% (22/22), done.
Resolving deltas: 100% (5/5), done.
root@ubuntu:/test# cd gitosis-admin/
root@ubuntu:/test/gitosis-admin# ls
gitosis.conf  keydir
該目錄下的keydir目錄是用來存放所有需要訪問git服務器的用戶的ssh公鑰:
各個用戶按照前面提到的辦法生成各自的ssh公鑰文件後,把所有人的ssh公鑰文件都拿來,按名字命名一下,比如b.pub, lz.pub等,統統拷貝到keydir下
root@ubuntu:/test/gitosis-admin# vi gitosis.conf
[gitosis]

[group gitosis-admin]
members = xiao@XIAO-PC root@ubuntu
writable = gitosis-admin

[group test]
members = xiao@XIAO-PC root@ubuntu
writable = authority

git服務器數據遷移
如果你想從別的 Git 託管服務那裏複製一份源代碼到新的 Git 託管服務器上的話,可以通過以下步驟來操作。
1). 從原地址克隆一份裸版本庫,比如原本託管於 bitbucket。
git clone --bare [email protected]:xx/xxxx.git
2). 然後到新的 Git 服務器上創建一個新項目xxxx.git。
3). 以鏡像推送的方式上傳代碼到自己搭建的Git 服務器上。
cd xxxx.git
git push --mirror git@XXXX:xxxx.git
4). ***本地代碼
cd ..
rm -rf xxxx.git
5). 到新服務器上找到 Clone 地址,直接 Clone 到本地就可以了。
git clone git@XXXX:xxxx.git

嘗試了下直接從Git託管的服務器上克隆版本庫到新的Git服務器上,這樣做就不必經過中轉

git clone --bare [email protected]:xx/xxxx.git

這種方式可以保留原版本庫中的所有內容。

 

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