芒果爱吃胡萝卜 - git
type: channel
link: http://blog.mangolovecarrot.net/tag/git/
items: 处理git clone命令的非标准SSH端口连接
items: 解决1Panel自建的Gitea服务器无法用ssh方式clone
items: 自建Git仓库01-在 Linux 服务器上设置 Git 协议支持

处理git clone命令的非标准SSH端口连接
type: item
date: 2023-10-08T01:26:18+08:00
description: 处理git clone命令的非标准SSH端口连接使用git clone命令clone项目时，如果repository的SSH端口不是标准22端口时（例如，SSH tunnel模式，等等），可以使用如下命令：git clone ssh://git@hostname:port/.../xxx.git 举例如下：git clone ssh://git@11.22.33.44:2201/mango/test.git

解决1Panel自建的Gitea服务器无法用ssh方式clone
type: item
date: 2023-05-29T21:58:00+08:00
description: 背景默认Gitea是以容器的形式运行的，并默认不使用Gitea内部的ssh服务而是使用转发宿主机ssh端口的方式，一般会将222端口绑定到容器的22端口上。问题安装完并新建仓库后，无法使用 git clone git@host:user/repo.git 的方式拉取仓库。http方式一般不会出问题。原因由于公开出来的端口不是默认的22而是222所以需要配置客户端的.ssh/config 文件，配置以下内容Host some-name HostName your-gitea-host User git # 这里我使用了非常用的key，这不是必须的 IdentityFile /c/Users/tuoxi/.ssh/id_ecdsa_gitea IdentitiesOnly yes # 主要是这里一定要设置为222 Port 222在gitea的个人设置中添加你的公钥。注意，正确的添加位置如下。添加到每一个仓库设置里的key是没用的，另外下图画圈右侧的“密钥”那个也是不对的，那些都是用来做其他用途的。（Action）测试上述设置了以后应该就可以用ssh拉取仓库了，比如git clone git@your-gitea-host:mango/test.git或者直接省略git这个用户名直接使用指定的Host（注意不需要是HostName）git clone some-name:mango/test.git要注意的是host名（your-gitea-host处）需要和config中设置的一致才会使用config的222端口的设置，所以如果不是真实的域名而是修改hosts来映射的局域网的“假”域名或主机名，也要保证两边一致。$ git clone git@your-gitea-host:mango/test.git Cloning into 'test'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), 218 bytes | 218.00 KiB/s, done.

自建Git仓库01-在 Linux 服务器上设置 Git 协议支持
type: item
date: 2023-05-06T13:26:00+08:00
description: 本文将说明如何在 Linux 服务器上使用 git-daemon 设置 Git 协议支持。也就是支持外部通过git://xxx/reponame 的方式进行clone或一些其他操作（比如将一个普通的git仓库镜像到只支持git协议的Gitea中）安装 git-daemon：sudo apt-get update sudo apt-get install git-daemon-run创建一个新的 systemd 服务文件：sudo nano /etc/systemd/system/git-daemon.service将以下内容粘贴到文件中：[Unit] Description=Git Daemon [Service] ExecStart=/usr/lib/git-core/git-daemon --reuseaddr --base-path=/var/cache/git --export-all --verbose --syslog --enable=receive-pack Restart=always RestartSec=500ms User=mango Group=mango Environment=GIT_HTTP_EXPORT_ALL=1 RuntimeDirectory=git-daemon RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target保存并关闭文件。ExecStart：可以用命令 sudo find / -name git-daemon 2>/dev/null 来找到可执行文件文件的位置--base-path：这个是git-daemon进行服务的根目录，可以指定为你自己仓库的实际位置，但一般用这个默认设置 /var/cache/git 比较好，因为你可能不希望你的仓库目录下可能存在其他你不想公开的仓库。这个默认设置的目录需要手动创建（后面的步骤会提到）否则服务启动时会报错。--User和Group：请改成你创建仓库时使用的用户和用户组。更标准的做法是创建并使用git用户/组，本文最后会介绍方法。由于我之前是使用一般用户 mango 创建的仓库，这里为了避免复杂的权限设置所以直接使用原来的用户。其他非必须的选项说明：Restart=always 和 RestartSec=500ms 是用于设置服务的重启策略的。表示当服务退出时，systemd 会自动尝试重新启动服务。这个选项适用于大多数服务，因为我们通常希望服务在退出后能够自动重新启动。当服务因任何原因退出后，systemd 会在 500 毫秒后尝试重新启动服务。这个选项可以避免过于频繁的重启，从而减少对系统资源的占用。这个设置可以在配置文件中使用，也可以在 systemctl 命令中直接使用。Environment=GIT_HTTP_EXPORT_ALL=1 这个设置用于设置 Git 的环境变量，其中 GIT_HTTP_EXPORT_ALL 是一个常用的环境变量，表示 Git HTTP 服务器应该公开所有的 Git 仓库，这样用户才能通过 HTTP 协议访问这些仓库。对于 git-daemon，这个设置则是告诉它要导出所有的 Git 仓库。RuntimeDirectory=git-daemon 和 RuntimeDirectoryMode=0755 这两个设置用于创建一个运行时目录，这个目录将被用于存放 git-daemon 的运行时数据。在这个目录下，git-daemon 会创建一个用于存放缓存文件的子目录。这个设置可以帮助您更好地管理 git-daemon 的运行时数据。其中 RuntimeDirectory=git-daemon 表示我们要创建一个名为 git-daemon 的运行时目录，RuntimeDirectoryMode=0755 则表示这个目录的权限为 0755，即所有用户都可以读取和执行这个目录，但只有目录的拥有者可以写入这个目录。这个设置可以确保 git-daemon 有一个合适的目录用于存放运行时数据，并且只有具有足够权限的用户才能够修改这个目录。Restart=always、 RestartSec=500ms、Environment=GIT_HTTP_EXPORT_ALL=1、RuntimeDirectory=git-daemon 和 RuntimeDirectoryMode=0755 这几个设置并不是必须的，如果只是简单地想要在服务器上运行一个 git-daemon 服务，并且不需要过多的定制化配置，那么完全可以不必使用这些设置。[scode type="red"]--enable=receive-pack：启用 push 支持。git-daemon 默认情…