搭建自己的 git 服务器

2019-06-28 16:53:16   最后更新: 2019-07-05 13:37:01   访问数量:129




众所周知 git 是一个免费、开源的版本控制系统,无论是个人开发还是团队合作,使用 git 来进行代码或文档的版本控制都十分方便而高效

有很多平台都提供了 git 版本控制的功能,例如 github、bitbucket 等,但有时,我们不可避免的会在代码或文档中加入敏感且不方便公开的信息,此时使用这些公开的云端版本控制平台就会有很大风险,同时,受国内网络质量影响,github 等平台经常遇到无法打开的情况,即便是正常情况下,github 的下载速度也总是不尽如人意的

综上,如果我们有一个自己的代码版本控制服务器,无论对于个人的代码、文档管理还是对于团队合作上来说,无疑都是非常有价值的

对于团队开发来说,搭建一套 gitlab 或 bitbucket 是非常方便的,但是,如果是个人开发者,或是三到五个人合作的项目,搭建一个 gitlab 或是付费使用本地 bitbucket,都显得过于奢侈

是否有办法在一台配置很低的个人服务器上搭建一个属于自己的 git 服务器呢?当然有,本文我们就来详细介绍

然而,此时你可能又有问题,我并没有一台属于自己的服务器,但是我强烈的希望搭建一个只属于自己的 git 服务,这可以做得到吗?别急,一样是可以做到的,本文后续内容将详细为你解答

 

 

搭建 git 服务器其实没什么难的,因为 git 的设计理念中,远程仓库与本地仓库实际上没有什么不同,他只是一个 7*24 小时开机并可以使所有人可以交换修改的中心服务器罢了,所以本质上,搭建一个远程的 git 服务器与本地常规使用 git 并没有区别

 

准备步骤

安装 git

首先我们需要安装 git:

  • 在 ubuntu 系统中,你可以执行:apt install git
  • 在 centos 系统中,你可以执行:yum install git
  • 你也可以通过官网下载源码包编译安装

 

创建 git 用户

创建 git 用户并不是必须的,但我们最好使用专门的用户来统一管理所有的公钥(/home/git/.ssh/authorized_keys)

执行:

adduser git

 

禁用 git 用户登录

出于安全性考虑,通常我们会禁用掉 git 用的 shell 登录,这可以通过编辑 /etc/passwd 文件来实现

将 git 用户所在行修改为:

git:x:1001:1001:,,,:/home/git

 

每当我们需要使用 git 时,我们可以让 root 用户通过 su 命令切换为 git 用户,但任何人都不可以通过 ssh 登录 git 用户

 

创建仓库并使用

创建仓库

执行下面的命令,就可以创建一个仓库 sample.git,通常我们会在 git 用户的 home 目录中执行:

git init --bare sample.git

 

此时我们可以看到一个目录 sample.git

 

使用远程仓库

如果在同一个机器上,我们可以直接通过全路径来使用:

git clone /home/git/sample.git

 

如果是外网通过网络访问,那么可以通过网络地址来访问:

git clone git@hostname:sample.git

 

hostname 就是你的网络地址

 

那么问题来了,也许对于大多数人来说,并没有一个服务器来供我们搭建只属于自己的 git 服务器,那是不是就没办法搭建一个随时随地都可用且只属于个人的 git 服务了么?答案当然不是

随着网络时代的到来,市面上有着很多值得依赖的同步网盘服务,他们会自动进行同步,以使云上的所有文件与本地文件保持实时同步,这里就不列举了,如果有跨平台需求,那么可以使用微软的 onedrive

 

 

上图展示了通过云盘与 git 搭建远程 git 服务的架构,由于这种模式通常只是一个人自己使用,因此不需要考虑同步到云盘发生冲突的问题

实际搭建方法也很简单,我们选取一个同步目录(例如:C:/Users/techlog/OneDrive/Workspace/git),在这个目录中执行:

git init --bare sample.git

 

如果要使用仓库中的数据,只需要执行:

git clone C:/Users/techlog/OneDrive/Workspace/git/sample.git

 

这样我们就创建了一个远程 git 仓库,同步盘会自动同步该目录的任何变更,当我们使用其他设备时,只需要先登录同步盘,然后将具体的路径作为远程 url 即可,使用起来同样非常方便和易用

 

为什么只在同步云上同步远程仓库而不是直接同步代码

有一些人在同步云盘中保存代码,但这并不是一个好的做法,因为代码在开发过程中变更频率过高,这会导致你的带宽总是被同步盘占用

更进一步的,代码在编译、执行等阶段会产生大量临时文件,这回让你的同步盘瞬间检测到并开始上传,你的带宽瞬间就会被打满,而代码执行后,所有临时文件被删除,同步盘再次进行同步,这又一次成为了网络环境的灾难

但远程仓库只有你向其提交代码后才会发生变化,这无疑可以避免上面所说的这些问题

 

欢迎关注微信公众号,以技术为主,涉及历史、人文等多领域的学习与感悟,每周三到七篇推文,全部原创,只有干货没有鸡汤

 

 






github      技术分享      git      remote      bitbucket      onedrive     


京ICP备15018585号