跨windowsLinux的Gitosis运用概念全解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨windowsLinux的Gitosis运用概念全解相关的知识,希望对你有一定的参考价值。
开始用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 \
--disable-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 [email protected]主机名: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主机]的名字可以参考生成公钥末尾的主机名: [email protected]。
进一步地配置gitosis.conf,在没有配置gitosis.conf文件的时候,该文件内容为:
“
[gitosis]
[group gitosis-admin]
members = [email protected]
writable = gitosis-admin
”其中group代表[A管理主机]管理的Gitosis服务器上工程的群,该group为项目管理群 gitosis-admin,管理群的成员members仅仅有哥的管理主机名:[email protected],其权限为对gitosis-admin可以进行修改,从这儿可以看出gitosis开发者的设计思想,即gitosis管理者与普通的gitosis用户没有根本的区别,只是具有更大的权限来修改gitosis-admin项目本身而已。
创建新的项目群后的gitosis.conf文件如下:
“
[gitosis]
[group gitosis-admin]
members = [email protected]
writable = gitosis-admin
[group foo]
writable = foo
members = [email protected] Jew [email protected] JewGrunhoa
”
新的项目名为foo,可以修改的项目为foo项目,可以访问并修改该项目的人员(member)为:
[email protected]、[email protected]
其中[email protected]本身即为Gitosis管理主机,在此加入后亦可以作为Gitosis客户端加入foo项目的协作。[email protected]是哥的另外一台电脑,当然,对应的.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下添加了[email protected]、[email protected]两台主机的访问、修改权限。
各gitosis客户端可以访问、修改在gitosis服务器上允许其访问的工程,进一步的貌似只有gitosis管理客户端可以在gitosis服务器上创建项目(其它的普通gitosis客户端行不行还没有试),使用[email protected](本次使用中的gitosis管理客户端)添加项目foo,步骤如下:
mkdir foo
cd foo
git init
touch hellokitty.txt
git add .
git commit -am ‘first commit‘
git remote add origin [email protected]:foo.git
//192.168.0.108为gitosis服务器在局域内的IP地址
git push origin master
从而在gitosis服务器上创建foo项目。
进一步的,在<B主机>即gitosis普通客户端上访问该项目的方法为:
git clone [email protected]:foo.git
cd foo
修改foo/下的hellokitty.txt文件内容
git commit -am ‘Change hellokitty.txt‘ && git push
从而完成对foo.git中hellokitty.txt文件的修改并同步到gitosis服务器。
剩下的Google一下就非常容易搞定了
以上是关于跨windowsLinux的Gitosis运用概念全解的主要内容,如果未能解决你的问题,请参考以下文章