Ubuntu安装git服务器

Ubuntu安装git服务器

fulinux

开发环境

Ubuntu 13.10

代码服务器

git

1、安装gitopenssh

[ruizhe@ubuntu ~]$ sudo apt-get install git-core openssh-server openssh-client

2、管理员账户是ruizhe,添加其他几个用户:fulinux,xudinchao,yaogang,chensaiping,例如:


[ruizhe@ubuntu ~]$ sudo adduser fulinux

3、同时我们创建一个git用户,专门用来管理git仓库。

[ruizhe@ubuntu ~]$ sudo adduser git

4、我们将磁盘另一个分区ext4格式后挂载到/home/git目录下,这样代码仓库就会有很大的空间,同时即便系统崩溃也不会影响数据,以便恢复。

[ruizhe@ubuntu ~]$ mkfs.ext4 /dev/sda6

[ruizhe@ubuntu ~]$ sudo vim /etc/fstab

/dev/sda6   /home/git   ext4        defaults    0   0

[ruizhe@ubuntu ~]$ sudo mount -a

[ruizhe@ubuntu ~]$ cd /home/git/

[ruizhe@ubuntu git]$ ls

lost+found

#这个文件不用管它

5、因为只有管理员锐哲才有sudo的使用权,为了方便我们这里将git用户配置成也具有使用sudo的权利。

[ruizhe@ubuntu ~]$ sudo vim /etc/sudoers

# User privilege specification

root    ALL=(ALL:ALL) ALL

git     ALL=(ALL:ALL) ALL

#git用户使用sudo时要输入的密码是git账号的密码。

6、我们使用git登陆

git@ubuntu:~$ pwd

/home/git

git@ubuntu:~$ cd ..

git@ubuntu:/home$ ll

drwxr-xr-x  4  root        root        4096  3月  5 14:39 git/

git@ubuntu:/home$ sudo chown -hR git:git git/

drwxr-xr-x  4  git         git         4096  3月  5 14:39 git/

git@ubuntu:/home$ cd git/

git@ubuntu:~$ ll

drwxr-xr-x  8  git         git   4096  3月  5 14:41 gitosis/

7、安装Gitosis程序。Gitosis是一个工具程序,可以帮助我们进行Git仓库的访问控制和远程管理。

git@ubuntu:~$ sudo apt-get install python-setuptools

git@ubuntu:~$ sudo git clone https://github.com/res0nat0r/gitosis.git

git@ubuntu:~$ ls

gitosis  lost+found

git@ubuntu:~$ cd gitosis/

git@ubuntu:~/gitosis$ sudo python setup.py install

8、我们这里授权fulinuxgit服务器的管理者,我们需要做如下工作。下面我们用fulinux账号来登录:

[fulinux@ubuntu ~]$ pwd

/home/fulinux

9、这里要强调一点每一个git用户使用之前都要做如下工作:

[chensaiping@ubuntu gitosis-admin]$ git config --global user.name "fulinux"

[chensaiping@ubuntu gitosis-admin]$ git config --global user.email  [email protected]

10、获取私钥和密钥,生成密钥的过程中一路回车就行了。

[fulinux@ubuntu ~]$ ssh-keygen

[fulinux@ubuntu ~]$ ls .ssh/

id_rsa  id_rsa.pub  known_hosts

Id_rsa是私钥,id_rsa_pub是公钥。

11、我们将fulinux生成的公钥发送给git用户:

[fulinux@ubuntu ~]$ scp .ssh/id_rsa.pub [email protected]:/home/git 

或者:

[fulinux@ubuntu ~]$ scp .ssh/id_rsa.pub git@ubuntu:/home/git 

12、下面我们到git用户中去:

git@ubuntu:~$ pwd

/home/git

git@ubuntu:~$ ls

gitosis  id_rsa.pub  lost+found

git@ubuntu:~$ cd gitosis/

git@ubuntu:~/gitosis$ sudo -H -u git gitosis-init < ../id_rsa.pub 

初始化空的 Git 版本库于 /home/git/repositories/gitosis-admin.git/

重新初始化现存的 Git 版本库于 /home/git/repositories/gitosis-admin.git/

