您的位置:首页 > 运维架构 > Linux

Linux搭建使用SSH共享存取的 Git Server

2014-03-19 11:40 495 查看
1、问题提出:

如果是个人开发的情况下,本不需要git server,但是由于项目开发一般涉及到多人,为了权限管理的方便、配置、协同等等,那么就需要搭建git server。

2、解决问题思路:

采用ssh搭建server是首选,目前采用ssh搭建git server主要有三种方法:

1)linux下建立新帐号(git), 由 git 帐号来统一管理(commit / push) 等。

——这种方法操作简单,权限管理上也相对简单,适合少数几个人的协同开发。

2) 使用 gitosis 來管理(gitosis 可以设定到 "谁" 可以存取此仓库reposity).

——操作复杂,功能强大,权限管理较为丰富,适合数据较多人的协同开发。

3)使用 gitolite 來管理(gitolite 不仅可以设定 "誰" 可以存取此仓库reposity, 而且,可以设定只能存取该仓库下的哪个 branch 等路径)。

————操作复杂,功能强大,权限管理较gitosis更丰富,也是适合数据较多人的协同开发。(目前最新最主流的方式)

本文主要是采用第一种方法(linux下建立新帐号(git),
由 git 帐号来统一管理(commit / push) 等)来搭建git server。

3、实例:

1)准备工作:

系统必须安装git套件:

apt-get install git-core

客户端工作:

新建一个linux账户zhangmin,并生成ssh的公钥和私钥:

ssh-keygen
-t rsa  # 产生 id_rsa, id_rsa.pub

2) 服务器电脑上git server设置如下:

创建git账户,并产生ssh的公钥和私钥

adduser -m git

passwd git

将git的sh改成bash (/etc/passwd)

git用户下执行ssh-keygen -t rsa

cd /home/git/zhangmin

将第一步中客户端生成的id_rsa.pub 文件内容拷贝到服务器的/home/git/.ssh/authorized_keys文件下。

scp zhangmin@xx.xx.xx.xx:/home/zhangmin/.ssh/id_rsa.pub /home/git/zhangmin

cat id_rsa.pub >> ~/.ssh/authorized_keys

这样客户端A就被授予了ssh的git server访问权限。

3) 建立git reposity

mkdir gittest

cd gittest

git init --bared --shared  
//此地方建议使用git --bare init  采用前面的在提交时容易出错

4)在客户端A上push文件到刚才建立的reposity中

git clone git@192.168.2.201:/home/git/gittest

或采用
ssh://git@192.168.2.201/home/git/gittest //建议采用此种方式

cd gittest

touch test.txt

git add .

git commit -m 'this is first time __git' 执行这句会提示报错,大致是要设置用户名和邮箱

因此再执行:git config --global user.name "git.zhangmin" 

git config --global user.email "zhang.min@XXX.com"

再次重复执行commit操作,这次ok了。

git push origin master  //提交到服务器端的reposity

上面的操作也可以采用如下命令替代:

git init //将当前目录设置成git 的 working directory

touch test.txt

git add .

git commit -m 'this is first time __git'

git remote add origin git@xx.xx.xx.xx:/home/git/zhangmin/gittest

git push origin master

5)用另一台客户机B测试git协同工作

创建一个账户jack

adduser -m jack

passwd jack

ssh-keygen -t rsa

将生成的id_rsa.pub文件内容附加到服务器端的/home/git/.ssh/authorized_keys

(请参照上面的操作)

接下来

cd /home/jack

git clone git@xx.xx.xx.xx:/home/git/zhangmin/gittest

cd gittest

ls -l

可以看到有客户端用户新增的test.txt文件

vim test.txt  //修改txt文件

git add .

git commit -m 'this is first time __git' 执行这句同样会提示报错,要设置用户名和邮箱

因此再执行:git config --global user.name "zhangmin" 

git config --global user.email "zhang.min@XXX.com"

重复执行commit操作,成功。

git push origin master //推送到服务器

然后在第一台客户端A上:

git pull origin master

看到有更新,vim打开test.txt文件可以看到有内容了,这是客户端B所做的修改。

4、git init --bared --shared 命令和git init的区别

加了--bared参数表面该reposity不是一个working tree,例如不能在该目录下执行git pull操作,会有如下提示:

fatal: /usr/local/libexec/git-core/git-pull cannot be used without a working tree. 

该问题不是错误,不需要解决。

5、避免客户端通过git账户登录服务器的问题

例如,默认情况下在客户端输入: ssh git@xx.xx.xx.xx   直接可以登录到服务器。存在安全隐患,为解决这个问题,

在服务器的机器上,

vim /etc/passwd # 修改 /bin/sh => /usr/bin/git-shell,  git-shell 只能做 git 操作, 无法 Login.

6、获取配置信息:git config --list
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: