文章目录

  • 前言
  • 协议
    • 本地协议
      • 优点
      • 缺点
    • HTTP协议
      • 智能HTTP协议
      • 非智能HTTP协议
      • 优点
      • 缺点
    • SSH协议
      • 优点
      • 缺点
    • Git协议
      • 优点
      • 缺点
  • 在服务器上搭建Git
    • 将裸仓库防止在服务器上
    • 小型团队的配置
  • 生成个人的SSH公钥
  • 设置Git服务器
  • 智能HTTP服务
  • GitLab
  • 第三方托管选择

前言

要使用Git与其他人协作,比如拥有一个远程Git仓库。从理论上讲,你可以直接将你的更改推送到其他人的仓库,或是从他人的仓库拉取数据。但是这种做法是不推荐的,因为如果你不小心,就会很容易搞乱别人当前的工作。而且,你希望你的协作者在你自己的计算机离线的状态下也能访问Git仓库,这时一个拥有稳定的公共仓库就显得格外重要了。所以与他人协作推荐的方法是,建立一个你们可以共同访问的中间仓库,大家都向该仓库推送数据,也都从中拉取数据。

运行一个Git服务器很简单。首先,你要选择服务器使用何种通信协议,下面将分别介绍Git常用支持的协议

协议

Git可以使用4中主要的协议来传输数据:本地协议HTTP协议SSH协议Git协议。现在我们来讨论这些协议是什么,以及各自的使用场景和不适用场景。

本地协议

Git最基本的传输协议就是本地协议。在这种协议中,远程仓库就是磁盘上的另一个目录而已。当团队成员都就可以访问一个共享的文件系统(例如挂载的网络文件系统),或是在较少见的情况下,每位成员都登录到同一台计算机时,往往就会使用本地协议。不推荐后一种做法,因为所有的代码仓库都只保存在同一台计算机上,这样会大大增加灾难性数据丢失的可能性。

如果你挂在了共享文件系统,就可以从基于本地文件的Git仓库中克隆、推送或拉取数据。要克隆这种仓库或是将其作为已有项目的远程仓库,只需要把仓库的路径当成URL使用即可。例如,要克隆一个本地仓库,只需要执行如下命令:

git clone /srv/git/project.git

或者也可以执行如下命令:

git clone file://srv/git/project.git

如果你显示的指定使用 file://作为URL的开头,Git的处理方式会稍有不同。具体地说,如果你只是指定文件系统路径,Git会尝试直接复制文件,或使用硬链接。但如果你使用的是file://,Git会启动通常用来在网络上传输数据的进程,这种方式的传输速率要比前者低很多。使用file://前缀的主要原因是希望去除仓库中外部引用或多于对象,以得到干净的仓库副本。这种情况通常出现在将数据从其他版本控制系统导入Git之后。

要把本地仓库添加到已有的Git项目中,可以执行一下命令

git remote add local_proj /srv/git/project.git

这样就可以像通过网络一样对该远程仓库拉取或推送数据了。

优点

基于文件的仓库简单易用,可以使用已有的文件权限和网络访问权限。

缺点

本地协议的缺点是共享文件系统不易设置,很难让本地网络之外的用户访问到。如果你在家使用自己的笔记本电脑推送数据,就的挂载远程的磁盘,相较于基于网络的访问,这样做不但麻烦,而且速度也慢。

本地协议不能保护仓库免遭意外损坏。每个用户都对“远程”目录拥有完全的shell访问权限,这样一来就无法阻止用户意外改变或删除Git内部文件。

HTTP协议

Git有两种不同的HTTP通信模式。一种是非智能HTTP协议非常简单,通常是只读形式。另一种是智能HTTP协议,它可以使用类似SSH协议的方式智能协商数据传输。

智能HTTP协议

智能HTTP协议与SSH或Git协议的运作方式非常相似,但它使用的是标准的HTTP/S端口通信,你可以使用HTTP协议的各种身份验证机制。这意味着它比SSH等协议更加容易使用,因为你可以使用“用户名/密码”的基本验证方式、而不需要配置SSH密钥。

非智能HTTP协议

如果服务器端没有“智能HTTP协议”服务,Git客户端会尝试降级并使用最简单的“非智能HTTP协议”。这种协议,服务器把裸仓库作为普通文件传输给用户。这种协议的优点在于易于架设和配置。基本上你要做的就是把裸仓库放在HTTP服务器根目录,然后设置一个特定的post-update钩子函数就可以了。这样设置之后,任何能够访问Web服务器的人都可以克隆仓库。

你可以执行以下命令

这样其他人就可以通过git clone命令克隆仓库了。

优点

集中分析智能HTTP。

对于最终用户来说,使用同一个URL就可以推送或拉取数据,仅在需要身份验证时服务器才会提示用户输入身份信息,这是十分方便的。

使用HTTP/S协议的另一个优点在于其应用非常的广泛,集团防火墙乙肝都会允许来自HTTP/S协议端口的流量。

缺点

在某些服务器上,基于HTTP/S的Git服务回避使用SSH的Git服务更难搭建。除此之外,就Git而言,其他协议与“智能HTTP协议”相比并不占优势。

后面会介绍如何设置安全的HTTP密码缓存。

SSH协议

在自建Git服务器的情况下,SSH是常见的传输协议之一。这是因为大多数服务器已经默认设置了SSH访问,而且对于那些尚未设置SSH访问的服务器来说,设置起来也很简单。SSH也支持身份验证,而且它几乎无处不在,很容易设置和使用。

通过SSH克隆Git仓库,可以像下面这样指定以ssh://开头的URL:

git clone ssh://user@server/project.git

或者你也可以使用类似SCP协议的简短语法:

git clone user@server:project.git

你也可以不使用用户名,这样Git会默认使用当前登录的用户名。

优点

使用SSH协议的优点有很多。首先,SSH易于设置并且应用广泛,大多数网络管理员都拥有相关的经验,很多操作系统发行版也默认设置了SSH或是包含相关的管理工具。其次,基于SSH的访问能够保证安全,所有数据传输都是加密的,并且经过了身份验证。最后,就像HTTP/S协议,Git协议和本地协议一样,SSH协议效率高,数据在传输之前会被尽可能压缩。

缺点

SSH的缺点是不能实现对仓库的匿名访问。要想通过SSH访问Git仓库,用户必须首先有服务器的SSH访问权限,即使用户只需要仓库的只读访问权限也是如此。正因如此,一些开源项目并不倾向于使用SSH访问。如果只在公司内网使用SSH协议,也许对你来说就够用了。

Git协议

他是Git自带的一种守护进程,专门监听9418端口,提供类似于SSH协议的服务,但不提供任何的身份验证方式。要允许某个仓库通过Git协议提供服务,必须要在仓库中创建git-daemon-export-ok文件,否则,Git协议的守护进程不会提供该仓库的服务。通过这种方式提供的服务并没有任何安全机制,要么所有人都可以克隆仓库,要么所有人都不能克隆。、

优点

一般来说,在所有Git可以使用的网络传输中,Git协议是最快的。对于大访问量的公共项目,或是不需要用户身份验证就可以只读访问的大型项目,可能需要启用Git守护进程来提供Git协议服务。Git协议使用与SSH一致的数据传输机制,但没有加密传输和用户身份验证所带来的额外开销。

缺点

缺少用户验证机制,所以一般不会把Git协议作为项目的唯一访问方式。通常会搭配SSH或HTTPS协议,供少数人有推送(写)权限的开发人员使用,其他人则通过git://以只读的方式访问项目。其次,Git协议也难以配置,必须启用自己的守护进程,也需要防火墙允许9418这个端口。

在服务器上搭建Git

基于Linux的服务器进行演示

使用git clone --bare xxx xxx.git命令从已有的仓库中导出一个新的裸仓库。(裸仓库目录名结尾一般是.git)。

以上命令等同于cp -Rf xxx/.git xxx.git

将裸仓库防止在服务器上

这里假设你已经设置好了一个名为git.example.com并拥有SSH访问权限的服务器。你希望把所有Git仓库都放在/srv/git目录下。这是你可以把裸仓库复制到该目录,以此创建新的仓库