git@ubuntu:~/gitosis$ 

git@ubuntu:~/gitosis$ cd ..

git@ubuntu:~$ ls

gitosis  id_rsa.pub  lost+found  repositories

git@ubuntu:~$ cd repositories/gitosis-admin.git/

git@ubuntu:~/repositories/gitosis-admin.git$ vim gitosis.conf 

[gitosis]

[group gitosis-admin]

members = fulinux@ubuntu

writable = gitosis-admin

说明fulinux@ubuntugit库的管理者。

这里面的fulinux@ubuntu是上面fulinux生成的公钥文件中后面的字符串:

[fulinux@ubuntu ~]$ vim .ssh/id_rsa.pub 

AAAAB3NzaC1yc2EAAAADAQABAAABAQDFxVgIPf+YgXNGMn4Y8+x75m0qiJjnDO6usEUncPquazwvJ5nLQyL189a4nT/ZN+

GlC8XkgFPfhVd2VXBepkuExxmUoWMlOJcV4Uaxo5/bCLA5viat6qBj2DDoj9aTSEguDNj4qES9P+rINc0w479iSFcRgoA+

WM2AryXHR7SqVlhZDoAR3kfy3Zh67uOLn0anGR9p4JfG0gYahro4oEgFUsfmwlU4UzXYrFW4sCr8u9lwAz2EOouKRp7EhpzjzCZFGNlni/

6j93sOWdW0UuBPiKmlZArkDj6O3YcZa6EqJkJmUSk+CiEkcejjkE0PtuctlpdH+79B6fjA3nmzQ/zt  fulinux@ubuntu

13、修改一个文件的权限:

git@ubuntu:~$ chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

14、这时候我们将/home/git/repositories(仓库)目录中的gitosis-admin.git克隆到fulinux用户中去,gitosis-admin.git这个是专门用来管理git用户的信息的。因为这个时候fulinux已经是git的管理员了。

[fulinux@ubuntu ~]$ pwd

/home/fulinux

[fulinux@ubuntu ~]$ git clone git@ubuntu:gitosis-admin.git

正克隆到 'gitosis-admin'...

remote: Counting objects: 5, done.

remote: Compressing objects: 100% (4/4), done.

remote: Total 5 (delta 0), reused 5 (delta 0)

接收对象中: 100% (5/5), done.

Checking connectivity... done

[fulinux@ubuntu ~]$ ls

gitosis-admin 

正是因为前面我们使用了公钥,这里我们就无需输入密码,并且获得了管理员的权限。但是在另一个用户上会出现什么呢?

15、添加管理员。

我们在chensaiping用户上测试一下:

[chensaiping@ubuntu gitosis-admin]$ git config --global user.name "chensaiping"

[chensaiping@ubuntu gitosis-admin]$ git config --global user.email [email protected]

[chensaiping@ubuntu ~]$ pwd

/home/chensaiping

[chensaiping@ubuntu ~]$ git clone git@ubuntu:gitosis-admin.git

正克隆到 'gitosis-admin'...

git@ubuntu's password: 

fatal: 'gitosis-admin.git' does not appear to be a git repository

fatal: Could not read from remote repository.

Please make sure you have the correct access rights

and the repository exists.

[chensaiping@ubuntu ~]$ 

上面我们看见用chensaiping账户,需要输入密码,但是因为没有授予管理员的权限,还是不能克隆gitosis-admin.git目录。

16、下面我们对chensaiping用户进行授权:

a) 首先生成密钥文件

[chensaiping@ubuntu ~]$ ssh-keygen 

可以全部回车。

查看公钥后面的字符串:

[chensaiping@ubuntu ~]$ cat .ssh/id_rsa.pub 

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCa58XwhAk8TVIZQLsjIYUwSUcuZrLIB++TolYI9/+EsnAqY2j9sXqzUzPP9I6h2kQ/AYKV7lUPrHg8v4I7WhjaGSYJtY/JSN1ubclkTzKobQ83j8BMd7Nnoa5rjcRl8kv07FIeyY7hMb03DLFQJ4sM3oSV4ryuzIcrnPR3czj37PICB8hbv+jBMy2YEZze4xuqy2ioiyGqXkW5XX0T69lqxMtuVBzP1OZEE5uPtfFi/GX+gVE4UTnayjGkouPIK9kLbKojge2Y3KtCB9JcU2KjPdEbRt45eaBkppSD18h6E3KIhxPaJJJFK1EuQpsecGNRh6iNY4OWXSufasloC5Sj chensaiping@ubuntu

