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]