最近刚学会了简单的使用Git跟GitHub,但是GitHub存在一个问题,那就是代码库是完全公开的,我不想让我所有的代码都公开,所以我还需要一个私有化的Git服务,正好我手头有一台群晖NAS,之前也见到过群晖nas上可以安装git,正好就这么折腾下。
我的目的很简单,有一个私有化的Git服务,可以用来同步我的代码库,同时我还想用作obsidian的同步中心,实际上我本可以通过NAS的synology drive来同步的,那个也自带版本库,但是就是手痒,想通过Git来进行同步,然后把我所有别的平台的笔记都同步到obsidian中来进行使用。
Git Server安装
- 安装Git Server很简单,在套件中心搜索Git即可进行安装。
- 安装完成之后先不着急打开,进入控制面板>共享文件夹,然后创建一个用于存放Git仓库的目录,并记好自己的目录创建在哪一块存储空间下,等下在进入终端时,存储空间1就是
Volume1
,以此类推;并且要同步把这个文件夹允许等下要使用的用户可读写权限。
- 创建完成后,进入控制面板>用户与群组>高级设置中启用
启动家目录服务
。
- Git Server需要使用SSH服务,进入控制面板>终端机和SNMP>终端机中,启动
启动SSH功能
。
- 最后一步我们打开安装完成的Git Server套件,在其中勾选需要使用Git服务的账号并应用。
Git Server配置
- 安装好Git Server之后,需要进入终端进行配置,通过SSH的方式进入NAS的控制台,通过
ssh admin@ip -p port
进入。
huixing@DESKTOP-27OKUAF MINGW64 ~/Desktop
$ ssh [email protected] -p 22
admin@Synology:/$ git --version
git version 2.39.1
- 进入我们一开始创建好的Git共享文件夹
volume2/GitServer
。
admin@Synology:/$ pwd
/volume2/GitServer
- 然后创建一个新文件夹作为我们的Git仓库使用,我这里创建一个铭文code的目录,并进入这个仓库,使用
git init --bare
进行初始化。
admin@Synology:/volume2/GitServer$ mkdir code
admin@Synology:/volume2/GitServer$ ls
code @eaDir
这一步有个细节是,不要直接使用
git init
,git init
是本地开发用的,如果要作为远程仓库来使用时,请使用git init --bare
。
- 此时,这个Git仓库就已经创建好了,我们可以通过本地对这个仓库进行一下
clone
试试,
huixing@DESKTOP-27OKUAF MINGW64 /d
$ git clone ssh://[email protected]:22/volume2/GitServer/code
Cloning into 'code'...
[email protected]'s password:
warning: You appear to have cloned an empty repository.
- 此时可能存在多个问题,比如clone的user没有权限,或者服务端的文件没有读写权限等等,会有多种问题,我参考的教程中提到了一个点,就是需要设置这个仓库的读写权限,设置为775。
admin@Synology:/volume2/GitServer/code$ sudo chmod -R 755 .
Password:
admin@Synology:/volume2/GitServer/code$
- 还有一个设置,我没设置这个,但是仍然生效了。
sudo chown -R username:usergroup /volume2/repo
到此为止,其实仓库的配置与本地使用就完事儿了,中间还有一些细节,比如设置你的Git邮箱跟username,这些属于Git常规设置,本文就没有描述。但是如果只到这一步的话,其实还是没办法使用的,就相当于在局域网内从Git Server拉数据,并没有推数据的方法,下面就来设置如何将Git Server作为远程仓库进行推送。
Git Server远程连接
远程连接有两种方式,一种就是通过ssh直接连接,另一种方法是通过公钥来连接,目前我使用的是前一种方法,也就是ssh直接连接。基本上玩nas的多多少少都做了内网穿透了,所以内网穿透部分就直接不说了,这个感兴趣可以自行找教程,本文就直接默认已经做过内网穿透了。
- 直接在本地
clone
远程仓库,远程仓库地址为:ssh://[email protected]:port/volume2/GitServer/code
,记得这里的nasuser
为nas上的用户名,这里建议单独配置一个,xxx.com
为内网穿透外网绑定的域名,port
为内网端口映射到外网的端口,/volume2
代表存储空间,你的Git仓库存放在那一块存储空间上,volume2
就代表存储空间2,后面的GitServer/code
代表项目的存储路径。
使用这种方式每次clone
、push
、pull
时都需要输入密码,如果使用公钥应该不用输入密码,不过目前我还没研究如何在NAS上的Git Server中配置,目前暂时也没需要,等哪天用密码用烦了再水一篇如何配置公钥。
huixing@DESKTOP-27OKUAF MINGW64 /d/obsidian (master)
$ git push origin master
[email protected]'s password:
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 20 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 954 bytes | 954.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 (from 0)
To ssh://xxx.com/volume2/GitServer/obsidian
427ecec..9e83f58 master -> master
像上面这样就已经彻底把NAS作为一个远程仓库给公司或者家里电脑作为中心仓库使用了,在公司电脑也好,家里也好,只需要定期的push
以及pull
,就可以方便的进行远程协作。
参考资料
评论区