scp -r xxx.git user@git.example.com:/srv/git

如果用户通过SSH登录服务器时拥有对/srv/git/xxx.git的写权限,就可以自动获得该仓库推送数据的权限。

如果执行git init命令时添加了–shared参数,Git就会自动为用户组赋予仓库的写权限。

ssh user@git.example.com
cd /srv/git/xxx.git
git init --bare --shared

值得一提的是,上述操作过程就是运行一台Git服务器所需的全部操作步骤,同时该服务器也可以支持多人协作。只需要在服务器上添加拥有SSH权限的账号,然后把裸仓库放在所有用户都能读写的某个目录下就可以了。

小型团队的配置

要为团队所有成员提供访问权限,有几种可选的方式。

第一种是为每个人建立服务器账号,这种方式很直接,但是操作起来会有点繁琐,因为要为每个用户执行一次adduser并且设置每个人的临时密码。

第二种方式是在服务器上创建单个git用户,要求全部拥有写权限的用户把SSH公钥发送给你,你再把他们的公钥添加到新创建的git用户的~/.ssh/authorizied_keys文件中。

另一种方式就是把你的SSH服务器身份验证方式设置为使用LDAP服务器或者其他类似的集中式身份验证服务。只要每个Git用户都能通过shell访问服务器,不管使用何种SSH身份验证机制都可以。

生成个人的SSH公钥

查看自己的家目录,是否有.ssh目录,如果没有则执行入下命令进行生成

第一个表示你创建ssh秘钥的存放位置,后面是询问你口令(如果你不想每次使用密钥时都键入密码,则可以留空)

找到如下两个文件

然后把这个公钥的内容复制下来发送给管理员就可以了。

设置Git服务器

创建git用户并为其创建.ssh目录

sudo adduser git
su git
cd
mkdir .ssh && chmod 700 .ssh
touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys

只需要把公钥追加到authorized_keys文件的尾部,如下所示

cat /tmp/is_rsa.join.pub >> ~/.ssh/authorized_keys
cat /tmp/is_rsa.j0sie.pub >> ~/.ssh/authorized_keys
cat /tmp/is_rsa.jessica.pub >> ~/.ssh/authorized_keys

智能HTTP服务

配置这种服务只需要在服务器上启用Git自带的CGI脚本git-http-backend。该CGI脚本会读取基于HTTP的git fetch或是git push请求的头部信息和请求的URL路径,并检查客户端是否可以通过HTTP通信。如果CGI脚本的检测到客户端支持智能HTTP,它就会使用智能协议与客户端进行通信;否则它会降级到非智能协议。

GitLab

Gitlab是使用数据库的Web应用,所以它的安装会比其他方案更加复杂。好在整个安装过程都有完备的文档和支持

第三方托管选择

如果你不想自己动手设置Git服务器,那么还可以选择将Git项目托管到专门的第三方托管网站上。这样做的优势不止一点:托管网站易于设置、上手简单,而且用不着操心服务器维护和监控。即便是设置并运行了自己的内部服务器,你可能仍需要为开源代码使用公开的托管网站,这样更容易获得开源社区的关注和帮助。

如今,可以使用的托管服务数量繁多,各有优势。可以查看Git wiki的GitHosting页面来获得最新的托管服务列表。

会在后面详细讲解GitHub,GitHub是最大的Git托管网站,你也许少不了要同托管上的项目打交道,但如果你不打算设置自己的Git服务器,可供使用的其他选择还有很多。

