menu Hyou
主页
分类
标签
关于
color_lens

... Rei ...

... cjlmonster@163.com ...

... 白开水与方便面 ...

home
主页
chevron_right
local_library
分类
chevron_right
local_offer
标签
chevron_right
brightness_auto
关于
chevron_right

标签云

Git自建服务器

2021-06-11 约 350 字 预计阅读 2 分钟 Git

简单介绍

开发的时候,如果选用 git 做版本控制的话,通常情况下,首先在本地电脑上安装 git 客户端进行版本控制,而后了,有下面几种情况: ​

  1. 只在本机上开发,git 只是用来做做代码回滚和保存代码到本地;
  2. 在本地上开发,然后把代码托管到 git托管平台,如著名的 GitHub,国内的 Gitee;
  3. 在本地上开发,然后把代码托管到 自建git服务器。

上面的三种情况下,第一种只需一台电脑,自个玩就可以了,后两种都是把代码托管到另一台服务器上,GitHub 和 Gitee,免费的开源代码托管平台,其后台使用的就是git服务器,因为是开源的,所以托管到上面的代码,别人也能拷贝和查看,当然也是可以建私人仓库,不过要收费,貌似 Gitee 可以建免费的私人仓库(不清楚)。下面详细介绍下自建 git 服务器,把代码托管到自己的私人服务器上。 ​

教程准备

  1. 客户端:这里准备一台Windows电脑,系统为 win7
  2. git服务器:一般为Linux服务器,这里因为条件有限,装了一个 Linux Mint 虚拟机(有钱的话,可以考虑各家的云ecs,选个最低配,一年大概三四百吧,以后也可以当测试用),ip为:192.168.2.178,后面ssh远程连接需要用到
  3. 各自安装 git 客户端,前面已经讲过,这里不再叙述,详细请看 安装教程

客户端配置

客户端生成用于ssh登录的密钥对,打开 Git Bash 窗口,输入 ssh_keygen 命令创建

$ ssh_keygen -t rsa -C “developer1”

  • -t 密钥的算法,默认不写是 dsa,这里设为 rsa
  • -C 用于备注,一般就是备注这台电脑的使用者之类的,最后会在生成的公钥末尾里显示,默认为电脑用户名,

输入命令后,一路按回车就可以了,最后会在用户的家目录里生成 .ssh 目录,并存放有两个文件,其中 id.rsa为私钥,id_rsa.pub为公钥 image.png 接着把公钥上传到git服务器上,可以使用ftp,或用其它更简单的方式,下面会讲 ​

git服务器端配置

创建git用户

查看git用户是否存在

$ id git

image.png 不存在则创建git用户,用于操作远程仓库

$ sudo useradd git

设置密码

$ sudo passwd git

查看用户信息

$ sudo cat /etc/passwd

image.png 创建 git用户 家目录并设置所有者为 git

$ cd /home
$ sudo mkdir git
$ sudo chown -R git:git git

输入命令 ll 查看 image.png 设置 git用户的登录shell为/usr/local/bin/git-shell,禁用其登录,但可以使用 ssh命令

$ sudo usermod -s /usr/local/bin/git-shell git

image.png

配置ssh免密码登录

这里配置ssh免密码登录的是 git用户,所以先进入git用户的家目录里创建 .ssh 目录,然后在 .ssh 目录里创建 authorized_keys 文件,这个文件是用于存放客户端公钥的

$ cd /home/git
$ sudo mkdir .ssh
$ sudo touch .ssh/authorized_keys

将 .ssh 目录和 authorized_keys 文件的所有者改为git

$ sudo chown -R git:git .ssh

将 .ssh 目录的权限改为 700

$ sudo chmod 700 .ssh

将 authorized_keys 文件的权限改为 600

$ sudo chmod 600 .ssh/authorized_keys

