meimei10251314 发表于 2018-9-18 11:42:04

Git配置手册

  Git服务器配置
  1.部署环境:
  (1)系统版本:CentOS 5.5
  (2)服务端 IP:172.16.34.235   Hostname:CentOS5-A
  客户端1 IP:172.16.34.236Hostname:CentOS5-B
  客户端2 IP:172.16.34.237Hostname:CentOS5-C
  (3)所需包下载地址:
  wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tar.bz2
  wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz
  wget http://www.codemonkey.org.uk/projects/git-snapshots/git/git-latest.tar.gz
  2. python 安装
  ----------------
  查看python版本
  python -V
  显示结果:
  Python 2.4.3
  升级到Python 2.7.1
  cd /data/softs
  tar xvjf Python-2.7.1.tar.bz2
  cd Python-2.7.1/
  ./configure --enable-shared
  make
  make install
  ldconfig
  3.setuptools 安装 为安装gitosis做准备
  cd /data/softs
  tar -zxvf setuptools-0.6c11.tar.gz
  cd setuptools-0.6c11
  python setup.py build
  python setup.py install
  4.Git 安装
  ----------------
  首先需要安装git的依赖包
  yum install curl
  yum install curl-devel
  yum install zlib-devel
  yum install openssl-devel
  yum install perl
  yum install cpio
  yum install expat-devel
  yum install gettext-devel
  cd /data/softs
  tar -zxvf git-latest.tar.gz
  cd git-2012-11-13
  autoconf
  ./configure --with-python=/usr/local/bin/python2.7
  make
  make install
  git --version
  5.添加用户git
  useradd -r -s /bin/sh -c 'git version control' -d /home/git git
  passwd git
  mkdir -p /home/git
  chown git:git /home/git
  注:步骤2-5三台机器上均需要安装
  6.安装gitosis(服务端)
  cd /data/softs
  git clone git://github.com/res0nat0r/gitosis.git
  Cloning into 'gitosis'...
  remote: Counting objects: 727, done.
  remote: Compressing objects: 100% (217/217), done.
  remote: Total 727 (delta 510), reused 690 (delta 494)
  Receiving objects: 100% (727/727), 110.70 KiB | 53 KiB/s, done.
  Resolving deltas: 100% (510/510), done.
  cd gitosis
  python setup.py install
  7.生成本机密钥,上传密钥到服务器临时目录
  (1)切换到客户端1
  # su git
  sh-3.2$ ssh-keygen -t rsa
  Generating public/private rsa key pair.
  Enter file in which to save the key (/home/git/.ssh/id_rsa):
  Created directory '/home/git/.ssh'.
  Enter passphrase (empty for no passphrase):
  Enter same passphrase again:

  Your>  Your public key has been saved in /home/git/.ssh/id_rsa.pub.
  The key fingerprint is:
  50:93:2a:dd:50:b2:dd:c2:aa:a6:f9:a6:9f:55:82:b9 git@CentOS5-B
  sh-3.2$scp /home/git/.ssh/id_rsa.pub 172.16.34.235:/tmp/id_rsa_client1.pub
  The authenticity of host '172.16.34.235 (172.16.34.235)' can't be established.
  RSA key fingerprint is 0f:92:64:29:ab:02:4a:33:b2:8b:39:b4:8f:0d:88:40.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added '172.16.34.235' (RSA) to the list of known hosts.
  git@172.16.34.235's password:
  id_rsa.pub                                              100%395   0.4KB/s   00:00
  sh-3.2$
  (2)客户端2作同样操作
  8.初使化gitosis,生成管理库
  sh-3.2$ gitosis-initmaster
  sh-3.2$
  回到服务端:
  cat /home/git/.ssh/authorized_keys
  sh-3.2$ cat authorized_keys
  ### autogenerated by gitosis, DO NOT EDIT
  command="gitosis-serve hanxiaoqi",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA02vPejh7OfzHtFc3dlA+k55X9kttJ/8WgK2YiXObAElXJ+CAzZKayciUfbY4A3Xl55kV***YhvfxdndBWXAj2za8iSCW535XMgFBXH/gtD2+Ecql2oUu0TOoAldgZ6jJ03hon+B0T4znWZTmfNKY4GauWgj65Z+ex+VZoO357089mTGMnoOZx1sblC+7vr9TnFoSh1hOqdYlaBjvB8BtcXrU4OVbZphPE1BxmT6OSDWx677M157uWsyZFxH5ocr8hqZ88+zpVZe1i5VEZpnXETHlXb6Ix/4mEutscJ5WGWjZEJgUNGv+jYTSvtDS+7z/A9ot93kze46RxPFuRB6Cyw== hanxiaoqi@CentOS5-C
  command="gitosis-serve song",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqhgzC2oi8JrYNZcyZ//ojddJCqalKJ0mBtMCfq9VEHPh0YjaZqdNd4HeqHrtFoRe3C+6zQwqAesd+q01gMyOTAyAI76d5b4j81MNCyvGbzbhzc/xOOxCpnT9H5ZKoChzoh88Tah1pjsZDW6spBHW/HRtaLRKB3k6fAGyctE5heJJUqGOknnDfzw+ZyzfFxynNiYvgDgWW5MfALFz/ltzo41QwL30Lfj6ZuHF2kV4Olc7jK1vHzm0/riU3a6BeYf5NAmATNlP94QbThUBdq/MpKJ7OFDXCNXuFBBJ9RANtwA3m8pFb48cZ4ebuMfd8YQ0I2Rb+OvVxVDT0XGYU/uNAw== song@CentOS5-B
  command="gitosis-serve git@CentOS5-C",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0pO/1EcLPBZOL8zPASs85srQGBz4QHv3aV0SR/zJw/ViuUwY8toMtRp0OsQ8VaqqkP3RIh6J49ZgtmDnbrrcLIkpnTgHEqU+s7WoHmZWnttMEYs8aMoSvFT5pxR9k54baHKaA2TmUtTmCJnVCqPx2uSP5tb+Cww18dj9+LzdJ/fCllcwuGfg9z0G8seedgq/Iv22XIMH045ciUNC7P02kSq2tjCctJtDtP8Cb2MYhurySOVBqjAx+GISrXJXUqRI1Gsr1CjlxazsoRwnHUz217btE+xnpwkQ7lxPMNyPS2fMbR+chU/Pg7Yfx43xxhePhsPqCmYFLaX87gyBRV/GVw== git@CentOS5-C
  command="gitosis-serve git@CentOS5-B",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1o68X0/pVW3HM3CZTZhSASOhjj3lI1s0Txzt8Yg1NoEVY/NAW7oFCENxu0Wg2Cxrb93w0HfSTHb/2dXtzhzb4Oq7XaxDYpy+i5M3y1xiQkZoqL30qh7n++RWjpMwObgs00PzcV4kiZ+UCU2gnDlJl+t8rc6CwlEcphoN9IPexiGUJIeJeRWA0c+BGJH0ds3I/D+TGX3Jr92R7k2zsn3pmD6i9px6EtDK/QKFzPnnBQ9psCRiHJk3qu33sghJuUlp7vQU6zKylxMZ9ypevo9nJnA/gUf0PLQKSgvj39/k5PIGVrLOt4o3xu/Z8PeM/dd8cpDEd3hHhFmw+Y0Ev+CaXw== git@CentOS5-B
  到此客户端用户公钥已经添加到/home/git/.ssh/authorized_keys文件中。
  10.创建空仓库
  在服务端创建空仓库,并初始化。
  sh-3.2$ cd /home/git/repositories/
  sh-3.2$ mkdir project.git
  sh-3.2$ cd project.git/
  sh-3.2$ git init --bare
  Initialized empty Git repository in /home/git/repositories/project.git/
  sh-3.2$ ls
  branchesconfigdescriptionHEADhooksinfoobjectsrefs
  sh-3.2$
  在客户端直接clone该仓库就可以了
  1.客户端1:
  切换到git用户
  sh-3.2$ cd /home/git
  sh-3.2$ git clone git@172.16.34.235:project.git
  Cloning into 'project'...
  warning: You appear to have cloned an empty repository.
  sh-3.2$ ls
  gitosis-adminproject
  sh-3.2$ cd project/
  sh-3.2$ vi hello
  编辑文件
  -----------------
  hello
  --------------------
  sh-3.2$ git add .
  sh-3.2$ git commit -am "add hello file"
   add hello file
  1 file changed, 1 insertion(+)
  create mode 100644 hello
  sh-3.2$ git push origin master
  Counting objects: 3, done.
  Writing objects: 100% (3/3), 214 bytes, done.
  Total 3 (delta 0), reused 0 (delta 0)
  To git@172.16.34.235:project.git
  *       master -> master
  sh-3.2$
  2.客户端2:
  切换到hanxiaoqi用户
  # su hanxiaoqi
  $ pwd
  /home
  $ cd hanxiaoqi/
  $ ls
  $ pwd
  /home/hanxiaoqi
  $ git clone git@172.16.34.235:project.git
  正克隆到 'project'...
  remote: Counting objects: 3, done.
  remote: Total 3 (delta 0), reused 0 (delta 0)
  接收对象中: 100% (3/3), done.
  $ ls
  project
  $ cd project/
  $ ls
  hello
  $ vi hello2
  hello2
  ~
  ~
  "hello2" [新] 1L, 7C 已写入
  $ ls
  hellohello2
  $ git add .
  $ git commit -am "add hello2 file by hanxiaoqi"
  *** Please tell me who you are.
  Run
  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

  to set your account's default>
  Omit --global to set the>
  fatal: empty>  $ git config --global user.email "hanxiaoqi@xqhan.com"
  $ git config --global user.name "hanxiaoqi"
  $ git commit -am "add hello2 file by hanxiaoqi"
   add hello2 file by hanxiaoqi
  1 file changed, 1 insertion(+)
  create mode 100644 hello2
  $ git push origin master
  Counting objects: 4, done.
  Compressing objects: 100% (2/2), done.
  Writing objects: 100% (3/3), 278 bytes, done.
  Total 3 (delta 0), reused 0 (delta 0)
  To git@172.16.34.235:project.git
  8c6f80f..fd9c5famaster -> master
  $
  3.客户端1:
  切换到song用户
  # su song
  $ cd /home/song
  $ ls
  $ git clone git@172.16.34.235:project.git
  正克隆到 'project'...
  remote: Counting objects: 6, done.
  remote: Compressing objects: 100% (3/3), done.
  remote: Total 6 (delta 0), reused 0 (delta 0)
  接收对象中: 100% (6/6), done.
  $ ls
  project
  $ cd project/
  $ ls
  hellohello2
  $ vi hello3
  hello3
  ~
  "hello3" [新] 1L, 7C 已写入
  $ git add .
  $ git commit -am "add hello3 file by song"
  *** Please tell me who you are.
  Run
  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

  to set your account's default>
  Omit --global to set the>
  fatal: empty>  $ git config --global user.email "hanxiaoqi@xqhan.com"
  $ git config --global user.name "hanxiaoqi"
  $ git commit -am "add hello3 file by song"
   add hello3 file by song
  1 file changed, 1 insertion(+)
  create mode 100644 hello3
  $ git push origin master
  ERROR:gitosis.serve.main:Repository write access denied
  fatal: Could not read from remote repository.
  Please make sure you have the correct access rights
  and the repository exists.
  $
  4.客户端2
  切换到git用户
  # su git
  sh-3.2$ cd /home/git/
  sh-3.2$ ls
  gitosis-admin
  sh-3.2$ cd gitosis-admin/
  sh-3.2$ ls
  gitosis.confkeydir
  sh-3.2$ vi gitosis.conf 开通song用户写权限
  
  
  members = git@CentOS5-B git@CentOS5-C hanxiaoqi song
  writable = gitosis-admin
  
  writable = project
  members = git@CentOS5-B git@CentOS5-C hanxiaoqi song
  #
  #readonly = project
  #members = song
  ~
  "gitosis.conf" 11L, 256C written
  sh-3.2$ git add .
  sh-3.2$ git commit -am "user song writer"
   user song writer
  1 file changed, 4 insertions(+), 4 deletions(-)
  sh-3.2$ git push origin master
  Counting objects: 5, done.
  Compressing objects: 100% (3/3), done.
  Writing objects: 100% (3/3), 361 bytes, done.
  Total 3 (delta 1), reused 0 (delta 0)
  To git@172.16.34.235:/gitosis-admin.git
  e1503c4..1c80b8dmaster -> master
  sh-3.2$
  5.回到客户端1到song用户
  再次执行:
  $ git push origin master
  ERROR:gitosis.serve.main:Repository write access denied
  fatal: Could not read from remote repository.
  Please make sure you have the correct access rights
  and the repository exists.
  $ git push origin master
  Counting objects: 4, done.
  Compressing objects: 100% (2/2), done.
  Writing objects: 100% (3/3), 304 bytes, done.
  Total 3 (delta 0), reused 0 (delta 0)
  To git@172.16.34.235:project.git
  fd9c5fa..f645290master -> master
  $
  11.viewgit
  viewGit 是一个 Git 版本控制系统的 Web 接口,用来查看资源库中的信息,viewGit 安装和升级都非常简单。
  首先安装nginx+php,因为viewgit是php环境开发
  viewGit安装
  # git clone git://repo.or.cz/viewgit.git
  Cloning into 'viewgit'...
  remote: Counting objects: 1675, done.
  remote: Compressing objects: 100% (503/503), done.
  remote: Total 1675 (delta 1114), reused 1675 (delta 1114)
  Receiving objects: 100% (1675/1675), 1.30 MiB | 5 KiB/s, done.
  Resolving deltas: 100% (1114/1114), done.
  # cd viewgit/
  # ls
  default.cssfavicon.pnginc      light.csstemplates
  doc          images       index.phpplugins
  将viewgit文件夹所有内容复制到网站根目录(/data/htdocs/www)
  # cd /data/htdocs/www
  # ls
  default.cssfavicon.pnginc         index.phpplugins    viewgit
  doc          images       index.htmllight.csstemplatesviewgit.tag.gz
  # cd inc
  # ls
  auth_drupal_user.phpconfig.php               functions.php
  auth_simple.php       example-localconfig.phpplugins.php
  # cp config.php localconfig.php
  # vi localconfig.php
  查找到以下内容:
  $conf['projects'] = array(
  // 'name' => array('repo' => '/path/to/repo/.git'), // path to GIT_DIR
  );
  更改为:
  $conf['projects'] = array();
  $git_repos_path = '/home/git/repositories';
  $git_repos_folders = scandir($git_repos_path);
  foreach ($git_repos_folders as $folder) {
  if (preg_match('/^.*\.git$/', $folder) === 1) {
  $conf['projects'][$folder] = array('repo' => $git_repos_path . '/' . $folder);
  }
  }
  创建仓库描述文件
  # cd /home/git/
  # ls

  gitosis >  # cd repositories/
  # ls
  gitosis-admin.gitproject.gitviewgit
  # cd project.git/
  # ls
  branchesconfigdescriptionHEADhooksinfoobjectsrefs
  # cat description
  project 1.0 by hanxiaoqi
  #
  测试:
  在浏览器里访问http://172.16.34.235
  显示如下如果:
  Project Description Last Commit Last Change Actions
  gitosis-admin.git gitosis-admin manage all project's user permissions.add git237.pub 2012-11-15 06:26 tree tar/gz zip
  project.git project 1.0 by hanxiaoqinew file hello3 2012-11-16 04:34 tree tar/gz zip
  ViewGit

页: [1]
查看完整版本: Git配置手册