myesn

myEsn2E9

hi
github

利用 Git 实现文件同步

背景介绍#

想使用一个 lightweight、free 的文件同步软件,浅找了一下都比较重,突然想到 Git,它原生支持多人分布式协作,并且都有 Git 服务器。

大概的原理是,监听本地目录下子文件和子目录的变化,在变化后自动 Commit,repo 接收到 Commit 后,会触发 Hook,这样就可以实现回调操作,也就是自动 Pull。一来二去,文件同步的自动上传和自动下载这两个核心要点就已拿捏了。

环境准备#

源码下载#

点击前往源码下载页面,点击【克隆 / 下载】按钮,再点击【下载 ZIP】,如下图:
image

源码压缩包下载后,自行解压。

然后开一个 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 配置#

开启本地访问#

点击【管理员】,调整页面后,点击左侧底部的【设置 > 网络】,然后在右侧找到【出站请求】,勾选第一个选项,然后点击保存更改
image
image

为仓库添加 webhook#

打开 Git 仓库,点击左侧的【设置 > Webhooks】,在右侧需要进行以下操作:

  1. URL 栏填写地址,格式为 http://这里填写 git-file-sync 程序运行主机的局域网IP:3000,这里的 3000 端口是 git-file-sync 程序运行后创建的 Http 服务器端口,可以根据自己需求修改
  2. 勾选【触发来源】下面的【推送事件】
  3. 取消勾选【SSL 验证】下面的【启用 SSL 验证】
  4. 点击【添加 webHook】按钮

注意:假如有 10 台主机上都运行了 git-file-sync,每台主机都会创建一个 HTTP 服务器,所以,这里就需要配置 10 台主机的 Webhook,效果就是,仓库如果有推送事件,GitLab 会把事件循环推送给所有的 Webhook。
image

启动文件同步程序#

启动一个 cmd 窗口,然后切换到 git-file-sync 源码目录,先输入 yarn 还原依赖,最后输入 yarn dev 即可。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。