Git原理及远程仓库用户管理
一:什么是git
git一个优秀的分布式管理版本管理工具。
二:git和svn的管理差异
svn属于集中式版本管理控制系统,系统中保存了所有文件的修订版本,而协同工作人员通过连接svn服务器,提取出最新的文件,获取提交更新。
下图就是标准的集中式版本控制工具管理方式:
集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限(做过svn服务端管理的人员都知道)。这种用户管理的便利性,git是不具备的。
但是相较于其优点而言,集中式版本控制工具缺点很明显:
- 服务器单点故障
- 容错性差
SVN和Git在管理变化的文件上有所不同
Git 和其他版本控制系统的主要差别在于,Git 只关心文件数据的整体是否发生变化,而大多数其他系统则只关心文件内容的具体差异。这类系统(CVS,Subversion,Perforce,Bazaar等等)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容,请看图 1.4。
Git 并不保存这些前后变化的差异数据。实际上,Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。
为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一连接。Git 的工作方式就像图 1.5 所示。
三:git的优势
Git 不用跑到外面的服务器上去取数据回来,而直接从本地数据库读取后展示给你看(因为git具有远程仓库的克隆镜像local reporsitory)。所以任何时候你都可以马上翻阅,无需等待。
如果想要看当前版本的文件和一个月前的版本之间有何差异,Git 会取出一个月前的快照和当前文件作一次差异运算,而不用请求远程服务器来做这件事,或是把老版本的文件拉到本地来作比较。
Git也在数据的完整性上做了很大改进,具体的改进这里不做过多阐述。
四:git管理文件的三种状态
对于任何一个文件,在 Git 内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged)。已提交表示该文件已经被安全地保存在本地数据库中了;已修改表示修改了某个文件,但还没有提交保存;已暂存表示把已修改的文件放在下次提交时要保存的清单中。
由此我们看到 Git 管理项目时,文件流转的三个工作区域:Git 的本地数据目录,工作目录以及暂存区域。
- 如果是 git 目录中保存着的特定版本文件,就属于已提交状态;
- 如果作了修改并已放入暂存区域,就属于已暂存状态;
- 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。
- push将local repository的commit状态的文件提交到远程的仓库中,此时需要linux的用户才能提交
五:管理远程仓库用户
Git不像Svn一样,svn的服务器端是一个服务应用,在使用时必须启动svn服务,并占用指定的服务器端口,如果服务停止,所有客户端的TortoiesSVN客户端程序无法连接。然而git没有服务的概念,其通过克隆远程仓库都本地,当本地文件发生修改时通过ssh将修改上传到对应的远程仓储中,每一个版本git都记录的是仓库的整体,可以简单的这样立即,当本地仓库push一个版本到远程仓库时,Git将版本另存了一份,上一个版本保存不动,并将版本变化的元数据信息记录到git的数据中(真正的管理比这个复杂的多)。
前面我们已经提到,用户在自己的本地电脑中通过git管理文件,有三种状态:已提交(committed),已修改(modified)和已暂存(staged),当文件从staged区commit到local repository需要用户名及用户邮箱信息,用户必须要事先创建好,本地创建用户可以使用git提供的bash命令创建,也可以使用TortoiesGit进行创建,用户分为全局用户和系统用户,
如上创建的是用户本地的用户,git在push代码到远程仓库的时候需要ssh用户名和密码,下面介绍如何管理远程仓储的服务端用户:
1、初始化仓库
mkdir /home/git # 在自己指定的文件夹下
git init --bare sample.git
2、修改权限
chmod -R 777 sample.git
3、创建用户及用户组
useradd gituser1
passwd gituser1 # 设置密码
useradd gituser2
passwd gituser2 # 设置密码
*************** 可选 ********************
禁用git用户的shell登录,防止用户通过Git用户登录服务器。编辑/etc/路径下的passwd文件,将文件后边的bash改成git-shell,
即将
gituser1:x:1006:1008::/home/gituser1:/bin/bash
改成
gituser1:x:1006:1008::/home/gituser1:/bin/git-shell
***********************************
groupadd gitgroup #创建git用户组
#将用户添加到用户组
usermod -G gitgroup gituser1
usermod -G gitgroup gituser2
cat /etc/group # 查看用户组及用户是否成功配置
4、修改git仓库的用户组
chgrp -R gitgroup /home/git/sample.git/
或
chown -R git:gitgroup /home/git/sample.git/
更详细的管理,请查阅这篇文章,讲得很好
https://www.jianshu.com/p/a0eb79fa5b8d