码迷,mamicode.com
首页 > 其他好文 > 详细

CentOS 架设git完整版

时间:2015-04-09 15:17:13      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

 Git 服务器搭建:

http://www.centoscn.com/CentosServer/ftp/2014/0414/2789.html

http://871421448.iteye.com/blog/1912205

http://weizhifeng.tumblr.com/post/25209375100/host-git-repositories-on-gitosis

 

1. 环境部署

系统环境:服务器端:CentOS 6.5 ,ip:172.20.48.15

        客户端:CentOS 6.5 ,ip:172.20.48.18

软件版本:服务器端:源码编译安装,git-1.9.0.tar.gz

        客户端:yum在线安装机制

 

2. 安装  (服务器端)

安装git

#yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel

#Wget : http://distfiles.macports.org/git/

#tar zxvf git-1.9.0.tar.gz

#cd git-1.9.0

#make prefix=/usr/local all

#make prefix=/usr/local install  #root用户运行

查看版本号:git --version

git version 1.9.0

 

安装gitosis

gitosis为Git用户权限管理系统,通过管理服务端的/home/git/.ssh/authorized_key文件来执行对用户权限的管理,是一个python模块包

#yum install python python-setuptools

#git clone git://github.com/res0nat0r/gitosis.git

#cd gitosis/

#python setup.py install

显示Finished processing dependencies for gitosis==0.2即表示成功 

 

 

安装 git ( 客户端 ):

#yum install git

#git --version

git version 1.7.1

 

 

3. ssh设置  (client秘钥 , server 公钥)

Client:

#scp ~/.ssh/id_rsa.pub   root@192.168.56.1:~/

Server

#ssh-keygen -t rsa

# cp  id_rsa.pub  /tmp/

 

4. 服务器上生成git用户

添加用户git:

#useradd  -d /home/git git

#chown git:git /home/git

 

修改PATH,使git用户可以调用git:

vi /home/git/.bashrc
PATH=/usr/local/bin:/usr/local/git/bin:$PATH
 

 

在服务器端生成管理库 : (用来初始化 gitosis )

方式1: (client 公钥生成管理库)

#sudo -H -u git gitosis-init < ~/id_rsa.pub

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

注解:

1. 生成的gitosis-admin为Git的用户访问权限管理库,gitosis通过这个git库来管理所有git库的访问权限。

2. 通过执行初始化,该公钥的拥有者就能修改用于配置gitosis的那个特殊Git仓库了

修改上传权限:

#chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

 

 

方式2: (server 公钥生成管理库)

$ su git # 切换倒git用户下

$ gitosis-init < /tmp/id_rsa.pub # id_rsa.pub

 

方式3: 简单命令生成管理库:

git init –bare test.git

 

5.获取并配置gitosis-admin 管理端(server端-----client端)

 Server 端 只可以 clone server 公钥生成的管理库

 Client 端 只可以 clone  client 公钥生成的管理库

 

#mkdir -p /git-repo/

#cd /git-repo/

#git clone git@server端IP:gitosis-admin.git

#cd gitosis-admin

#find .

./gitosis.conf

./keydir

./keydir/root@vm1.pub

注解:

gitosis.conf文件用来设置用户、仓库和权限的控制文件

keydir目录则是保存所有具有访问权限用户公钥的地方

./keydir/root@vm1.pub:如前所述,该用户具有访问权限

 

6.创建及设置管理项目 

#cd /git-repo/gitosis-admin

#ls keydir/

root@vm1.pub     ###### 文件名必须为: xxx.pub

 

添加项目:

#vim gitosis.conf

