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

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

2013-09-23 14:15 169 查看
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
4)在客户端A上push文件到刚才建立的reposity中
git clone git@xx.xx.xx.xx:/home/git/zhangmin/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



gitolite构建服务器的方式请参考:

http://www.ossxp.com/doc/git/gitolite.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux ubuntu git server ssh