轻松搭建 GIT 服务器!
介绍
在服务器上
在客户端计算机上
*笔记:
额外提示!
介绍
本教程将一步步教你如何搭建本地 Git 服务器。这是一个简单有趣的项目,非常适合家用服务器、低功耗单板计算机(例如 Beaglebone Black 或 Raspberry Pi),甚至是虚拟专用服务器 (VPN)。你只需要在服务器上安装 Git,并在客户端计算机上配置 SSH 密钥即可。
这样做的好处是,你将拥有自己控制的私有 git 服务器,你可以从中推送、拉取和克隆存储库。
让我们开始吧……
在服务器上
首先要做的就是登录服务器并安装 Git。
对于基于 .deb 的系统运行。
$ sudo apt update
$ sudo apt install git
对于基于 .rpm 的系统运行。
$ sudo yum install git
OR
$ sudo dnf install git
下一步是创建git用户。
$ sudo useradd -r -m -U -s /bin/bash git
-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/
为git用户设置密码。
$ sudo passwd git
切换到 git 用户账户。
$ su - git
在 git 用户的主文件夹中创建 .ssh 目录。
$ mkdir /home/git/.ssh
你会看到默认权限是 0755 (drwxr-xr-x)。
$ ls -ld /home/git/.ssh
drwxr-xr-x 2 git git 4096 Jan 29 20:25 /home/git/.ssh
我们需要将 .ssh 目录的权限设置为 0700,以便 SSH 能够正常工作。我们将使用以下命令将目录权限设置为 0700 (drwx------)。
$ sudo chmod 0700 /home/git/.ssh
运行“ls -ld”来验证权限是否设置正确。
$ ls -ld /home/git/.ssh
drwx------ 2 git git 4096 Jan 29 20:25 /home/git/.ssh
让我们在服务器上创建第一个代码仓库。按照惯例,我们在目录名末尾添加 .git 后缀。这提醒我们,该目录是一个代码仓库,而不是普通的目录。
$ git init --bare my_project.git
好!我们开始在客户端电脑上工作吧。
在客户端计算机上
此时我们将使用此命令创建 SSH 密钥。
$ ssh-keygen -t rsa -b 4096 -C “my_email” -f ~/.ssh/id_rsa
-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]-----+
你会看到已经创建了两个文件。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
需要将公钥复制到 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
-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:~ $
输入 exit 断开与服务器的连接。
git@192.168.12.34:~ $ exit
现在我们可以连接到之前在服务器上创建的仓库了。创建一个与仓库名称相同但去掉 .git 扩展名的目录。服务器上有一个名为 my_project.git 的目录,所以在客户端计算机上,你需要创建一个名为 my_project/ 的目录。
$ mkdir my_project/
$ cd my_project/
添加一些标准的git文件。
$ touch readme.md .gitignore LICENSE
在 readme.md 文件中添加一些内容。
$ echo ‘# My First Project!’ >> readme.md
将所有文件添加到 git 暂存区,以便可以提交它们。
$ git add --all
将文件提交到 Git。该-m标志允许您在不打开编辑器的情况下创建简短的提交消息。
$ git commit -m “First commit”
我们需要指定要使用的 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
将第一次提交推送到服务器。
(master)my_project $ git push local master
按如下方式检查您的远程服务器。目前只
设置了一个名为“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)
还记得我说过我们要用最简单的方法吗?
既然我们已经完成了服务器上的初始设置,就可以使用 SSH 从客户端计算机创建一个新的仓库。无需登录服务器即可创建仓库。以下是在 Git 服务器上创建新仓库的工作流程。
要在远程服务器上运行命令,只需在 SSH 命令后附加要运行的命令即可。这样,您就可以运行“git init --bare”命令来创建一个新的仓库,而无需登录服务器。运行此命令时,请将 IP 地址替换为您服务器的 IP 地址。
$ ssh git@192.168.12.34 “git init --bare my_second_project.git”
请检查服务器上是否已创建该目录。
~ $ 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/
在客户端计算机上创建一个目录,该目录的名称与你在服务器上创建的 git 存储库的名称相同,但去掉 .git 扩展名。
服务器上已经存在 my_second_project.git 目录,因此在客户端计算机上创建 my_second_project/ 目录。
$ mkdir my_second_project/
$ cd my_second_project/
$ touch readme.md .gitignore LICENSE
在 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'.
全部完成。
简单回顾一下,要创建一个新的本地存储库,只需运行以下命令即可。
完整示例:
$ 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
*笔记:
如果您希望同一个仓库在线,可以通过运行“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
查看当前可用的远程存储库。
(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)
现在它显示我有两个可以使用的 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)
请确认环境变量是否存在。
$ env | grep SSH
SSH_AUTH_SOCK=/tmp/ssh-08AsdfQWRTYE/agent.69007
SSH_AGENT_PID=69007
现在,所有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
欢迎留下评论、问题和建议。
文章来源:https://dev.to/brandonwallace/set-up-a-git-server-the-easy-way-jke