在管理员fulinux用户中,将chensaiping@ubuntu添加到git的管理员成员列表中去:
[fulinux@ubuntu ~]$ pwd

/home/fulinux

[fulinux@ubuntu ~]$ vim gitosis-admin/gitosis.conf 

[group gitosis-admin]

members = fulinux@ubuntu chensaiping@ubuntu

writable = gitosis-admin

[fulinux@ubuntu ~]$ cd gitosis-admin/

[fulinux@ubuntu gitosis-admin]$ git add .

[fulinux@ubuntu gitosis-admin]$ git commit -am 'add a new admin user:chensaiping'

[fulinux@ubuntu gitosis-admin]$ git push

我们会看到下面git仓库里的管理员仓库也更新了:

[git@ubuntu ~]$ cd repositories/gitosis-admin.git/

[git@ubuntu gitosis-admin.git]$ pwd

/home/git/repositories/gitosis-admin.git

[git@ubuntu gitosis-admin.git]$ vim gitosis.conf 

[gitosis]

[group gitosis-admin]

members = fulinux@ubuntu chensaiping@ubuntu

writable = gitosis-admin

此时我们并没有将chensaiping的公钥文件拷贝过来。

17、我们在测试一下将gitosis-admin.git拷贝下来:

[chensaiping@ubuntu ~]$ pwd

/home/chensaiping

[chensaiping@ubuntu ~]$ git clone git@ubuntu:gitosis-admin.git

正克隆到 'gitosis-admin'...

git@ubuntu's password: 

fatal: 'gitosis-admin.git' does not appear to be a git repository

fatal: Could not read from remote repository.

Please make sure you have the correct access rights

and the repository exists.

还是无法拷贝。

18、我们将chensaiping@ubuntu 的公钥发送到fulinux(因为fulinuxgit的管理员)用户目录下:
[chensaiping@ubuntu ~]$ scp .ssh/id_rsa.pub scp .ssh/id_rsa.pub fulinux@ubuntu:/home/fulinux

19、将chensaiping@ubuntu 的公钥文件拷贝到下面的目录中,同时重命名:

[fulinux@ubuntu ~]$ pwd

/home/fulinux

[fulinux@ubuntu ~]$ mv id_rsa.pub gitosis-admin/keydir/[email protected]

[fulinux@ubuntu ~]$ cd gitosis-admin/

[fulinux@ubuntu gitosis-admin]$ git add .

[fulinux@ubuntu gitosis-admin]$ git commit -am '添加了[email protected]密钥文件'

[fulinux@ubuntu gitosis-admin]$ git push

这里管理员仓库添加了[email protected]公钥文件。

20、下面我们在chensaiping用户下测试一下能否将gitosis-admin.git克隆下来:

[chensaiping@ubuntu ~]$ git clone git@ubuntu:gitosis-admin.git

正克隆到 'gitosis-admin'...

remote: Counting objects: 12, done.

remote: Compressing objects: 100% (11/11), done.

remote: Total 12 (delta 0), reused 5 (delta 0)

接收对象中: 100% (12/12), done.

Checking connectivity... Done

我们看到chensaipingy用户无需输入密码就能将管理员目录gitosis-admin.git克隆下来。

可以说以后添加任何管理员的方式都和这个类似,我们可以让fulinux,或者新的管理员chensaiping来添加一个新的管理员。这个过程中,其他用户都无需知道git用户的密码,只要新添加的管理员提交了公钥文件,并且管理员将新用户的用户名加到了成员列表中。

21、下面我们将fulinux这个管理员去除掉:

[chensaiping@ubuntu ~]$ pwd

/home/chensaiping

[chensaiping@ubuntu ~]$ vim gitosis-admin/gitosis.conf 

