发布于 2026-01-06 1 阅读
0

Set Up A GIT Server The Easy Way! Introduction On the server On the client computer *NOTE: BONUS TIP!

轻松搭建 GIT 服务器!

介绍

在服务器上

在客户端计算机上

*笔记:

额外提示!

介绍

本教程将一步步教你如何搭建本地 Git 服务器。这是一个简单有趣的项目,非常适合家用服务器、低功耗单板计算机(例如 Beaglebone Black 或 Raspberry Pi),甚至是虚拟专用服务器 (VPN)。你只需要在服务器上安装 Git,并在客户端计算机上配置 SSH 密钥即可。

这样做的好处是,你将拥有自己控制的私有 git 服务器,你可以从中推送、拉取和克隆存储库。

客户端-服务器.png

让我们开始吧……

在服务器上

首先要做的就是登录服务器并安装 Git。

对于基于 .deb 的系统运行。



$ sudo apt update

$ sudo apt install git


Enter fullscreen mode Exit fullscreen mode

对于基于 .rpm 的系统运行。



$ sudo yum install git

OR

$ sudo dnf install git


Enter fullscreen mode Exit fullscreen mode

下一步是创建git用户。



$ sudo useradd -r -m -U -s /bin/bash git


Enter fullscreen mode Exit fullscreen mode

-r

创建系统用户

-m

创建主目录

-U

创建一个与用户名相同的组名。

-s /path/to/shell

设置用户的默认 shell。

你应该能在 /home 下看到 git 用户的家目录。



$ ls -lF /home/
total 8
drwxr-xr-x  2 git git 4096 Jan 29 20:09 git/



Enter fullscreen mode Exit fullscreen mode

为git用户设置密码。



$ sudo passwd git


Enter fullscreen mode Exit fullscreen mode

切换到 git 用户账户。



$ su - git


Enter fullscreen mode Exit fullscreen mode

在 git 用户的主文件夹中创建 .ssh 目录。



$ mkdir /home/git/.ssh


Enter fullscreen mode Exit fullscreen mode

你会看到默认权限是 0755 (drwxr-xr-x)。



$ ls -ld /home/git/.ssh
drwxr-xr-x 2 git git 4096 Jan 29 20:25 /home/git/.ssh


Enter fullscreen mode Exit fullscreen mode

我们需要将 .ssh 目录的权限设置为 0700,以便 SSH 能够正常工作。我们将使用以下命令将目录权限设置为 0700 (drwx------)。



$ sudo chmod 0700 /home/git/.ssh


Enter fullscreen mode Exit fullscreen mode

运行“ls -ld”来验证权限是否设置正确。



$ ls -ld /home/git/.ssh
drwx------ 2 git git 4096 Jan 29 20:25 /home/git/.ssh


Enter fullscreen mode Exit fullscreen mode

让我们在服务器上创建第一个代码仓库。按照惯例,我们在目录名末尾添加 .git 后缀。这提醒我们,该目录是一个代码仓库,而不是普通的目录。



$ git init --bare my_project.git


Enter fullscreen mode Exit fullscreen mode

好!我们开始在客户端电脑上工作吧。

在客户端计算机上

此时我们将使用此命令创建 SSH 密钥。



$ ssh-keygen -t rsa -b 4096 -C “my_email” -f ~/.ssh/id_rsa


Enter fullscreen mode Exit fullscreen mode

-t <type>

密钥类型(RSA 或 DSA)。请使用 RSA。

-b <bits>

指定要创建的密钥的位数。使用 4096。

-C “comment”

添加评论。

-f /path/to/key

指定rsa文件的路径。通常将其命名为.rsa文件id_rsa

运行命令后,您将看到类似下方的输出。出现提示时,请设置密码。



Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): ************
Enter same passphrase again: ************
Your identification has been saved in .ssh/id_rsa.
Your public key has been saved in .ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Yg5D1kaIN9M6ln3sJlHzEggLoKpDYFkhXFR1ZOwP/sI my_email
The key's randomart image is:
+---[RSA 4096]----+
|oo+*+=ooo+       |
|..=.=+o *.       |
|oo .+*oo.+       |
|+  o=.o +o.      |
|.. .o.o+S.o      |
|o    =..o. .     |
|o     .o. .      |
| .       E .     |
|          .      |
+----[SHA256]-----+


