一般,我们编写项目,都会保留工程项目源代码。在“上个世纪”,一般使用U盘、硬盘等设备,进行备份,而现在,一般使用GitHub、Gitee等Git软件项目版本管理器。方便备份、管理工程版本。
如果是个人项目,或者是小型团队项目,不希望放到GitHub、Gitee这样的公共仓库包管理而让别人看到你的“工程空间“,那么你可以试试自己搭建Git服务器。本次教程教程,就教大家怎么在Lighthouse(轻量应用服务器)上搭建Git服务器
为什么使用Lighthouse
使用Lighthouse主要的原因是:经济
同等情况下,Lighthouse相比CVM,主要有以下优点:
- 价格更低
- 配置更加方便
所以,Lighthouse十分适用于个人开发者和小型团队。我们团队就是使用Lighthouse搭建Git同步日常项目。
而作为一名个人开发者,我推荐使用Linux系统作为服务器的操作系统。本文安装Git和项目初始化,使用的服务器也是腾讯云轻量应用服务器Debian 10发行版本Linux为主(同时会指点CentOS发行版本Linux的对应操作)。
安装Git
话不多说,我们直接开始。首先是连接服务器。方法很多,不再赘述,推荐使用的工具:
- Powershell:Windows10(或Windows10以后的Windows用户)可以使用系统自带的Powershell进行远程SSH登录服务器。
- Terminal:Linux和macOS用户可以使用系统自带的Terminal进行远程SSH登录服务器。
我这里已经使用Terminal连接服务器了:
这个时候,我们使用软件包管理器安装Git:
# Debian/Ubuntu sudo apt-get install git # CentOS sudo yum install git
你也可以使用Git源码,用gcc
编译安装,但是……我一般是直接用软件包管理器安装Git。
安装之后,在远程SSH内输入git --version
即可看到效果:
配置Git
创建Git用户
一般来讲,我们会创建一个公共用户git
用于管理仓库。
首先,我们用命令查看,之前是否一不小心创建过git
用户:
cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F":" '{ print $1"|"$3"|"$4 }'|more
可以看到,腾讯云轻量应用服务器默认没有git用户。所以,我们创建:
sudo adduser git
按提示设置密码和信息即可创建完成:
之后,我们到/home
目录下,即可看到新添加的git用户:
到此,配置Git已经完成。接下来,我们看看具体如何使用。
仓库初始化
我们搭建好一个Git服务器后,需要初始化仓库;往往使用git init或git init –bare来初始化项目。但是,这两个的区别是什么呢?简单地说:
- git init:用于本地项目初始化
- git init –bare:用于Git服务器项目初始化
给大家稍微讲解一下:
Git init
通常,我们初始化本地仓库时,使用git init:建立一个标准的Git仓库:
这样的仓库初始化后,其项目目录为工作空间,其下的.git目录是版本控制器。
Git init –bare
通常,我们初始化远程服务器仓库时,使用git init –bare:建立一个“裸”的Git仓库。这样的仓库初始化后,其项目目录下就是标准仓库.git目录里的内容,没有工作空间。这个仓库只保存git历史提交的版本信息,而不允许用户在上面进行各种git操作(如:push、commit操作)。但是,你依旧可以使用git show命令查看提交内容:
创建仓库
相信看完上述描述,大家已经服务器上应该用Git init –bare了,我们来实际演示一下。
进入git用户家目录内(/home/git
),创建一个mySource
文件夹,里面用来存git仓库:
# 切换为git用户 sudo su git # 切换环境为/home/git内 cd ~ # 创建mySource文件夹 mkdir mySource
之后,我们进入mySource
文件夹,并初始化一个叫imagehost.git
的git仓库:
# 进入mySource文件夹 cd mySource # 初始化叫imagehost.git的仓库 sudo git init --bare imagehost.git
之后会多一个项目文件夹:
这个时候,我们imagehost仓库就创建好了。
使用仓库
本地同步仓库
刚刚我们已经创建了imagehost仓库,本地也需要安装Git。这里不再赘述。在安装好后,以下方法二选一:
- 在
powershell
或terminal
内同步仓库到本地。 - 使用GitHub Desktop进行可视化同步仓库到本地。
本次就演示,使用Terminal同步仓库到本地。
# 同步本地仓库,server-IP为服务器IP地址 git clone git@server-IP:/home/mySource/imagehost.git
之后,本地就出现这个仓库了:
添加&推送
之后,我们对本地仓库加入项目代码即可(本文使用图片代替):
之后,进行推送:
# 添加所有文件 git add # 创建commit git commit -m "init". # 推送到服务器主分支 git push origin HEAD
之后,你可以使用Git命令查看远程分支版本。
Git工作空间
上文说到,服务器上使用git init –bare创建的“裸“仓库,是没有工作空间的,什么是工作空间的,举几个例子:
- GitHub的仓库详情就是工作空间
- 本地仓库内详情就是工作空间
那么,“裸“仓库,怎么看到工作空间呢?
hook使用
Git 能在特定的重要动作发生时触发自定义脚本。 有两组这样的钩子:客户端的和服务器端的。 客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。 简单地说,hook就是一些在Git特点动作时候,触发的事件。具体可以查看:Git官方中文文档
我们可以使用post-receive钩子,来展示我们的工作空间。
post-receive
我们要在裸仓库内,看到用户提交的工作空间很简单。只需要创建/编写post-receivek即可:
# 当前在服务器裸仓库内 cd hooks # 创建并编辑post-receive vim post-receive
输入内容:
#!/bin/sh git --work-tree=#工作空间# --git-dir=#Git仓库地址# checkout -f
比如:其中:
- 工作空间:服务器上空目录地址,git用户需要有读写权限。
- Git仓库地址:服务器上本仓库地址。
之后,进行提取(赋予执行权限):
chmod +x post-receive
之后,用户push提交后,–work-tree参数定义的工作空间就可以看到用户提交的具体内容:
总结
在Lighthouse上搭建Git服务器就是这么简单,非常适合个人开发者和小型团队嗷。甚至还可以创建SSH配对密钥添加到authorized_keys,用于免密推送和下载。
另外,有些用户可能会想搭建Gitlab,我认为个人或者小型团队是没必要搭建这么庞大的Git服务平台(中型团队或者企业再搭建吧……)。
共有 0 条评论