dolf 发表于 2015-10-19 10:05:44

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

  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-getinstall 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
gitpush origin master


5)用另一台客户机B测试git协同工作
创建一个账户jack
adduser-m jack
passwdjack
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 workingtree.

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

  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

         版权声明:本文为博主原创文章,未经博主允许不得转载。
页: [1]
查看完整版本: Linux搭建使用SSH共享存取的 Git Server