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 [email protected] "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://[email protected]/path-to-repository.git
6.2 克隆到新目的地
如果有其他团队成员想要使用该项目,则需要将远程服务器上的仓库克隆到其本地计算机上。在本地机器进入你想克隆到的目录:
$ git clone [email protected]:/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服务器
原文地址:https://www.cnblogs.com/petewell/p/11601721.html