Git服务器搭建

一、Git的简介与优缺点

什么是git?php

  Git是目前世界使用最普遍的分布式版本控制系统,它是由林纳斯·托瓦兹(Linus Torvalds)创做,最初的目的是为了更好地管理Linux内核开发而设计的。html

与svn对比优缺点?linux

  一、与svn对比最核心区别就是Git是分布式,而svn是非分布式。这主要表如今使用Git时每个开发人员电脑本地上存在一个Local Repository,这个Local Repository包含着远程库中的全部文件,所以,即便在没网的时候也能够进行commit提交,查看历史版本记录,建立项目分支等操做,等网络再次链接上Push到Server端。git

  二、Git把内容按元数据方式存储,而SVN是按文件方式存储。表现为.git文件与.svn文件大小区别很大算法

  三、SVN存在一个自增的全局版本号;而Git每次提交,经过对文件的内容或目录的结构计算出一个SHA-1 哈希值,获得一个40位的十六进制字符串,以此来做为版本号。shell

  四、Git的内容的完整性要优于SVN:Git的内容存储使用的是SHA-1哈希算法。Linux kernel开创者和Git的开发者——Linus说,Git使用了SHA-1并不是是为了安全性,而是为了数据的完整性;它能够保证,在不少年后,你从新checkout某个commit时,必定是它多年前的当时的状态,彻底一摸同样,彻底值得信任。vim

  五、Git下载下来后,在OffLine状态下能够看到全部的Log,SVN不能够。安全

  六、SVN必须先Update才能Commit,忘记合并时就会出现一些错误,git仍是比较少的出现这种状况。bash

  七、克隆一个新项目,Git只需克隆master分支;svn则须要复制全部的版本。Git省时。服务器

  八、 版本库(repository):SVN只能有一个指定中央版本库。当这个中央版本库有问题时,全部工做成员都一块儿瘫痪直到版本库维修完毕或者新的版本库设立完成。而 Git能够有无限个版本库。或者,更正确的说法,每个Git都是一个版本库,区别是它们是否拥有活跃目录(Git Working Tree)。若是主要版本库(例如:置於GitHub的版本库)发生了什麼事,工做成员仍然能够在本身的本地版本库(local repository)提交,等待主要版本库恢复便可。工做成员也能够提交到其余的版本库!

  九、SVN建立分支会影响其余人;Git则能够在本地建立任意分支,只要我不合并及提交到主要版本库,则不会影响任何人。
  十、提交(Commit)在SVN,当你提交你的完成品时,它将直接记录到中央版本库。当你发现你的完成品存在严重问题时,你已经没法阻止事情的发生了。若是网路中断,你根本没办法提交!而Git的提交彻底属於本地版本库的活动。而你只需“推”(git push)到主要版本库便可。Git的“推”实际上是在执行“同步”(Sync)。
  十一、模式上会比SVN相对较复杂
 

 二、Git的安装

  安装环境:Linux  CentOS7

  我直接使用yum安装,直接在linux中执行下面两行命令

 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel    //安装依赖
 yum install git        //安装Git 也能够直接运行yum intall git  yum会自动安装软件依赖

  这样子Git环境就安装好了,接下老就是权限设置,哪些人能够访问这个Git服务器呢?

 

三、用户访问设置

  3.一、秘钥登录类型

   一、首先建立一个用户组以及用户

1 groupadd git    //建立git用户组
2 useradd git -g git   //建立git用户,用来运行git服务

  二、收集所需登录用户的公钥,并将公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。  

  Linux中的公钥在每一个用户的home目录下(/home/用户/.ssh),没有则使用命令进行建立:ssh-keygen -t rsa

  Windowns中的公钥建立:

  使用git,打开Git Bash。
  1. 安装git,从程序目录打开 "Git Bash" 
  2. 键入命令:ssh-keygen -t rsa -C "suifengin412@gmail.com"   //红色字体无关紧要
  3. 指定文件生成的目录
  4. 在指定的目录下产生两个文件:id_rsa和id_rsa.pub

  进入git家目录,将收集的公钥(id_rsa.pub里面的内容),添加到authorized_keys文件中(一行一个)。

  没有authorized_keys文件则建立:

 cd /home/git/
 mkdir .ssh
 chmod 700 .ssh vim .ssh/authorized_keys chmod 600 .ssh/authorized_keys

  注意:.ssh 目录必须是700权限、authorized_keys文件必须是600权限

  3.二、密码登录类型

  一、建立登录用户并添加到git用户组中

useradd -M git1        //-M 表示不建立家目录
useradd -M git2    
passwd git1  //设置密码
passwd git2
usermod -G git git1   //将新建的两个用户添加到git组中                 
usermod -G git git2 

  二、禁止新建立的用户ssh登录linux服务器

which git-shell       //查看git-shell所在路径 (个人是:/usr/bin/git-shell)
vim /etc/passwd   //将用户名称:x:1000:1000::/home/用户名称:/bin/bash  将/bin/bash替换为git-shell所在路径

注意:

  建立用户的时候加-M,主要目的是不在home目录下生成该用户的拥有读写权限的家目录。这是由于咱们建立的这些用户是用于git服务上面,并不想给用户除了git访问之外其余的权限;同理,需禁止用户经过ssh登录linux服务器。 

 

四、初始化git服务器

  咱们就选取git目录做为git的仓库

chmod g-w /home/git    //这个是必要的
cd /home/git    //进入git家目录
git init --bare test.git    //建立一个空仓库,服务器上的Git仓库一般都以.git结尾
chown -R git:git test.git/    //设置权限,由于我使用root来建立这个空仓库,所以须要变相应的权限设置
chmod  -R 775 test.git/     //设置所属组的全部权限,不然秘钥类型push不成功

  注意:变动文件的全部者以及组权限很是重要,切记。

五、克隆仓库

git clone git@git_ip:/home/gitrepo/runoob.git   //git_ip为Git所在服务器ip ,须要将其修改成你本身的 Git 服务ip。

 

六、参考资料

 1. 《话说Svn与Git的区别(之后别再问我了)》

 

(以上是本身的一些看法,如有不足或者错误的地方请各位指出)

 做者:那一叶随风   http://www.cnblogs.com/phpstudy2015-6/

 原文地址:http://www.javashuo.com/article/p-plvpxvpp-p.html

 声明:本博客文章为原创,只表明本人在工做学习中某一时间内总结的观点或结论。转载时请在文章页面明显位置给出原文连接

相关文章
相关标签/搜索