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 即可。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。