众所周知 git 是一个免费、开源的版本控制系统,无论是个人开发还是团队合作,使用 git 来进行代码或文档的版本控制都十分方便而高效。 有很多平台都提供了 git 版本控制的功能,例如 github、bitbucket 等,但有时,我们不可避免的会在代码或文档中加入敏感且不方便公开的信息,此时使用这些公开的云端版本控制平台就会有很大风险,同时,受国内网络质量影响,github 等平台经常遇到无法打开的情况,即便是正常情况下,github 的下载速度也总是不尽如人意的。 综上,如果我们有一个自己的代码版本控制服务器,无论对于个人的代码、文档管理还是对于团队合作上来说,无疑都是非常有价值的。 对于团队开发来说,搭建一套 gitlab 或 bitbucket 是非常方便的,但是,如果是个人开发者,或是三到五个人合作的项目,搭建一个 gitlab 或是付费使用本地 bitbucket,都显得过于奢侈。 是否有办法在一台配置很低的个人服务器上搭建一个属于自己的 git 服务器呢?当然有,本文我们就来详细介绍。 然而,此时你可能又有问题,我并没有一台属于自己的服务器,但是我强烈的希望搭建一个只属于自己的 git 服务,这可以做得到吗?别急,一样是可以做到的,本文后续内容将详细为你解答。
搭建 git 服务器其实没什么难的,因为 git 的设计理念中,远程仓库与本地仓库实际上没有什么不同,他只是一个 7*24 小时开机并可以使所有人可以交换修改的中心服务器罢了,所以本质上,搭建一个远程的 git 服务器与本地常规使用 git 并没有区别。
首先我们需要安装 git:
创建 git 用户并不是必须的,但我们最好使用专门的用户来统一管理所有的公钥(/home/git/.ssh/authorized_keys) 执行:
adduser 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 即可,使用起来同样非常方便和易用。