[gitosis]

[group gitosis-admin]

members = chensaiping@ubuntu

writable = gitosis-admin

删除了fulinux@ubuntu

[chensaiping@ubuntu ~]$ cd gitosis-admin/

[chensaiping@ubuntu gitosis-admin]$ git add .

[chensaiping@ubuntu gitosis-admin]$ git commit -am '删除了管理员:fulinux@ubuntu'

[chensaiping@ubuntu gitosis-admin]$ git push

我们在fulinux用户下测试一下时候还有克隆gitosis-admin.git管理员目录的权限:

[fulinux@ubuntu ~]$ rm gitosis-admin/ -rf

[fulinux@ubuntu ~]$ git clone git@ubuntu:gitosis-admin.git

正克隆到 'gitosis-admin'...

ERROR:gitosis.serve.main:Repository read access denied

fatal: Could not read from remote repository.

Please make sure you have the correct access rights

and the repository exists.

可见fulinux已经无法克隆gitosis-admin.git管理员目录了,chensaipinggit的唯一管理员了。

22、创建工程:

上面我们完成了添加和删除git管理员的工作,git的主要工作是代码维护,这里我们创建一个工程test,比如xudinchao向管理员chensaiping申请创建test工程。

chensaiping用户需要做如下工作:

[chensaiping@ubuntu ~]$ pwd

/home/chensaiping

[chensaiping@ubuntu ~]$ cd gitosis-admin/

[chensaiping@ubuntu gitosis-admin]$ vim gitosis.conf 

[group gitosis-admin]

members = chensaiping@ubuntu

writable = gitosis-admin

[group test]

members = chensaiping@ubuntu xudinchao@ubuntu

writable = test

[chensaiping@ubuntu gitosis-admin]$ git add .

[chensaiping@ubuntu gitosis-admin]$ git commit -am '添加工程:test,成员:chensaiping,xudinchao'

[chensaiping@ubuntu gitosis-admin]$ git push 

当然chensaipin也可以不加在这个项目的成员中,这个项目中的两个成员chensaiping@ubuntu xudinchao@ubuntu都具有对test工程读写的权限。

xudinchao用户需要作如下工作:

如果未向管理员提交自己的公钥文件,生成公钥文件,在提交给管理员chensaiping

[xudinchao@ubuntu ~]$ pwd

/home/xudinchao

[xudinchao@ubuntu ~]$ git config --global user.name "xudinchao"

[xudinchao@ubuntu ~]$ git config --global user.email [email protected]

[xudinchao@ubuntu ~]$ ssh-keygen 

一路回车,就行,也可以输入密码,克隆工程时会让你输入你输入的密码。

发送公钥文件给chensaiping管理员,可以过下面的方式,或者其他方式:

[xudinchao@ubuntu ~]$ scp .ssh/id_rsa.pub chensaiping@ubuntu:/home/chensaiping

接着chensaiping完成如下工作:

[chensaiping@ubuntu ~]$ pwd

/home/chensaiping

[chensaiping@ubuntu ~]$ mv id_rsa.pub gitosis-admin/keydir/[email protected]

23、这时chensaiping在自己的工作目录中创建一个test工程:

[xudinchao@ubuntu ~]$ pwd

/home/xudinchao

[xudinchao@ubuntu ~]$ mkdir test

[xudinchao@ubuntu ~]$ cd test/

[xudinchao@ubuntu test]$ git init

初始化空的 Git 版本库于 /home/xudinchao/test/.git/

[xudinchao@ubuntu test]$ touch test.c

[xudinchao@ubuntu test]$ git add .

[xudinchao@ubuntu test]$ git remote add origin git@ubuntu:test.git

[xudinchao@ubuntu test]$ git commit -am '添加了一个工程: test'

[chensaiping@ubuntu test]$ git push origin master:refs/heads/master 

工程提交成功。

24、我们会看到在git用户的仓库下会出现一个test.git

[git@ubuntu repositories]$ pwd

/home/git/repositories

[git@ubuntu repositories]$ ls

gitosis-admin.git  test.git

[git@ubuntu repositories]$ 

25、这是xudinchao可以将这个工程克隆下来工作:

