Git 服务器在Ubuntu12.04上的搭建与使用体验第二篇

前一篇文章已经对Git使用有了一个概括性认识,下面我们将开始具体搭建Git服务,和如何创建仓库.

说明:需要两台Ubuntu电脑l:   电脑A 作为Server端, IP地址:192.168.1.8  ,电脑B   Client端作为超级管理员.

1 安装git,git-core (A和B电脑都需要安装)

[plain]  view plain copy
  1. sudo apt-get install git  
  2. sudo apt-get install git-core  

2 下载gitosis Server端安装,gitosis是用来迅速搭建git server的软件包,详细的介绍可以访问https://github.com/res0nat0r/gitosis)

可以在~下新建目录叫src

[plain]  view plain copy
  1. mkdir src  
  2. cd ~/src  
  3. git clone https://github.com/res0nat0r/gitosis.git 
注意:github中和其他网站转载的文章用到的 git clone git://eagain.net/gitosis无法访问!

3 安装gitosis (Server端安装)

[plain]  view plain copy
  1. cd ~/src/gitosis  
  2. sudo python setup.py install  
注意:如果报错:ImportError:No module named Setuptools 说明python的安装包缺少setuptools包。

解决方法1:

[plain]  view plain copy
  1. sudo apt-get install python-setuptools  

解决方法2:

(1)安装python的安装工具pip

[plain]  view plain copy
  1. sudo apt-get install python-pip  
(2) 安装setuptools

[plain]  view plain copy
  1. sudo pip install setuptools  
有时候会碰到权限受限的错误,此时最好用root执行安装。


4 新建特殊用户git (Server端执行)

这个用户主要是用来管理git的仓库,名字默认为“git”,也可以用别的名字。但是最好不要用已经存在的用户名。

[plain]  view plain copy
  1. sudo adduser \  
  2. --system \  
  3. --shell /bin/sh \  
  4. --gecos 'git version control' \  
  5. --group \  
  6. --disabled-password \  
  7. --home /home/git \  
  8. git  
如果成功执行,则会提示

Adding system user 'git' (UID 114) ...

Adding new group 'git' (GID 123) ...

Adding new user 'git' (UID 114) with group 'git' ...

Creating home directory '/home/git' ...


5 产生ssh key (电脑Client端执行)

因为gitosis主要通过ssh来实现用户访问,所以需要SSH key。

在电脑B上产生key只需要执行

[plain]  view plain copy
  1. ssh-keygen -t rsa  
公共key会在$HOME/.ssh/id_rsa.pub


6 复制ssh 公共key到Server上

建议放到tmp目录下,这样可以避免权限限制带来的问题。

具体方法很多,这里不再复述。

例如,直接拷贝

[plain]  view plain copy
  1. scp ~/.ssh/id_rsa.pub git@computerA:/tmp   

7 电脑A:初始化git server

(1)导入pub key并且初始化gitosis

假设pub key在tmp目录中为id_rsa.pub

[plain]  view plain copy
  1. sudo -H -u git gitosis-init < /tmp/id_rsa.pub  
会看到两行输出:

initilailized empty Git repository in /home/git/repositories/gitosis-admin.git/

Reinitillized existing Git repository in /home/git/repositories/gitossi-admin.git/

这个步骤是给超级管理员的电脑授权,授权以后电脑B可以使用git clone命令下载gitosis-admin仓库,这个命令只需要在给超级管理员权限时使用,在增加其他的用户管理权限时,不需要这样做,如何新增加一个用户的Git访问权限看步骤9.

(2) 修改一个文件的访问权限

[plain]  view plain copy
  1. sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update  


8 电脑B:同步gitosis-admin到B电脑开始管理git server

[plain]  view plain copy
  1. git clone git@computA:gitosis-admin.git  
这样会在当前目录下fork一个gitosis-admin的目录。里面有一个配置文件gitosisi.conf和一个存放pub key的目录keydir。

注意:有时会碰到如下错误

ssh: connect to host 192.168.0.12 port 22: Connection refused
fatal: The remote end hung up unexpectedly

说明电脑A可能没有安装SSH server

[plain]  view plain copy
  1. sudo apt-get install openssh-server  


9 建立新的库和授权用户

如果要新建库,编辑gitosisi.conf文件,添加

[plain]  view plain copy
  1. [gitosis]  
  2.   
  3. [group gitosis-admin]  
  4. writable = gitosis-admin  
  5. members = user1@pc1 user2@pc2  
  6.   
  7. writable = project-a  
  8. members = user1@pc2 user2@pc2

注意1 :

      如果新增加一个用户,需要在新用户的虚拟机里面执行 ssh-keygen -t rsa 命令,一路回车即可,把新生成的id_rsa.pub文件放到超级管理员的PC gitosis-admin->keydir 目录下,且把文件名字修改为新用户Ubuntu机器的名字,其实打开id_rsa.pub文件,文件的结尾含有机器的PC名字,把名字复制一下就行,注意文件名中含有 .pub 名字. 另外注意修改gitosis.conf文件,把机器名添加进入,如上图所示,另外新建一个仓库也需要添加到gitosis.conf文件,上图中project-a就是新仓库名字.

    如果项目组有多个成员,这就要求每个成员的Ubuntu机器名字不能一样,修改每个用户的机器名字,让他们不同,建议每个机器的机器名字含有自己的ID信息,以后查看代码提交日志的时候,信息会含有提交者机器的名字,这样便知道是哪位同事提交的代码.

      

