搭建一个git服务器

12 December 2018

by Rango

需求

搭建一个git服务器,没有github的存储空间限制,同时仓库是私有的。

设备

  • 一台本地电脑(linux 系统)
  • 一台服务器(linux 系统)

步骤

步骤主要根据以下链接整理: 搭建属于你自己的 Git 服务器 忽略特殊文件 搭建Git服务器

1.安装git到服务器上

$ sudo apt install git

2.创建一个git用户,用来运行服务器

$ sudo adduser git

2.创建证书登录

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。

下面介绍如何创建密钥

2.1 密钥创建

为了容易的访问服务器,我们设置一个免密 ssh 登录。首先在你本地电脑上创建一个 ssh 密钥:

$ ssh-keygen -t rsa

这时会要求你输入保存密钥的路径,这时只需要点击回车保存在默认路径。第二个问题是输入访问远程服务器所需的密码。它生成两个密钥——公钥和私钥。记下您在下一步中需要使用的公钥的位置。

现在您必须将这些密钥复制到服务器上,以便两台机器可以相互通信。在本地机器上运行以下命令:

$ cat ~/.ssh/id_rsa.pub | ssh git@remote-server "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

4.初始化Git仓库(服务器端):

先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:

$ sudo git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git:

$ sudo chown -R git:git sample.git

5.禁用shell登录(可选):

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑/etc/passwd文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

6.链接本地仓库和远程仓库

6.1 创建本地版本控制仓库(如果已有git仓库就跳过此步)

现在我们需要在本地机器上新建一个基于 Git 版本控制仓库:

$ mkdir -p /home/swapnil/git/project

进入我们创建仓库的目录:

$ cd /home/swapnil/git/project

现在在该目录中创建项目所需的文件。留在这个目录并启动 git:

$ git init

6.2 链接已有仓库

到现在为止,我们一直在本地服务器上工作。现在我们必须将这些更改推送到远程服务器上,以便通过互联网访问,并且可以与其他团队成员进行协作。

$ git remote add origin ssh://git@remote-server/path-to-repository.git

6.2 克隆到新目的地

如果有其他团队成员想要使用该项目,则需要将远程服务器上的仓库克隆到其本地计算机上。在本地机器进入你想克隆到的目录:

$ git clone git@remote-server:/home/git/project.git

这里 /home/git/project.git 是远程服务器上的项目路径,在你本机上则会改变。

8.正常提交修改并推送

然后进入本地计算机上的目录(使用服务器上的项目名称)开始工作:

$ cd /project

在本地机器上你需要输入你的信息以便git跟踪文件修改的历史,你每次的修改都会以这个身份被记录

$ git config --global user.name "Mona Lisa"
$ git config --global user.email "Mona Lisa"

global的选项不选的话这个身份只对此仓库有效。如果同时工作在不同远程仓库,比如此服务器仓库和github,又希望两者的身份不同,那就不能使用global关键词。也许你还希望使用不同ssh公钥来登录不同远程仓库,有兴趣的读者可以自行查询了解。

现在可以在本地编辑文件,写入提交更改信息,然后将它们推送到服务器:

$ git add .
$ git commit -m 'description of the modification'

您可以使用 pull 或 push 选项在服务器和本地计算机之间推送或拉取:

将本地修改推送到远程服务器

$ git push origin master

在另一台本地机器上可以用pull拉取刚刚做的推送: 然后进入本地计算机上相应仓库的目录(使用服务器上的项目名称)开始工作:

$ cd /project
$ git pull origin master
tags: blog ubuntu linux ssh git version control git服务器 版本控制

原文:大专栏  搭建一个git服务器


猜你喜欢

转载自www.cnblogs.com/chinatrump/p/11601729.html