背景介绍#
想使用一个 lightweight、free 的文件同步软件,浅找了一下都比较重,突然想到 Git,它原生支持多人分布式协作,并且都有 Git 服务器。
大概的原理是,监听本地目录下子文件和子目录的变化,在变化后自动 Commit,repo 接收到 Commit 后,会触发 Hook,这样就可以实现回调操作,也就是自动 Pull。一来二去,文件同步的自动上传和自动下载这两个核心要点就已拿捏了。
环境准备#
源码下载#
点击前往源码下载页面,点击【克隆 / 下载】按钮,再点击【下载 ZIP】,如下图:
源码压缩包下载后,自行解压。
然后开一个 cmd
并切换到源码的目录,比如 D:/git-file-sync
,输入 npm i
下载源码运行所需的依赖文件。
配置修改#
打开源码中的文件 src/index.ts
:
// 必填配置
const user = 'root';
const password = 'P@ssw0rd';
const repo = '192.168.0.228:8080/gitlab-instance-be4f27ff/webhook-tests.git';
const localPath = '/home/xiaoquantang/dev/tests/git-sync/webhook-tests'; // !!本地目录,必须确保这是一个空目录
// 可选配置
const pushDelayWhenChange = 1000; // 文件发生变动后,多久上传数据,单位毫秒,建议值大于 0
const httpServerPort = 3000; // http 服务器端口
必须填写的配置如下:
user
:Git 登录用户名password
:Git 登录密码repo
:Git 仓库地址,如果没有,请先前往 GitLab 之类的平台创建一个仓库,注意不能带有http://
或https://
前缀localPath
:本地保存目录,注意,该目录必须是一个空目录,即该目录下没有任何文件
可选的配置如下:
pushDelayWhenChange
:当目录中的文件或子目录发生变更后,多久将变更上传至 Git 仓库httpServerPort
:Http 服务器的端口,用于接收 Git 仓库的消息推送,实现文件更新功能
GitLab 配置#
开启本地访问#
点击【管理员】,调整页面后,点击左侧底部的【设置 > 网络】,然后在右侧找到【出站请求】,勾选第一个选项,然后点击保存更改
为仓库添加 webhook#
打开 Git 仓库,点击左侧的【设置 > Webhooks】,在右侧需要进行以下操作:
- 在
URL
栏填写地址,格式为http://这里填写 git-file-sync 程序运行主机的局域网IP:3000
,这里的3000
端口是git-file-sync
程序运行后创建的 Http 服务器端口,可以根据自己需求修改 - 勾选【触发来源】下面的【推送事件】
- 取消勾选【SSL 验证】下面的【启用 SSL 验证】
- 点击【添加 webHook】按钮
注意:假如有 10 台主机上都运行了 git-file-sync
,每台主机都会创建一个 HTTP 服务器,所以,这里就需要配置 10 台主机的 Webhook,效果就是,仓库如果有推送事件,GitLab 会把事件循环推送给所有的 Webhook。
启动文件同步程序#
启动一个 cmd
窗口,然后切换到 git-file-sync
源码目录,先输入 yarn
还原依赖,最后输入 yarn dev
即可。