客户端首先通过 ssh_keygen 生成公私钥,然后可以通过以下方式将公钥存到 authorized_keys 文件里:

  1. 在客户端通过ftp将公钥上传到服务端,假设上传后文件路径为: /tmp/id_rsa.pub,则可以通过如下命令存储公钥

$ cat » /homt/git/.ssh/authorized_keys < /tmp/id_rsa.pub

  1. 在客户端通过远程ssh并同时执行cat命令,打开 Git Bash 输入如下命令

$ ssh cjl@192.168.2.178 “cat » /home/git/.ssh/authorized_keys” < ~/.ssh/id_rsa.pub

  1. 在客户端使用 scp 命令,打开 Git Bash 输入如下命令

$ scp ~/.ssh/id_rsa.pub cjl@192.168.2.178:/home/git/.ssh/authorized_keys

cjl@192.168.2.178 这个是我 Linux Mint 虚拟机的主用户,因为git用户的登录shell已被设为/usr/local/bin/git-shell,不能用于远程登录,因此这里用了权限更高的主用户 cjl ,假设git用户没有被禁止登录,也是可以改为git@192.168.2.178的,不过不建议,最好还是禁用登录 ​

上传完后查看

$ sudo cat .ssh/authorized_keys

image.png 配置 ssh 免密登录完成 ​

创建git仓库

首先进入到git用户的家目录,创建一个目录 repos,用于保存仓库

$ cd /home/git
$ sudo mkdir repos

image.png 创建一个仓库 sample.git,放在 repos 目录下,服务端仓库目录的名字,一般是以 .git 做后缀的

$ cd repos
$ sudo mkdir sample.git

image.png 初始化仓库并更改所有者为 git用户

$ sudo git init –bare sample.git
$ sudo chown -R git:git sample.git

image.png ps: 使用git init --bare创建的仓库为“裸仓库”或叫“空仓库”,这种仓库是没有工作区的,因此不能进行版本控制的一些提交修改等功能,但可以查看日志。一般在服务器端使用,作为“共享”仓库,也可以理解为团队开发的远程中央仓库。 ​

客户端开发

上面已经把客户端和服务端配置完了,接着实际操作一下,客户端开发并使用版本控制,并托管到服务端。 ​

首先在客户端打开 Git Bash,输入以下命令,把 sample.git 这个仓库拷贝到本地进行开发

$ git clone git@192.168.2.178:repos/sample.git

image.png ps: 上面的git@192.168.2.178:repos/sample.git为 sample.git 仓库的远程 ssh 地址,假设服务端又在 repos 目录下创建了一个仓库,名字为 example.git,则 ssh 地址为git@192.168.2.178:repos/example.git

此时已经把 sample.git 拷贝下来了,进入 sample.git 输入git log查看提交日志,提示没有任何提交

$ cd sample.git
$ git log

image.png 添加一个文件到工作区

$ echo “测试添加文件” > test.txt
$ ll
$ cat test.txt

image.png 查看工作区状态,是否有更改

$ git status

image.png 提示有文件更改了,需要提交,在提交之前先要把它添加到暂存区

$ git add test.txt
$ git status

image.png 最后提交

$ git commit -m “首次提交代码”
$ git status
$ git log

image.png 通过 git log命令,可以看到提交的信息了 ​

将本地更新推送到远程仓库里

$ git push origin master

image.png 回到服务器端,进入到 sample.git 仓库了,通过git log查看提交日志

$ cd /home/git/repos/sample.git
$ git log

image.png 已经可以看到客户端提交的更新了 ​

ps: 开发者人数不多的情况下,可以把每个开发者本机的公钥都保存到git服务器的/home/git/.ssh/authorized_keys文件里,然后就可以共同开发这个项目了,但是如果人数比较多的话,这样每个开发者都上传一遍,不太方便,这时可以用 gitosis 来进行项目的团队管理

copyright 2021 cjlmonster | 粤ICP备2021067029号 | 粤公网安备 44132302100200号
设置文档主题

主题色

主色

强调色