公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

9356b1f627ed9539dc9cb10ce62cc3a0.png

程序员的代码仓库,总是需要托管一份在服务器,这样才保险,也方便使用。

今天就来谈谈 Git 服务器。

代码托管服务

一般情况下,都不建议自己搭建 Git 服务器,而要使用现成的服务,也就是代码托管服务。它们都是免费的。

  • GitHub

  • Gitlab

  • Bitbucket

  • Codeberg

  • sourcehut

  • Gitee

其中,除了最后一家 Gitee 是国内的服务,其他都是国外的服务。

这些外部服务,就不多做介绍了。本文的重点不是它们,而是想谈如果不得不自己搭建 Git 服务器,那该怎么做。

Git 服务器软件

自己搭建 Git 服务器的原因,无非就是不方便访问外网,不愿意代码放在别人的服务器,或者有一些定制化的需求。

这时,你可以选择开源的 Git 服务器软件。

  • Gitlab CE

  • Gitea

  • Gogs

  • Onedev

这些软件里面,Gogs 的安装是最简单的,但是功能相对比较弱。功能越强的软件,安装越复杂。

如果你只是想远程保存一份代码,并不在意有没有 Web 界面,或者其他功能,那么根本不用安装上面这些软件,一行命令就够了。

Git 仓库的 SSH 传输

熟悉 Git 的同学可能知道,Git 默认支持两种传输协议:SSH 和 HTTP/HTTPS。

服务器一般都自带 SSH,这意味着,我们可以什么都不安装,只通过 SSH 就把仓库推到远程服务器。

所以,一条命令就够了。我们只要在远程服务器上,建立同名的 Git 仓库,服务器就搭建好了。

$ git init --bare [仓库名].git

上面命令中,各个部分的含义如下。

(1)git init:初始化一个 Git 仓库。

(2)--bare:表示新仓库不需要工作目录,只建立 Git 数据目录。

(3)[仓库名].git:指定仓库名,比如仓库名是example,那么就要建立一个叫做example.git的 Git 数据目录。

执行这条命令以后,一个最简易的 Git 服务器就诞生了。后面,我们就可以通过 SSH 连接,把本地代码推送到这个远程 Git 仓库了。

操作演示

下面,我演示一下整个操作过程。

操作分成两部分,先在远程服务器操作,然后在本地计算机操作。

远程服务器操作

下面的操作都在远程服务器完成,假设你已经通过 SSH 登录上去了。不熟悉 SSH 的同学可以看参考这篇《SSH 入门》。

登录远程服务器的目的,主要是新建一个专门的用户,所有的 Git 操作都通过该用户完成。这一步其实不是必需的,但是这样后期操作比较灵活(比如仓库可以让多人共享)。

$ sudo mkdir /home/git
$ sudo useradd git
$ sudo mkdir -m 700 /home/git/.ssh
$ sudo cp ~/.ssh/authorized_keys /home/git/.ssh/

上面命令的含义如下。

(1)新建新用户的主目录/home/git

(2)新建一个用户,用户名为git

(3)新建新用户的 SSH 目录/home/git/.ssh

(4)把当前用户的公钥拷贝给git用户,以便密钥登陆,详细解释可以参考《SSH 密钥登录》。

如果你只用密码登录,不使用密钥登录,那么上面第三步和第四步是不需要的,但是需要为git用户设定密码,命令如下。

$ sudo passwd git

本机计算机操作

后面的操作都在本地计算机完成。

假定上一小节的远程服务器的 IP 地址是192.168.1.25,本地的 Git 仓库名为example

$ ssh git@192.168.1.25 git init --bare example.git

上面命令中,ssh git@192.168.1.25表示以git用户的身份,登录到远程服务器。后面的部分是 SSH 的一种语法,表示登录后在远程服务器执行的命令,即新建一个远程 Git 数据目录example.git

这条命令运行完,就有了一个 Git 服务器了,然后就可以推送代码了。

$ cd example
$ git remote add myServer git@192.168.1.25:example.git
$ git push myServer master

上面的命令先进入本地仓库,为远程服务器加一个别名,然后把代码推送过去。

另一种操作方法

上面的例子使用git init --bare命令,在远程服务器新建 Git 数据目录。其实,Git 数据目录就是一个普通目录,直接从本地计算机拷贝过去也可以。

$ scp -r example/.git git@192.168.1.25:/home/git/example.git

上面的命令使用scp工具将本地的 example仓库里面的.git子目录,拷贝到远程服务器的目录example.git。这样也能建立 Git 服务器。

参考链接

  • Host Git repositories on OpenBSD

  • Git on the Server

本文转载自:「 阮一峰的网络日志 」,原文:https://url.hi-linux.com/oQrwx ,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

7fa5f6884484b7e56dce4546258a9001.gif

最近,我们建立了一个技术交流微信群。目前群里已加入了不少行业内的大神,有兴趣的同学可以加入和我们一起交流技术,在 「奇妙的 Linux 世界」 公众号直接回复 「加群」 邀请你入群。

5d2ec68f1b33741474160136a7b7b0eb.png

你可能还喜欢

点击下方图片即可阅读

1acbfaacba10b40995d84b04630636ad.png

15 个超实用 Kubernetes 集群资源清理命令

48cdfd76e9c8fa0dba8281ca0237e7d4.png

点击上方图片,『美团|饿了么』大额外卖红包天天免费领

71e527db5a9a64e31591a36fcf29125c.png

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