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

[经验分享] 跨windows、Linux的Gitosis运用概念全解

[复制链接]

尚未签到

发表于 2018-6-18 09:44:57 | 显示全部楼层 |阅读模式
  开始用Git,但是老觉得公司的代码放上边不太放心,毕竟是商业性的代码。所以就搜索网上各位博主们如何搭建私有的git服务器来实现团队、公司内部的代码保存、协作,发现很多文章解释了步骤但是没有解释清楚原理,而且涉及到在多台电脑之间的操作切换,安装者基本的原理都没有搞清楚,就不知道什么东西该在什么地方做对应的配置,使得安装者不知道怎么安装成功、怎样算安装成功、安装成功后怎么用?基于对该问题的解决,为了避免后来者走弯路笔者遂挥毫记之,以便后来者看之、鉴之。
  言归正传:首先Gitosis系统中的作为一个代码、工程的同步平台所有存在多台电脑,每台电脑在Gitosis系统具有不同的角色,角色分别为:Gitosis服务器、Gitosis管理客户端、Gitosis普通客户端,Gitosis管理客户端也可以作为普通客户端登入,其中:
  (1)Gitosis服务器作为各git客户端(Gitosis普通客户端、Gitosis管理客户端)代码各版本代码上传、存储、同步下载的服务器。
  (2)Gitosis管理客户端作为初始客户端,Gitosis服务器根据Gitosis管理客户端生成的公钥进行git服务器初始化;远程配置并以git上传的方式在Gitosis服务器上创建团队工程、添加普通客户端公钥到keydir使之具有免密访问的前提、配置每个工程对应的每个客户端的访问权限(包括Gitosis管理客户端,因为在后续的日常使用中其也可以作为Gitosis普通客户端接入)。
  (3)Gitosis普通客户端,产生公钥-私钥对,并拷贝其公钥给Gitosis管理客户端并在Gitosis管理客户端相应的配置具有对应项目的协作权限。
  我相信,大家能看到这个网页的已经搜索了很多网站了,其它网站只牵强的讲了步骤,而没有做出如此详细的解释,导致很多人即使有正确的安装配置步骤也无法正常安装、或者安装正确了也无法确定是否安装正确,因此看了上述描述之后有安装流程的各位应该知道怎么安装了吧!?但即便如此,也仅仅是知其然,虽然清晰的知其然也仅仅是知其然,而为什么Gitosis系统要如此设计?为何所以然?仍然不清楚。因此针对其设计思想以及详细步骤我进一步的为各位做出描述:
  哥当前的情况是在Ubuntu14.04安装并设置gitosis服务器(后面简称“U服务器”),在win10上安装git bash的客户端,两台win10电脑一台作为gitosis管理客户端和Gitosis普通客户端(后面简称“A管理主机”),另外一台仅仅作为gitosis普通客户端(后面简称“B普通主机”),并以在此三台电脑间的安装、操作来进一步准确地解释gitosis如何安装、怎样算安装好了、安装好了怎么使用。
  服务器架设步骤:(服务器:ubuntu 14.04):
  (1)<在U服务器>ubuntu系统是默认安装有python的,但是gitosis是通过Python来安装的,并且依赖于python-setuptools工具,因此先安装python的该工具:
  sudo apt-get install python-setuptools
  (2)<在U服务器>下载并安装gitosis
  新建或者选定一个文件夹 exp: ~/src
  cd ~/scr
  git clone https://github.com/res0nat0r/gitosis.git (连接如果失效自己去Google)
  cd gitosis
  python setup.py install
  (3)<在U服务器>添加用户git
  sudo adduser \
  --system \
  --shell /bin/sh \
  --gecos 'git version control' \
  --group \
  --disabled-password \
  --home /home/git \
  git
  (4)<在A管理主机>由于需要根据Gitosis管理客户端生成的公钥来初始化Gitosis服务器端(A管理主机)上的gitosis(或者说Gitosis服务器端正是因为用“A管理主机”生成的公钥初始化才使得“A管理主机”成为“gitosis管理客户端”),故而需要在A管理主机上生成密钥对。
  if(A管理主机.systemType == windows):
  应该安装git bash,在git bash下:
  ssh-keygen -t rsa   这个windows下的git bash如何安装就别问哥,我们说问题关键
  一路回车产生  id_rsa(私钥)与id_rsa.pub(公钥)文件
  else if(A管理主机.systemType == Linux)://这个其实我没有试过,但是你们可以试一试
  直接在命令行:
  ssh-keygen -t rsa
  一路回车产生  id_rsa(私钥)与id_rsa.pub(公钥)文件
  拷贝id_rsa.pub文件到U服务器的/tmp/文件下   //很多情况下还是相信U盘吧!
  (5)<在U服务器>初始化gitosis
  sudo -H -u git gitosis-init < /tmp/id_rsa.pub
  (6)<在U服务器>修改post-update权限
  sudo chmod 755 /home/git/repositories/gitosis-admin.git/post-update
  很多U服务器上的路径不一定是这个,这种情况下就:find / -name post-update
  相信我,相信路易斯,你可以找到!
  (7)<在A管理主机>虽然在[U服务器]已经以[A管理主机]的公钥完成gitosis初始化之后,由于需要在[A管理主机]对[U服务器]进行配置,故而需要从[U服务器]克隆gitosis-admin.git到[A管理主机],以便做进一步配置:
  git clone git@主机名:gitosis-admin.git    //其中主机名可以为[U服务器]在局域网的IP
  cd gitosis-admin.git
  进入[A管理主机]gitosis-admin.git对[U服务器]的各个工程、各个工程的访问权限进行进一步管理。
  比如,在[A管理主机]上分配John的对foo项目的权限:
  在gitosis-admin.git下存在gitosis.conf(文件)  keydir/(目录)
  从[B主机]上拷贝[B主机]生成的公钥(在B主机上生成公钥的过程参考步骤<4>)到[A管理主机]上,将公钥以[B主机]的名字命名拷贝到[A管理主机]的gitosis-admin.git/keydir/之下,其中[B主机]的名字可以参考生成公钥末尾的主机名:  xxxx@xxxx。
  进一步地配置gitosis.conf,在没有配置gitosis.conf文件的时候,该文件内容为:
  “
  [gitosis]
  [group gitosis-admin]
  members = JewGrunhia@DESKTOP-OAR2S8U
  writable = gitosis-admin
  ”其中group代表[A管理主机]管理的Gitosis服务器上工程的群,该group为项目管理群 gitosis-admin,管理群的成员members仅仅有哥的管理主机名:JewGrunhia@DESKTOP-OAR2S8U,其权限为对gitosis-admin可以进行修改,从这儿可以看出gitosis开发者的设计思想,即gitosis管理者与普通的gitosis用户没有根本的区别,只是具有更大的权限来修改gitosis-admin项目本身而已。
  创建新的项目群后的gitosis.conf文件如下:
  “
  [gitosis]
  [group gitosis-admin]
  members = JewGrunhia@DESKTOP-OAR2S8U
  writable = gitosis-admin
  [group foo]
  writable = foo
  members = JewGrunhia@DESKTOP-OAR2S8U Jew Jewgrunhoa@DESKTOP-782FAJJ JewGrunhoa
  ”
  新的项目名为foo,可以修改的项目为foo项目,可以访问并修改该项目的人员(member)为:
  JewGrunhia@DESKTOP-OAR2S8U、Jewgrunhoa@DESKTOP-782FAJJ
  其中JewGrunhia@DESKTOP-OAR2S8U本身即为Gitosis管理主机,在此加入后亦可以作为Gitosis客户端加入foo项目的协作。Jewgrunhoa@DESKTOP-782FAJJ是哥的另外一台电脑,当然,对应的.pub公钥文件以“JewGrunhoa.pub”的名字拷贝到gitosis-admin.git/keydir/之下。
  待gitosis.conf内容修改和keydir/目录下的公钥添加完成后,在[A管理主机]的gitosis-admin.git下输入命令:
  git add .
  git commit -am "Add foo's Memeber!"
  git push
  从而使得[A管理主机]配置的内容同步到[U服务器],从而在gitosis服务器上foo下添加了JewGrunhia@DESKTOP-OAR2S8U、Jewgrunhoa@DESKTOP-782FAJJ两台主机的访问、修改权限。
  各gitosis客户端可以访问、修改在gitosis服务器上允许其访问的工程,进一步的貌似只有gitosis管理客户端可以在gitosis服务器上创建项目(其它的普通gitosis客户端行不行还没有试),使用JewGrunhia@DESKTOP-OAR2S8U(本次使用中的gitosis管理客户端)添加项目foo,步骤如下:
  mkdir foo
  cd foo
  git init
  touch hellokitty.txt
  git add .
  git commit -am 'first commit'
  git remote add origin git@192.168.0.108:foo.git
  //192.168.0.108为gitosis服务器在局域内的IP地址
  git push origin master
  从而在gitosis服务器上创建foo项目。
  进一步的,在<B主机>即gitosis普通客户端上访问该项目的方法为:
  git clone git@192.168.0.108:foo.git
  cd foo
  修改foo/下的hellokitty.txt文件内容
  git commit -am 'Change hellokitty.txt' && git push
  从而完成对foo.git中hellokitty.txt文件的修改并同步到gitosis服务器。
  剩下的Google一下就非常容易搞定了
  补充:
  有些操作不写真的很容易忘记,为了方便自己回来查看,我来补充一些从gitosis同步最新文件的方式,我常用的方法如下:
  <在git普通客户端、或者可以作为普通客户端的git管理客户端、git服务器>
  git fetch origin master:temp
  git diff temp    //比较master分支和temp分支的不同
  git merge temp    //合并temp分支到master分支
  git branch -d temp    //删除temp
  (⊙o⊙)…,这就可以了,然后你没看错git服务器如果向git管理主机提自己产生的公钥也可以像git普通客户端那样具有项目访问、修改、提交的权限,但是这样就与gitosis开发者的意图南辕北辙了,为啥?人家这样搞为的就是你把gitosis服务器架设在阿里云之类的第三方服务器上,服务器上存储都是加密后的代码,托管平台方根本无法获取你的数据,这保证了开发者的IP安全还可以随时随地的git同步的自己的代码库。我呢,因为服务器是我自己的,所以没关系啦!

运维网声明 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-525284-1-1.html 上篇帖子: Windows使用正则表达式查看端口 下篇帖子: WIN 2012文件服务器迁移(基于WSMT的FSRM)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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