Enter fullscreen mode Exit fullscreen mode

你会看到已经创建了两个文件。id_rsa是私钥,id_rsa.pub是公钥。权限应该设置为 0600 (-rw-------)。



$ ls -la .ssh/
total 36
drwx------  2 bw bw 4096 Jan 29 20:43 .
drwxr-xr-x 54 bw bw 4096 Jan 29 13:17 ..
-rw-------  1 bw bw 3414 Jan 29 20:43 id_rsa
-rw-------  1 bw bw  733 Jan 29 20:43 id_rsa.pub


Enter fullscreen mode Exit fullscreen mode

需要将公钥复制到 Git 服务器。为此,请使用以下ssh-copy-id命令。由于我的服务器 IP 地址是 [服务器 IP 地址],所以192.168.12.34我运行如下命令将公钥复制到服务器。请将 [服务器 IP 地址] 替换为您服务器的 IP 地址。



$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@192.168.12.34


Enter fullscreen mode Exit fullscreen mode

-i /path/to/public_key_file

指定公钥的路径。

将公钥复制到服务器后,通过 SSH 测试登录服务器。将 IP 地址更改为您服务器的 IP 地址。



$ ssh git@192.168.12.34
git@192.168.12.34s password:

Last login: Fri Jan 29 20:35:46 2021 from 192.168.12.100
git@192.168.12.34:~ $


Enter fullscreen mode Exit fullscreen mode

输入 exit 断开与服务器的连接。



git@192.168.12.34:~ $ exit


Enter fullscreen mode Exit fullscreen mode

现在我们可以连接到之前在服务器上创建的仓库了。创建一个与仓库名称相同但去掉 .git 扩展名的目录。服务器上有一个名为 my_project.git 的目录,所以在客户端计算机上,你需要创建一个名为 my_project/ 的目录。



$ mkdir my_project/

$ cd my_project/


Enter fullscreen mode Exit fullscreen mode

添加一些标准的git文件。



$ touch readme.md .gitignore LICENSE


Enter fullscreen mode Exit fullscreen mode

在 readme.md 文件中添加一些内容。



$ echo ‘# My First Project!’ >> readme.md


Enter fullscreen mode Exit fullscreen mode

将所有文件添加到 git 暂存区,以便可以提交它们。



$ git add --all


Enter fullscreen mode Exit fullscreen mode

将文件提交到 Git。该-m标志允许您在不打开编辑器的情况下创建简短的提交消息。



$ git commit -m “First commit”


Enter fullscreen mode Exit fullscreen mode

我们需要指定要使用的 Git 服务器。
此命令将指定一个远程 Git 服务器仓库,提交记录将存储在该仓库中。语法如下:

$ git remote add <remote_name> git@<server_ip>:<git_repo>

你可以使用任何你想要的标签。默认标签<remote_name>通常是 `<remote_name> origin`。因为我使用的是本地服务器,所以我将 `remote_name` 设置为 `local`。请将 IP 地址更改为你的服务器的 IP 地址。



(master)my_project $ git remote add local  git@192.168.12.34:my_project.git


Enter fullscreen mode Exit fullscreen mode

将第一次提交推送到服务器。



(master)my_project $ git push local master


Enter fullscreen mode Exit fullscreen mode

按如下方式检查您的远程服务器。目前只

设置了一个名为“local”的存储库。



(master)my_project $ git remote -v
local   git@192.168.12.34:my_project.git (fetch)
local   git@192.168.12.34:my_project.git (push)


Enter fullscreen mode Exit fullscreen mode

还记得我说过我们要用最简单的方法吗?
既然我们已经完成了服务器上的初始设置,就可以使用 SSH 从客户端计算机创建一个新的仓库。无需登录服务器即可创建仓库。以下是在 Git 服务器上创建新仓库的工作流程。

要在远程服务器上运行命令,只需在 SSH 命令后附加要运行的命令即可。这样,您就可以运行“git init --bare”命令来创建一个新的仓库,而无需登录服务器。运行此命令时,请将 IP 地址替换为您服务器的 IP 地址。



