背景介紹#
想使用一個 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
即可。