[xudinchao@ubuntu ~]$ git clone git@ubuntu:test.git

正克隆到 'test'...

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0)

接收对象中: 100% (3/3), done.

Checking connectivity... Done

[xudinchao@ubuntu ~]$ cd test/

[xudinchao@ubuntu test]$ ls

readme

比如说xudinchao添加了一个新的文件test.c,工作到一阶段,准备提交任务:

[xudinchao@ubuntu test]$ touch test.c

[xudinchao@ubuntu test]$ git add .

[xudinchao@ubuntu test]$ git commit -am '添加了一个新文件:test.c'

[xudinchao@ubuntu test]$ git push

查看进展:

[xudinchao@ubuntu test]$ git log

commit dc9305283a82be51cada963788ae2a17019d1c52

Author: xudinchao 

Date:   Thu Mar 6 11:23:55 2014 +0800

    添加了一个新文件:test.c

commit 9b6220bbe4adf512cb5f96cd4aae27adcc99e0b6

Author: chensaiping 

Date:   Thu Mar 6 11:12:54 2014 +0800

    添加了一个工程: test

如果chensaiping想查看进展:

[chensaiping@ubuntu test]$ git pull git@ubuntu:test.git

[chensaiping@ubuntu test]$ git log

commit dc9305283a82be51cada963788ae2a17019d1c52

Author: xudinchao 

Date:   Thu Mar 6 11:23:55 2014 +0800

    添加了一个新文件:test.c

commit 9b6220bbe4adf512cb5f96cd4aae27adcc99e0b6

Author: chensaiping 

Date:   Thu Mar 6 11:12:54 2014 +0800

    添加了一个工程: test

26、上面我们基本完成了添加项目的工作。

27、也许你每次都要输入类似以下的指令,会很繁琐,

git clone git@ubuntu:test.git

git clone git@ubuntu:gitosis-admin.git

下面我们作如下工作,以chensaiping为例,添加conf文件:

[chensaiping@ubuntu ~]$ pwd

/home/chensaiping

[chensaiping@ubuntu ~]$ vim .ssh/config 

host git

user git

hostname 192.168.1.2

IdentityFile ~/.ssh/id_rsa

这时,我们可以使用类似下面的指令:

[chensaiping@ubuntu ~]$ git clone git:test.git

[chensaiping@ubuntu ~]$ git clone git:gitosis-admin.git

28、gitweb搭建

[git@ubuntu ~]$ pwd

/home/git

[git@ubuntu ~]$ ls

gitosis  lost+found  repositories

[git@ubuntu ~]$ sudo apt-get install gitweb

[git@ubuntu ~]$ sudo apt-get install apache2

[git@ubuntu ~]$ mkdir gitweb

[git@ubuntu ~]$ sudo ln -sf /usr/share/gitweb/* gitweb

[git@ubuntu ~]$ ls gitweb/

gitweb.cgi  index.cgi  static

[git@ubuntu ~]$ ln -s /home/git/repositories/ gitweb

[git@ubuntu ~]$ ls gitweb/

gitweb.cgi  index.cgi  repositories  static

[git@ubuntu ~]$ sudo vim /etc/apache2/conf.d/gitweb 

  www.wuhanruizhe.com 

ServerName 127.0.0.1:80

ScriptAlias /gitweb /usr/lib/cgi-bin/

DirectoryIndex /gitweb/gitweb.cgi

DocumentRoot /home/clean/gitweb

ErrorLog /var/log/apache2/git.pcware.cn-error.log

Customlog "/var/log/apache2/git.pcware.cn-error.log" combined

/* The file original content */

#Alias /gitweb /usr/share/gitweb

#

#  Options FollowSymLinks +ExecCGI

#  AddHandler cgi-script .cgi

#

[git@ubuntu ~]$ sudo /etc/init.d/apache2 restart

[git@ubuntu ~]$ chmod 755 repositories/gitosis-admin.git/hooks/post-update 

29、

附注:

1Ubuntu 11.10 server 安装Git 服务器

2git服务器搭建过程


你可能感兴趣的:(数据库集合,linux技巧篇,vim,技巧篇)