$ ssh git@192.168.12.34 “git init --bare my_second_project.git”


Enter fullscreen mode Exit fullscreen mode

请检查服务器上是否已创建该目录。



~ $ ssh git@192.168.12.34 "ls -lF"
total 8
drwxr-xr-x 7 git git 4096 Feb  5 17:47 my_project.git/
drwxr-xr-x 7 git git 4096 Feb  6 21:48 my_second_project.git/


Enter fullscreen mode Exit fullscreen mode

在客户端计算机上创建一个目录,该目录的名称与你在服务器上创建的 git 存储库的名称相同,但去掉 .git 扩展名。

服务器上已经存在 my_second_project.git 目录,因此在客户端计算机上创建 my_second_project/ 目录。



$ mkdir my_second_project/

$ cd my_second_project/

$ touch readme.md .gitignore LICENSE


Enter fullscreen mode Exit fullscreen mode

在 readme.md 文件中添加一些内容。



$ echo ‘# My Second Project!’ >> readme.md

$ git add --all

$ git commit -m “First commit”

$ git remote add local git@192.168.12.34:my_second_project.git

$ git push local master
git@192.168.12.34's password: ************
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 306 bytes | 306.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To 192.168.12.34:my_project.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'local'.


Enter fullscreen mode Exit fullscreen mode

全部完成。

简单回顾一下,要创建一个新的本地存储库,只需运行以下命令即可。

完整示例:



$ ssh git@192.168.12.34 “git init --bare nodejs_app.git”
$ mkdir nodejs_app/
$ cd nodejs_app/
$ touch readme.md .gitignore LICENSE
$ echo ‘# My Nodejs App’ >> readme.md
$ git init
$ git add --all
$ git commit -m “First commit”
$ git remote add local git@192.168.12.34:nodejs_app.git
$ git push local master


Enter fullscreen mode Exit fullscreen mode

*笔记:

如果您希望同一个仓库在线,可以通过运行“git remote add”命令轻松地添加第二个 GitHub 连接。
首先,在 GitHub 上创建一个同名的新仓库(my_project),其中不需要包含任何文件,例如 readme.md、.gitignore 或 LICENSE,因为我们已经创建了这些文件。

其次运行 git remote add 命令。以下是一个示例:



(master)my_project $ git remote add origin git@github.com/brandon-wallace:my_project.git


Enter fullscreen mode Exit fullscreen mode

查看当前可用的远程存储库。



(master)my_project $ git remote -v
local   git@192.168.12.34:my_project.git (fetch)
local   git@192.168.12.34:my_project.git (push)
origin    git@github.com/brandon-wallace:my_project.git (fetch)
origin    git@github.com/brandon-wallace:my_project.git (push)


Enter fullscreen mode Exit fullscreen mode

现在它显示我有两个可以使用的 git 服务器,一个叫做local(我的服务器),另一个叫做origin(Github)。

额外提示!

登录电脑后,您可以使用 ssh-agent 存储 RSA 密钥密码,这样每次向代码仓库推送代码时就无需重复输入 SSH 私钥密码。要存储 SSH 密码,请运行以下命令。



$ eval $(ssh-agent -s)

$ ssh-add /home/brandon/.ssh/id_rsa
Enter passphrase for /home/bw/.ssh/id_rsa: ***********
Identity added: /home/bw/.ssh/id_rsa (comment)


Enter fullscreen mode Exit fullscreen mode

请确认环境变量是否存在。



$ env | grep SSH

SSH_AUTH_SOCK=/tmp/ssh-08AsdfQWRTYE/agent.69007
SSH_AGENT_PID=69007


Enter fullscreen mode Exit fullscreen mode

现在,所有git推送命令都不需要您输入密码了。



$ git push origin master
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 2 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 518 bytes | 518.00 KiB/s, done.
Total 4 (delta 2), reused 0 (delta 0)
To 192.168.12.34:my_project.git
   d06bb48..beee582  master -> master


Enter fullscreen mode Exit fullscreen mode

欢迎留下评论、问题和建议。

文章来源:https://dev.to/brandonwallace/set-up-a-git-server-the-easy-way-jke