由于网络原因在使用github可能存在各种不便,或是不放心将自己的代码交给第三方托管时,可以选择自建一个git服务器。相比于适合企业或大型团队的GitLab,对于个人或小团队则较为轻量的Gitea或许更加合适一些。

我的Gitea搭建在一个ARM板子上(BananaPi M2U),它可以运行最新的Armbian,以及可以连接SATA硬盘,因此在日常使用上和Ubuntu 20.04没有太大区别。虽然相比GitLab,Gitea不会占用太大的内存空间,但是提前配置好swap、开启zram,对小内存设备有着较大的帮助。
预编译版本的Gitea可以在https://dl.gitea.io/gitea/中找到,截至编写本文时,最新稳定版本是1.12.6,对于大多数32位ARM设备选用arm-6版即可。其他构架的平台注意选择下载相应的软件包。这里以得到的文件为gitea-1.12.6-linux-arm-6.xz为例。
将其解压并赋予可执行权限:

xz -d gitea-1.12.6-linux-arm-6.xz
chmod +x gitea-1.12.6-linux-arm-6

并将解压后的文件移动到合适的位置。我习惯使用ln将它映射成一个固定的文件名,便于后续无需修改service文件。同时为了安全性,新建一个不可登录的git用户用于存放相关文件和运行gitea的主程序。

sudo adduser --disabled-login --gecos 'Gitea' git

此时,/home目录会新增git用户的文件夹。我将gitea-1.12.6-linux-arm-6软连接到/home/git/gitea/gitea下:

sudo mkdir /home/git/gitea/
sudo chown -Rf git /home/git/gitea
sudo ln -s gitea-1.12.6-linux-arm-6 /home/git/gitea/gitea

之后切换到git用户,执行该文件并进行配置。

sudo su git
cd ~/gitea/
./gitea web -p 8080

这里即在8080端口开启gitea的web服务。通过直接访问ip地址加端口的形式,点击sign in即可进入初始化配置。数据库类型选用SQLite3即可,域名等可根据局域网或服务器实际情况配置,无域名且非本机的情况下,填入服务端的IP即可。
初始化完成后,退出账号登陆,然后Ctrl+C停止服务,使用exit命令退回原本账号,然后添加service文件使其开机启动以及崩溃后自动恢复。
使用root权限编辑/etc/systemd/system/gitea.service文件,并填入service内容,我的例子如下:

[Unit]
Description=Gitea
After=network.target syslog.target

[Service]
Type=simple
User=git
Group=git
Restart=on-failure
RestartSec=20
WorkingDirectory=/home/git/gitea
ExecStart=/home/git/gitea/gitea web -p 8080
ExecStop=/bin/kill $MAINPID
Environment=USER=git
HOME=/home/git

[Install]
WantedBy=multi-user.target

然后加载、启动服务。

sudo systemctl daemon-reload
sudo systemctl start gitea
sudo systemctl enable gitea

至此,完成了gitea的安装。
为了方便使用,需及时在后台添加用户的SSH Key或GPG Key,linux下通过ssh-keygen生成公私钥后,添加~/.ssh/id_rsa.pub中的内容即可。
如果要新建一个项目,选择新建一个仓库,填入仓库名后创建即可。此处将仓库名命名为TestGitea。
按照提示,需要给仓库添加一个初始文件,这个文件可以是README.md。
使用ssh方式连接时,Gitea给出的命令如下

touch README.md
git init

git add README.md
git commit -m "first commit"
git remote add origin git@10.20.20.2:ayahuasec/TestGitea.git
git push -u origin master

其中,第一行通过touch命令创建了一个空的README.md文件,此处可通过任何方法创建README.md文件,也可以包含一些初始内容。
然后git init在本地初始化仓库,并通过git add README.md将README.md文件包含进仓库中。
接着提交这一次更改,git commit -m "first commit",后面的-m附加参数为这一次commit的注释。
如果是第一次使用git命令执行commit,会提示

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: empty ident name (for <ayahuasec@DESKTOP-TGU2LJF.localdomain>) not allowed

这个时候按提示通过git config设置好commit时的默认用户名和邮箱即可。之后重新运行git commit命令。
之后的git remote add origin http://10.20.20.2:8080/ayahuasec/TestGitea.git则设置了远程仓库的地址,然后git push -u origin master将本地仓库推送到服务器中。
完成这些,就正常初始化了Gitea中该仓库的内容,可以自由的添加或修改文件了。
如果在网页端修改了仓库中的内容,可通过git pull更新本地内容。或删除本地仓库,通过git clone git@10.20.20.2:ayahuasec/TestGitea.git重新克隆该远程仓库到本地。
如果在本地修改了仓库的内容,以README.md文件为例,则可通过执行git add表示需要提交该文件的修改

git add README.md

然后通过git commit提交本地修改

git commit -m "Comment for this commit"

之后通过git push将本地修改推送并合并到远程仓库即可。

标签: Linux, git

添加新评论