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

这种方式可以保留原版本库中的所有内容。

 

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