[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = root@vm1        #显示用户root@vm1.pub是初始化gitosis公钥的拥有者,是唯一能管理gitosis-admin项目的人


[group test ]            #组名称
members = root@vm1        #密钥用户名
writable = test               #仓库名称

#Git  commit  -a  -m “user add”

#Git  push

 

Writable  可读写   readonly 只读

对于同一个仓库设置不同的权限, 如 :

[group test ]

Writable = test    仓库名

Members = dongsheng@bjcjser01

[group test2]

Readonly =  test    仓库名

Members = pengfei@bjcjser01

如果在git push的时候,遇到错误“ddress 192.168.0.77 maps to bogon, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!”,解决为修改/etc/hosts文件,将ip地址与主机名对应关系写进去就可以了。

 

7. 初始、增加及使用项目git-test  (客户端 )

#cd /git-repo

#mkdir test

#cd test

 

#touch README

#git add .

#git commit -a -m "init git-test"

#git remote add origin git@192.168.56.1:git-test.git

#git push origin master

 

注解:在新项目git-test里首次推送数据到服务器前,需先设定该服务器地址为远程仓库,但你不用事先到服务器上手工创建该项目个体的裸仓库— Gitosis 会在第一次遇到推送时自动创建。

 

说明:如果在执行 git push origin master 的时候,提示以下错误:

error: src refspec master does not match any.

error: failed to push some refs to ‘git@192.168.0.77:pro2.git‘

这是由于项目为空的原因,我们在项目目录里新创建一个文件。经过->add -> commit -> push 就可以解决了

 

Ps:

$ touch a.txt

$ git     add     a.txt

在添加文件的目录中, 输入 git add 。

$ git commit -a -m ‘add a.txt‘

$ git push

如果在git clone的时候遇到“

error: cannot run ssh: No such file or directory - cygwin git”错误,则表示本机没有安装ssh命令。安装方法请参考:http://blog.haohtml.com/archives/13313

 

8. 客户端增加其他成员公钥到系统中:通过添加用户的公钥到keydir目录即可

 

1.生成密钥与公钥

[dev1@bogon ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dev1/.ssh/id_rsa):
Created directory ‘/home/dev1/.ssh‘.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/dev1/.ssh/id_rsa.
Your public key has been saved in /home/dev1/.ssh/id_rsa.pub.
The key fingerprint is:
99:4c:e4:00:56:a9:a2:e2:68:20:8c:60:90:2e:b9:b8 dev1@bogon
The key‘s randomart image is:
+--[ RSA 2048]----+
| . ooo.. |
|o . .+ |
|o. . o |
|+o. . o o |
|Bo . S |
|O. |
|*. |
|Eo |
|. |
+-----------------+

[dev1@bogon ~]$ ls .ssh
id_rsa id_rsa.pub

2.将公钥上传到git servergitosis-admin/keydir/ 目录里,文件名就是是用户名(这里文件名必须与客户端的用户名一致,否则无法使用.不知道同名的情况下如何处理?)
注意:我这里是在同一台机器上测试的,不同的机器可以用scp命令来实现上传文件,主要pub文件上传到keydir目录下才可以(scp ~/.ssh/id_rsa.pub root@192.168.0.77:/tmp/sxf.pub) 

cd /root/gitosis-admin/keydir/
cp /home/dev1/.ssh/id_rsa.pub ./dev1.pub

3.创建新项目,将dev1用户添加进去

cd /home/gitosis-admin/

vi gitosis.conf
[group project2]
writable = project2
members = dev1

4.保存修改,并将修改提交到git server

git add .
git commit -a -m ‘add new user dev1‘
git push

5.在客户端测试(用户为dev1)
创建项目project2目录(一定要和项目名称一样)

mkdir /data/project2
cd /data/project2
git init
touch test.txt
git add .

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

git commit -a -m ‘init project2‘
git remote add origin git@xxx:project2.git
git push origin master

git pull

可以看到已经提交成功了!

如果客户端为Linux的话,在执行git pull的时候,出现

 Permissions 0644 for ‘/root/.ssh/id_rsa’ are too open.

等错误显示了,只要把权限降到0600就ok了.这种情况下一般是属于将另其它地方的公钥直接放在其它客户端用的原因。

输入命令

chmod 0600 ~/.ssh/id_rsa

然后再执行相应的命令即可.这样就可以密钥登陆了.

 

9. 客户免密码登陆:

在 /home/dongsheng/.ssh/authorized_keys 文件中将在客户端生成的 dongsheng 公钥写入。  (如果没有authorized_keys 此文件,自己创建)


注意:git上的仓库对git用户要有写权限,同时需要将/etc/ssh/sshd_config中将RSA认证打开,即: 

  1. 1.RSAAuthentication yes     
  2. 2.PubkeyAuthentication yes     
  3. 3.AuthorizedKeysFile  .ssh/authorized_keys

 

10. 常见问题:

/home/git/repositories/gitosis-admin.git/hooks/post-update 为可执行即属性为 0755

1. git操作需要输入密码
原因
公密未找到
解决
上传id_rsa.pub到keydir并改为’gitosis帐号.pub’形式,如miao.pub。扩展名.pub不可省略

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

 

11. 自己随手补充:

1》  git init –bare  test.git  命令创建的仓库 ,如果clone  code , 只能使用git 组内的成员

2》  gitosis- admin  命令建立的仓库, 如果 clone  code , 只有 git 一个user 可以使用

CentOS 架设git完整版

标签:

原文地址:http://www.cnblogs.com/keer23/p/4409668.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!