注意2:

       将改动的conf文件和新的key在超级管理员的PC上面执行git add -> git commit -> git push命令上传到git server即可,这时其他的项目成员就可以git clone仓库,进行Git管理了.

下图是笔者机器上项目组成员的key:

                            


10 上传文件到库

这里有两个场景:

(1)全新的项目

(2)已有的git仓库恢复

过程差不多,但是对已有的git仓库而言,有几个问题需要注意。

比如有项目的文件夹为project-a

a.进入项目文件夹 

[plain]  view plain copy
  1. cd project-a  

b.初始化git本地仓库,添加到git管理

[plain]  view plain copy
  1. git init  
  2. git add .
  3. git commit  -a  -m "add new project"

c.建立本地与服务器关联 

[plain]  view plain copy
  1. git remote add origin git@YOUR_GIT_SERVER_HOSTNAME:project-a.git  

d.提交本地代码

[plain]  view plain copy
  1. git push origin master:refs/heads/master  
注意:这条命令在超级管理员的机器上面运行,将在服务器上面新创建一个仓库。

至此新的库和对应文件已经上传到server端,其他用户可以

[plain]  view plain copy
  1. git clone git@YOUR_GIT_SERVER_HOSTNAME:project-a.git  
获得项目文件。

对于已有的git仓库恢复,指的是server端电脑A出问题,系统重做后,如何把电脑B的内容提交到电脑A,从而复原git server。

其实步骤都和上面一样,只是如果执行到10的d步骤时,会提示rsa的key不匹配,这里只需要将电脑B ~/.ssh/known_hosts文件里对应的旧rsa key删除即可。

比如以前的服务器的IP为192.168.0.12,你会在known_hosts文件里看到,如下

[plain]  view plain copy
  1. ...  
  2. 113.116.44.123 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/h79FdQwU2xG7cWncZEzI5gxK1l6p3aoTwneW9snRyTQmAT3OQV5wPiiYrj/W9HyVi7sX0BeaBlGb71ipViOXMrflva3KbCBTx8KZ6vawaSxtIhRaWd+Xzd5Kg3A69IYpLHW/0BTMVh3B53zBbxb9QzFVwfqb3AITEQxd/z6wdxLyTfmxz5CCARUaAi8F7LZ8Q5zNyyAlY5oG92i0/eJ0RmqgyNpno/ZxfoBxkAFAyUtLRbBdsj1eoGynJS9IzqjyW7WTol6aWwmBemn6gZO6FecLgIKSiG4+TYebvTZqC3aBcNxrKTmFqvu80Qv1beZ6kVWjbBOmDBhOdz2Max37  
  3. 113.118.228.88 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/h79FdQwU2xG7cWncZEzI5gxK1l6p3aoTwneW9snRyTQmAT3OQV5wPiiYrj/W9HyVi7sX0BeaBlGb71ipViOXMrflva3KbCBTx8KZ6vawaSxtIhRaWd+Xzd5Kg3A69IYpLHW/0BTMVh3B53zBbxb9QzFVwfqb3AITEQxd/z6wdxLyTfmxz5CCARUaAi8F7LZ8Q5zNyyAlY5oG92i0/eJ0RmqgyNpno/ZxfoBxkAFAyUtLRbBdsj1eoGynJS9IzqjyW7WTol6aWwmBemn6gZO6FecLgIKSiG4+TYebvTZqC3aBcNxrKTmFqvu80Qv1beZ6kVWjbBOmDBhOdz2Max37  
  4. <del>192.168.0.12 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCs3guvL3wffuMXmEnghFIFzU9leD+n/U1K+U7IOBesHFtTJ0EEpDnusNwaXq/fqtHsA8FMVk7VyI5IzptCq57/Yi1Cpyrv1zUUC2YPSlMl6qMoPiP1QYMAQBPkiAmq6KJIRu14xpZQDu+hHH1b0g7R/Y0ZGaNGzdcsq5UEdMTzyLZZn+6BamzbsF71oLuEwMlI3vhe/wsn8XfuZbRQhae3lt3frhM79JqUcGoGN2FYOeqv3PpyW7k8uIsCAe2HhxprLbLwVOWh0l4gwR0lt8yOrUEoVnmZfOpwCfBpFTg1Wq2UDBddFdm/01P7eJM8millqo6AIATr7sYzDsIAYiql</del>  
  5. ...  
将对应的key删除,保存退出。再执行push即可恢复。

11  安装GitWeb

如果想在本地版本库看看自己项目的效果,不妨用Git 自带的一个命令,可以使用类似lighttpd这样轻量级的web服务器启动一个临时进程。如果是在Linux 主机上,通常都预装了lighttpd (可到http://www.lighttpd.net下载源码进行安装),无须任何配置,可以git工作区中键入以下命令来启动。

$ git instaweb

这会在1234端口开启一个HTTPD 服务,随之在浏览器中显示该页,十分简单。关闭服务时,只需在原来的命令后面加上--stop 选项就可以了:

$ git instaweb –stop


至此完成了git server的搭建,或者恢复工作。

本篇文章转载自网友:http://blog.csdn.net/elefant/article/details/8558110  http://blog.csdn.net/benkaoya/article/details/8094295,在此表示感谢.笔者在网友博客的基础上进行了必要的修正,和增加了注意事项,技术文章如有不妥之处欢迎大家提出改进意见.


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值