设为首页 收藏本站
查看: 639|回复: 0

[经验分享] Linux搭建使用SSH共享存取的 Git Server

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-10-19 10:05:44 | 显示全部楼层 |阅读模式
  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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-128578-1-1.html 上篇帖子: git使用ssh密钥 (转) 下篇帖子: ubuntu下利用SSH登录git(转载)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表