(本文需要自己实践,由于时间关系,我仅仅是做了整理和快速的练习,至于笔记中的账号和ip域名都是我参考文章中的。如果读者有任何问题欢迎留言和发邮件到luoquantao@126.com)

硬件:云端阿里云服务器 

软件:云端:gitosis + git + ssh

   本地:cygwin 或者 gitbash

详细步骤如下:

1:创建git账号用于管理git服务器

  useradd -s /bin/bash -d /home/git -G root -m -c "Manager for git server" -p git git

     其中,-p:指定账户git的密码;

        -m:强制创建git账户的home目录;

        -d:指定git账号的home目录;

        -s:指定git账号的登录shell;

        -G:指定git账户所属的用户组;

        -c:指定git账号的描述;

  passwd git 设置git的密码:此处设置为git

  如果在后面使用sudo的时候报错,需要修改/etc/sudoers文件

2: 升级系统

  sudo apt-get update

  sudo apt-get upgrade

3: 安装git相关的组件(包括git、openssh)

  sudo apt-get install git-core openssh-server openssh-client

4:安装gitosis

  4-1:初始化git服务器所管理的账户(提交代码时的账号)

    ​​git@zxk:~$​​ git config --global user.name "zxk"

        ​​git@zxk:~$​​ git config --global user.email "​​zxk@163.com​​"

  4-2:安装python的setup tool,为安装gitosis做准备

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

  4-3:获取gitosis安装包

     ​​git@zxk:~$​​ mkdir ~/.gitosis_setop

        ​​git@zxk:~$​​ cd ~/.gitosis_setop/

         ​​git@zxk:~/.gitosis_setop$​​ git clone git://eagain.net/gitosis.git

         如果这个不行:

         Cloning into 'gitosis'...

         fatal: unable to connect to eagain.net:

         eagain.net[0: 208.78.102.120]: errno=Connection refused

         则可从如下位置clone gitosis包:

         git clone ​​https://github.com/res0nat0r/gitosis.git​

  4-4:安装gitosis包

     ​​git@zxk:~/.gitosis_setop$​​ cd gitosis/

        ​​git@zxk:~/.gitosis_setop/gitosis$​​ sudo python setup.py install

         若报错,可通过如下命令解决:

         ​​git@zxk:wget​​ ​​http://peak.telecommunity.com/dist/ez_setup.py​

         ​​git@zxk:python​​ ez_setup.py

  4-5:生成ssh公钥,并上传到git服务器上,或直接使用git账户在git服务器上生成,现在采用git账户直接在git服务器上生成。

     ​​git@zxk:~$​​ ssh-keygen -t rsa

    4-6:初始化gitosis

     ​​git@zxk:~$​​ sudo -H -u git gitosis-init < ~/.ssh/id_rsa

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

         Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/

     gitosis默认会把git仓库房子git账户的目录下:也就是/home/git下面

     gitosis的有趣之处在于,它通过一个git仓库管理配置文件

    仓库就放在/home/git/repositories/gitosis-admin.git, 我们需要对一个文件加个权限

     ​​git@zxk:~$​​ pwd

         /home/git

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

  4-7:配置gitosis, 以控制git客户端的操作

   ​​git@zxk:~$​​ git clone ​​git@192.168.0.251:repositories/gitosis-admin.git​

      ​​git@zxk:~$​​ cd gitosis-admin/

      ​​git@zxk:~/gitosis-admin$​​ vi gitosis.conf 

      [gitosis]

      loglevel = DEBUG

 

      [group gitosis-admin]                 #gitosis-admin为git组名;

      witeable = gitosis-admin              #gitosis-admin为仓库名;

      members = ​​git@zxk​​ ​​root@zxk​​ ​​zxk@zxk​

 

      #下面两个group配置实现把仓库teamwork的只读权限分配给git组team;

      #同时,把仓库teamwork的可写权限分配给git组team_ro;

      [group team]                          #team为git组名;

      writable = teamwork                   #teamwork为仓库名;

      members = ​​a@svr​​ b

   

      ​​git@zxk:~/gitosis-admin$​​ git add -A

      ​​git@zxk:~/gitosis-admin$​​ git commit -m "init gitosis-admin config gitosis.conf"

      [master 2691646] init gitosis-admin config gitosis.conf

      1 file changed, 4 insertions(+)

 

      ​​git@zxk:~/gitosis-admin$​​ git push origin master

      ​​git@192.168.0.251's​​ password: 

      Counting objects: 5, done.

  4-8:创建一个仓库的存储位置,并初始化

   ​​git@zxk:~$​​ mkdir -p /repo/top1

      git@zxk:~$ cd /repo/top1/
      ​git@zxk:/repo/top1$​ git init --bare

 

      #在当前项目仓库中配置访问该仓库的用户信息:

      ​​git@zxk:/repo/top1$​​ git config --add user.name "zxk"

      ​​git@zxk:/repo/top1$​​ git config --add user.email "​​zxk@163.com​​"

      ​​git@zxk:/repo/top1$​​ git config --add user.name "bliss"

      ​​git@zxk:/repo/top1$​​ git config --add user.email "​​bliss@163.com​​"

      ​​git@zxk:/repo/top1$​​ git config --add user.name "dummy"

      ​​git@zxk:/repo/top1$​​ git config --add user.email "​​dummy@163.com​​"

      这些信息被添加在当前项目仓库的.git/config文件的[user]段中了;

 

      如果git config命令加上--global选项,那些这些用户信息就会被添加到~/.gitconfig文件的[user]段中;

      如:

      ​​git@zxk:/repo/top1$​​ git config --global --add user.name "zhangsan"

      ​​git@zxk:/repo/top1$​​ git config --global  --add user.email "​​zhangsan@163.com​​"

 

      如果git config命令加上--file选项,那些这些用户信息就会被添加到--file所指定的文件的[user]段中;

  4-9:在客户端直接clone该仓库就可以了;

   git clone ​​zxk@192.168.0.251:/repo/top1​​ test

      然后初始化第一个版本的数据并提交;