精通Git(四)——Git服务器相关推荐

  1. 老司机带你玩转git (四) git的协同合作

    大家都知道,git被戏称为全球最大的同性的交友平台.在这里,不仅能完成各种项目的学习,更能完成各种姿势的学习(呜呜呜呜呜~小火车经过啦).那么为了更好的开车(学习).我想我们有必要学习pull req ...

  2. Git使用 从入门到入土 收藏吃灰系列(四) Git工作原理

    文章目录 一.前言 一.Git基本理论(核心) 1.1工作区 1.2工作流程 一.前言 参考安装Git 详细安装教程 参考视频B站 Git最新教程通俗易懂,这个有点长,感觉讲的精华不多 参考视频『Gi ...

  3. git搭建局域网服务器

    安装git: sudo apt-get update sudo apt-get install git-core openssh-server 增加 developers 组以及创建保存项目的仓库: ...

  4. Git之深入解析如何运行自己的Git仓库托管服务器

    一.协议 了解了 Git 的基础使用流程和 Git 的分支管理之后,我们应该已经有办法使用 Git 来完成日常的工作.然而,为了使用 Git 协作功能,还需要有远程的 Git 仓库.尽管在技术上可以从 ...

  5. git线上服务器_pm2实现git仓库代码一键配置部署到线上服务器

    第一步 先实现 ssh的免密登录远程服务器: 第二步 初始化项目, 并把项目部署到git仓库 下面用几个最简单的项目做演示, 项目目录下面就这个三个文件 把项目部署到git仓库,记住git仓库地址 比 ...

  6. Git -- 搭建git服务器

    在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想 ...

  7. git ssh配置文件 服务器_Linux 环境 搭建Git 服务器,并且修改SSH端口使用

    1.环境配置说明 服务器 CentOS 7 + git(git version 1.8.3.1) 客户端 Windows10 + SourceTree 2.安装 Git 服务器端安装: sudo yu ...

  8. [Git] Git整理(四) git rebase 的使用

    概述 在之前总结分支相关内容时说道,合并两个分支的提交可以使用git merge,然而除了这种方式之外,还有一种方式就是使用git rebase,这两种方式的最终结果都相同,但是合并历史却不同:git ...

  9. git: 四种git协议 (本地协议、HTTP 协议、SSH协议、 Git 协议)

    转载自 服务器上的 Git - 协议 : 到目前为止,你应该已经有办法使用 Git 来完成日常工作. 然而,为了使用 Git 协作功能,你还需要有远程的 Git 仓库. 尽管在技术上你可以从个人仓库进 ...

  10. 本地使用git 、 git服务器应用案例

    Top NSD Devops DAY04 案例1:配置git 案例2:git本地操作 案例3:使用自建gitlab服务器 1 案例1:配置git 1.1 问题 安装git版本控制软件 设置用户信息,如 ...

最新文章

  1. DSP与CEVA芯片
  2. SharePoint 2010: 设计BCS工作流
  3. the content of the adapter has changed but listview did not
  4. [转载] 【数学问题】利用python求解表达式
  5. java取multipart_spring的multipartResolver和java后端获取的MultipartHttpServletRequest方法对比...
  6. poj 2231 Moo Volume 暴力一定超时啊
  7. Doc命令行执行php中文乱码问题
  8. 使用at任务定点执行
  9. PPT幻灯中的文本格式及颜色修改方法注意事项
  10. 签证管理系统 签证软件
  11. 苹果手机怎么验证app_【图文】苹果手机如何下载安装APP
  12. “云适配”获1亿元B+轮融资,盯上了大企业的移动化需求
  13. python实现md5加密和解密_Python中的加密和解密
  14. 如何在m1芯片上运行android模拟器
  15. Flink反压如何排查
  16. 从零开始的LC刷题(74): Reverse Vowels of a String
  17. 人工智能数学基础:利用导数判断函数单调性、凹凸性、极值、最值和描绘函数图形
  18. java面试一些问题汇总
  19. 2020腾讯后台开发暑期实习生面试一面分享(天美工作室群)
  20. Dos下进入指定目录

热门文章

  1. [青创智通] 测量数据采集分析平台上新!
  2. conda 安装 jupyter lab
  3. Queue和LinkLink的关系
  4. .misc blind-injection
  5. 全网最火的钉子绕线图制作教程,情侣礼物!
  6. PS如何降低选取内图像的亮度?
  7. C# WPF界面设计参考 工控机上位机界面 美观炫酷的现代化风格界面设计实际案例分享 界面设计代码
  8. 二值分类模型的评价指标
  9. 新浪微博API Oauth2.0 认证。。。
  10. 使用回归模型预测星巴克消费者的购物习惯