今天开始配置git服务,之前已在ubuntu虚拟机上配置过,但最后客户端连接失败。先重新安装一次,并记录过程:
参考:http://my.oschina.net/u/1240239/blog/495654
1、安装配置git
A、安装:
sudo apt-get install git-core openssh-server openssh-client
git-core是git版本控制核心软件
安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之间传 b、配置:
-
创建所有代码仓库和用户权限的管理者git,并更改用户的密码。在当前用户下执行:
sudo useradd -m -s /bin/bash git
sudo passwd git
useradd会在ubuntu上增加一个git用户
-
创建git仓库的存储目录、更改文件目录属主为代码仓库的管理者git,只让git用户对此目录有权限。本文档以/srv/git目录做为git仓库的存储目录。在当前用户下执行:
sudo mkdir /srv/git
sudo chown git:git
/srv/git
sudo chmod 700
/srv/git
2、安装配置gitosis
-
-
安装gitosis前准备
-
初始化git用户。在任何一台机器上使用git,第一次必须初始化一下。在当前用户下初始化全局的git信息:
git config --global user.name "jackliu"
git config --global user.email "xcltl618@gmail.com"
-
安装python的setup tool。在当前用户下执行如下命令安装:
sudo apt-get install python-setuptools
-
-
安装gitosis。在当前用户下进行安装,执行如下命令:
cd /tmp
git clone https://github.com/res0nat0r/gitosis.git
上面有2个零啊,不要打错了
-
-
cd gitosis
-
sudo python setup.py install
默认状态下,gitosis会将git仓库放在 git用户的home下,所以我们做一个链接到/home /repo,su到git用户,执行如下命令:
ln -s /srv/git /home/git/repositories
然后退出git用户,一定要切换到git用户下执行
-
- 到这一步,/home/git/下没有repositories这个文件夹,再查看,原来有个gitcy用户,且在那个文件夹里有了repositories文件夹。可是删了该用户后,不管怎么重复之前打步骤,始终不能生成该文件夹,后来,新建一个虚拟机测试,git账户也不能生成这个文件夹,原来是需要手动创建打。
- 创建/home/git/repositories : sudo mkdir /home/dir/repositories
- sudo chown git:git /home/dir/repositories
- sudo chmod 755 /home/dir/repositories
- ln-s /srv/git /home/dir/repositories
- ssh-keygen -t rsa 在/home/git/.ssh/下生成公钥
- 切换到其他账户,ssh-keygen -t rsa 生成管理员公钥/home/cy/.ssh/
- scp /home/cy/.ssh/id_rsa.pub git@127.0.0.1:/tmp
- su git
- cd /tmp
- sudo chmod a+r id_rsa.pub
- sudo -H -u git gitosis-init < /tmp/id_rsa.pub 初始化管理仓库
- sudo chmod 755 /home/git/repositories/gitosis-admini.git/hooks/post-update
-
-
在git服务器上搭建测试项目库
建立仓库名“test”的测试仓库
- mkdir /srv/git/test.git (用git账户创建test.git)
- cd /syv/git/test.git
- git init --bare (初始化仓库)
- gitosis本身的配置也是通过git来实现的。
- 克隆gitosis-admin.git仓库
- 切换到管理员账户(cy)
- 在git管理员用户目录下,
git clone git@<server>:gitosis-admin.git
- 如果出现:
fatal: '~/gitosis-admin.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
改成:
sudo git clone git@<Server-IP>:/home/repo/gitosis-admin.git
cd gitosis-admin/
- 该目录下的keydir目录是用来存放所有需要访问git服务器的用户的ssh公钥:各个用户按照前面提到的办法生成各自的ssh公钥文件后,把所有人的ssh公钥文件都拿来,按名字命名一下,比如b@pc1.pub, lz@pc2.pub等,统统拷贝到keydir下:
su root
cp /path/.ssh/id_rsa.pub ./keydir/b@pc1.pub
-
-
修改gitosis.conf文件
[gitosis]
[group gitosis-admin]
members = test@liutailin-ThinkPad-Edge ltl@it-c-015
writable = gitosis-admin
[group hello]
members = ltl@liutailin-ThinkPad-Edge ltl@it-c-015
writable = test
这个配置文件说明:
members = 后面跟的一定要和 .pub的前缀一致,否则没有访问权限
目前这些配置文件的修改只是在你的本地,你必须推送到远程的gitserver上才能真正生效。 加入新文件、提交并push到git服务器:
git add .
git commit -am “add test prj and users”
git push origin master
-
gitosis-admin组成员有test@liutailin-ThinkPad-Edge, ltl@it-c-015, 该组对gitosis-admin仓库有读写权限;
-
hello组有test@liutailin-ThinkPad-Edge, ltl@it-c-015两个成员, 该组对test仓库有读写权限;
-
测试搭建的项目库
服务器搭建完了,并且有一个空的项目test在服务器上。接下来测试一下,空仓库是不能clone的,所以需要某一个有写权限的人初始化一个版本。 下面是在ltl@it-c-015客户端完成。
mkdir test-ori
cd test-ori/
git init
echo “/*add something*/” > hello
git add .
git commit -am “initial version”
git remote add origin git@<server-ip>:test.git
git push origin master
-
添加其他账户并clone 在cy-virtual客户机上
cd ~
ssh-keygen -t rsa
scp .ssh/id_rsa.pub git@<server-ip>:/tmp
服务端:
cp /tmp/id_rsa.pub <管理员的gitosis-admin目录>/keydir/cy@virtual.pub
修改gitosis.conf文件
[group test]
members = 添加
cy@virtual
并提交管理更改
git add .
git commit -am “and newusers”
git push origin master
现在客户端可以clone了
客户端:在需要克隆的目录: git clone git@<server-ip>: test.git
完成搭建
-
git 帐号执行sudo ,报不在sudoers文件中,修改/etc/sudoers,添加当前用户
-
git ALL=(ALL:ALL) ALL。我是直接添加的git组:@git ALL=(ALL:ALL) ALL
-
如果修改了端口,clone: git clone ssh://git@<serverip>:22/git项目。就是必须加ssh://,以及添加端口。默认端口为22(ssh的端口)
-
Linux中SSH默认端口为22,:
如果用户想让22和60000端口同时开放,只需在/etc/ssh/sshd_config增加一行内容如下:
在/etc/ssh/sshd_config中找到Port 22,将其修改为60000,或使用/usr/sbin/sshd -p 60000指定端口。
[root@localhost /]# vi /etc/ssh/sshd_config
Port 22
Port 60000
保存并退出
[root@localhost /]#service ssh restart