http://blog.csdn.net/tommy_wxie/article/details/38779667
http://blog.csdn.net/ice520301/article/details/6142503
一、安装git服务器所需软件
打开终端输入以下命令:
sam@ubuntu:~$ sudo apt-get install git-core openssh-server openssh-client
git-core是git版本控制核心软件
安装openssh-server和openssh-client是由于git需要通过ssh协议来在服务器与客户端之
间传输文件
然后中间有个确认操作,输入Y后等待系统自动从镜像服务器中下载软件安装,安装完后会回
到用户当前目录。
如果安装提示失败,可能是因为系统sources.list太旧了,先更新一下就可以了,更新命令如
下:
sam@ubuntu:~$ sudo sed -i 's/us.archive.ubuntu.com/cn.archive.ubuntu.com/g' /etc/apt/sources.list
sam@ubuntu:~$ sudo apt-get update
更新完软件库索引后继续执行上面的安装命令即可。
注意:比较新的git安装方法:
可以使用apt-get方式安装,也可以下载源代码安装【1】,我们这里使用apt-git安装。
但由于直接使用 sudo apt-get install git 安装的版本较老,因此我们给出的PPA源。
sudo add-apt-repository ppa:git-core/ppa
sudo apt-get update
sudo apt-get install git
安装完成后,检查是否安装成功
如果本地已经安装过Git,可以使用升级命令
sudo apt-get dist-upgrade
git --version
显示 git version 2.1.1,表明安装成功。
git颜色配置
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
安装python的setuptools和gitosis,由于gitosis的安装需要依赖于python的一些工具,
所以我们需要先安装python
的setuptools。
执行下面的命令:
sam@ubuntu:~$ sudo apt-get install python-setuptools
这个工具比较小,安装也比较快,接下来准备安装gitosis,安装gitosis之前需要初始化一下
服务器的git用户信息,这个随便填。
sam@ubuntu:~$ git config --global user.name "myname"
sam@ubuntu:~$ git config --global user.email "******@gmail.com"
初始化服务器用户信息后,就可以安装gitosis了,gitosis主要是用于给用户授权,设置权限
也算是很方便的。
可以通过以下命令获取gitosis版本文件:
sam@ubuntu:~$cd tmp/
sam@ubuntu:~$ git clone https://github.com/res0nat0r/gitosis.git
注意:中间有两个是数字零
或者
ubuntu:~$git clone https://github.com/sitaramc/gitolite
后面有gitolite安装与配
置方法
获取gitosis文件后,进入到文件目录下面
libing@ubuntu:/tmp$ cd gitosis/
接着使用python命令安装目录下的setup.py的python脚本进行安装
libing@ubuntu:/tmp/gitosis$ sudo python setup.py install
到这里,整个安装步骤就完成了,下面就开始对git进行一些基本的配置。
二、创建git管理员账户、配置git
创建一个账户(git)作为git服务器的管理员,可以管理其他用户的项目权限。1
sam@ubuntu:~$ sudo adduser git
Adding user `git' ...
Adding new group `git' (1001) ...
Adding new user `git' (1001) with group `git' ...
Creating home directory `/home/git' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for git
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
ubuntu:/tmp/gitosis$ sudo passwd git
然后再/home目录下创建一个项目仓库存储点,并设置只有git用户拥有所有权限,其他用户
没有任何权限。
sam@ubuntu:/tmp/gitosis$ sudo mkdir /home/repo
sam@ubuntu:/tmp/gitosis$ sudo chown git:git /home/repo/
sam@ubuntu:/tmp/gitosis$ sudo chmod 700 /home/repo/
sam@ubuntu:/tmp/gitosis$ su git
默认状态下,gitosis会将git仓库放在 git用户的home下,所以我们做一个链接
到/home/repo
git@ubuntu:$ ln -s /home/repo /home/git/repositories
再次返回到默认用户
$ exit
这里我将在服务器端生成ssh公钥,如果想在其他机器上管理也可以在其他机器上生成一个
ssh的公钥
sam@ubuntu:~$ 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
然后用刚生成公钥id_rsa.pub来对gitosis进行初始化。如下:
sam@ubuntu:/tmp/gitosis$ sudo -H -u git gitosis-init < /tmp/id_rsa.pub
Initialized empty Git repository in /home/repo/gitosis-admin.git/
Reinitialized existing Git repository in /home/repo/gitosis-admin.git/
出现如上信息说明gitosis已经初始化成功。
gitosis主要是通过gitosis-admin.git仓库来管理一些配置文件的,如用户权限的管理。这里
我们需要对其中的一个post-update文件添加可执行的权限。
sam@server:/home/git$ sudo passwd root
sam@server:/home/git$ su
root@server:/home/git # cd repositories
root@server:/home/git/repositories # cd gitosis-admin.git/
root@server:/home/git/repositories/gitosis-admin.git # sudo chmod 755 /home/rep
o/gitosis-admin.git/hooks/post-update
root@server:/home/git/repositories/gitosis-admin.git # exit
三、服务器上创建项目仓库
使用git账户在服务器上创建一个目录(teamwork.git)并初始化成git项目仓库。
ubuntu:/home/git$ su git
ls
gitosis-admin.git
mkdir teamwork.git
cd teamwork.git/
git init --bare
Initialized empty Git repository in /home/repo/teamwork.git/
git@ubuntu:~/repositories/teamwork.git$
exit
logout
但是,到目前为止,这只是一个空仓库,空仓库是不能clone下来的。为了能做clone,我们
必须先让某个有权限的人放一个初始化的版本到仓库中。
所以,我们必须先修改一下gitosis-admin.
四、使用gitosis管理用户操作项目的权限
首先需要在前面生成ssh公钥(用来初始化gitosis)的机器上将gitosis-admin.git的仓库
clone下来。
在客户端机器上新建一个目录用于存放gitosis-admin.git仓库
sam@ubuntu:/tmp/gitosis$ cd
sam@ubuntu:~$ git clone git@<server>:gitosis-admin.git
Cloning into 'gitosis-admin'...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
Receiving objects: 100% (5/5), 724 bytes, done.
remote: Total 5 (delta 0), reused 5 (delta 0)
libing@ubuntu:~$ ls
gitosis-admin
clone下来会有一个gitosis.conf的配置文件和一个keydir的目录。gitosis.conf用于配置用
户的权限信息,
keydir主要用户存放ssh公钥文件(一般以“用户名.pub”命名,gitosis.conf配置文件中需
使用相同用户名),用于认证请求的客户端机器。
新建一个用户:zeng
sam@ubuntu:~/gitosis-admin$ sudo adduser zeng
Adding user `zeng' ...
Adding new group `zeng' (1002) ...
Adding new user `zeng' (1002) with group `zeng' ...
Creating home directory `/home/zeng' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for zeng
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
现在让需要授权的用户使用前面的方式各自在其自己的机器上生成相应的ssh公钥文件,管理
员把他们分别按用户名命名好,复制到keydir目录下。
zeng@ubuntu:~$ cp -r zeng.pub /tmp/
zeng@ubuntu:~$ exit
sam@ubuntu:~$ cp -r /tmp/zeng.pub ./
sam@ubuntu:~$ cp -r zeng.pub gitosis-admin/keydir/
sam@ubuntu:~/gitosis-admin$ git add .
sam@ubuntu:~/gitosis-admin$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: gitosis.conf
# new file: keydir/zeng.pub
#
sam@ubuntu:~/gitosis-admin$ sudo vi gitosis.conf
gitosis.conf 文件说明:
[group gitosis-admin] ####管理员组
members = charn@ubuntu ####管理员用户名,需要在keydir目录下找到相应的.pub文
件,多个可用空格隔开(下同)
writable = gitosis-admin####可写的项目仓库名,多个可用空格隔开(下同)
[group testwrite] ####可写权限组
members = zhangsan####组用户
writable = mytestproject####可写的项目仓库名
[group testread]
####只读权限组
members =lisi####组用户
readonly= mytestproject####只读项目仓库名
例如:
[gitosis]
[group gitosis-admin]
members = sam@ubuntu
writable = gitosis-admin
[group teamwork]
members = sam@ubuntu zeng
writable = teamwork
修改完gitosis.conf提交:
sam@ubuntu:~/gitosis-admin$ git commit -am "add a user permission."
[master c32b716] add a user permission.
2 files changed, 4 insertions(+)
create mode 100644 keydir/zeng.pub
libing@ubuntu:~/gitosis-admin$ git push origin master
Counting objects: 8, done.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 777 bytes, done.
Total 5 (delta 0), reused 0 (delta 0)
To [email protected]:gitosis-admin.git
30d1632..c32b716 master -> master
libing@ubuntu:~/gitosis-admin$ sudo /etc/init.d/ssh restart
提交完后记得把ssh服务重启,然后推送到服务器中才能生效。
五、初始化测试项目
好了,现在服务器就搭建完了,并且有一个空的项目teamwork在服务器上。接下来呢?当
然是测试一下,空仓库是不能clone的,所以需要某一个有写权限的人初始 化一个版本。就
用刚刚添加的zeng用户来做吧,以下是在客户端完成。
zeng@ubuntu:~/work$ mkdir teamwork-ori
zeng@ubuntu:~/work$ cd teamwork-ori/
zeng@ubuntu:~/work/teamwork-ori$ git init
zeng@ubuntu:~/work/teamwork-ori$ echo “/*add something*/” > hello
zeng@ubuntu:~/work/teamwork-ori$ git add .
zeng@ubuntu:~/work/teamwork-ori$ git commit -am “initial version”
zeng@ubuntu:~/work/teamwork-ori$ git remote add origin git@<server>:teamwork.gi
t
zeng@ubuntu:~/work/teamwork-ori$ git push origin master
到此为止teamwork已经有了一个版本了,teamwork的其他成员只要先clone一下
teamwork仓库,就可以任意玩了。
从搜索的资料看,gitolite将代替gitosis,所以接下来也介绍下gitolite安装与配置
六、gitolite安装与配置方法
1、安装git:sudo apt-get install git-core
2、生成SSH key(客户端):
sam@ubuntu:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sam/.ssh/id_rsa):
Created directory '/home/sam/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sam/.ssh/id_rsa.
Your public key has been saved in /home/sam/.ssh/id_rsa.pub.
The key fingerprint is:
35:80:00:54:c0:93:58:d2:da:96:8b:7d:86:ae:1e:bb sam@ubuntu
The key's randomart image is:
+--[ RSA 2048]----+
|.*==o. .. |
|..= . . |
| o o o |
|. + . . |
| + o S |
|. + o |
| o o |
| + |
|oE. |
+-----------------+
3、将生成的SSH public key拷贝到/tmp
sam@ubuntu:~$ cp -r .ssh/id_rsa.pub /tmp/sam.pub
4、创建Git用户(服务器端)
sam@ubuntu:~$ sudo adduser git
Adding user `git' ...
Adding new group `git' (1001) ...
Adding new user `git' (1001) with group `git' ...
Creating home directory `/home/git' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for git
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
5、下载gitolite源码(服务器端)
sam@ubuntu:~$ su git
Password:
git@ubuntu:/home/sam$ cd $home
git@ubuntu:~$ git clone https://github.com/sitaramc/gitolite
Cloning into 'gitolite'...
remote: Counting objects: 9055, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 9055 (delta 0), reused 0 (delta 0), pack-reused 9049
Receiving objects: 100% (9055/9055), 3.70 MiB | 1.22 MiB/s, done.
Resolving deltas: 100% (5167/5167), done.
Checking connectivity... done.
git@ubuntu:~$
6、安装gitolite(服务器端)
git@ubuntu:~$ mkdir -p ${HOME}/bin
git@ubuntu:~$ ${HOME}/gitolite/install -to ${HOME}/bin
7、设置SSH public key(服务器端)
git@ubuntu:~$ ${HOME}/bin/gitolite setup -pk /tmp/sam.pub
Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/
Initialized empty Git repository in /home/git/repositories/testing.git/
WARNING: /home/git/.ssh missing; creating a new one
(this is normal on a brand new install)
WARNING: /home/git/.ssh/authorized_keys missing; creating a new one
(this is normal on a brand new install)
git@ubuntu:~$
其实,到这里,gitolite已经安装完成。接下来就是添加Git项目,用户和Git项目访问权限了
8、克隆gitolite管理库(客户端)
sam@ubuntu:~$ git clone [email protected]:gitolite-admin.git
Cloning into 'gitolite-admin'...
The authenticity of host '192.168.1.114 (192.168.1.114)' can't be established.
ECDSA key fingerprint is 69:10:22:ed:f3:1c:e7:c0:3a:15:db:3e:50:61:65:4e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.1.114' (ECDSA) to the list of known hosts.
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
Receiving objects: 100% (6/6), 728 bytes | 0 bytes/s, done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Checking connectivity... done.
sam@ubuntu:~$
你可以看到在管理库里,有两个目录, conf/和keydir/,其中conf/下面有个名为
gitolite.conf的配置文件。
conf/gitolite.conf 用于Git项目配置,访问权限设置。
keydir/ 用于存储用户的SSH public key(公钥)。
例如:
sam@ubuntu:~/gitolite-admin/conf$ vi gitolite.conf
repo gitolite-admin
RW+ = sam
repo testing
RW+ = @all
9、服务器上创建项目仓库
使用git账户在服务器上创建一个目录(testing.git)并初始化成git项目仓库。
ubuntu:/home/git$ su git
git@ubuntu:~/repositories$ ls
gitosis-admin.git
git@ubuntu:~/repositories$ mkdir testing.git
git@ubuntu:~/repositories$ cd testing.git/
git@ubuntu:~/repositories/teamwork.git$ git init --bare
Initialized empty Git repository in /home/repo/testing.git/
git@ubuntu:~/repositories/teamwork.git$ exit
但是,到目前为止,这只是一个空仓库,空仓库是不能clone下来的。为了能做clone,我们
必须先让某个有权限的人放一个初始化的版本到仓库中。
10、初始化Git 项目:testing.git
一个空仓库是不能clone的,如果clone就会报错,如下:
libing@ubuntu:~$ git clone [email protected]:testing.git
Cloning into 'testing'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
所以我们要把testing.git初始化才可以clone
libing@ubuntu:~$ mkdir test
libing@ubuntu:~$ cd test/
libing@ubuntu:~/test$ git init
Initialized empty Git repository in /home/libing/test/.git/
libing@ubuntu:~/test$ echo "ininial project of testing." > hello.txt
libing@ubuntu:~/test$ git add .
libing@ubuntu:~/test$ git commit -am "initial version."
[master (root-commit) 1735cda] initial version.
1 file changed, 1 insertion(+)
create mode 100644 hello.txt
libing@ubuntu:~/test$ git remote add origin [email protected]:testing.git
libing@ubuntu:~/test$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 238 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:testing.git
* [new branch] master -> master
libing@ubuntu:~/test$
现在testing所属成员就可以clone了