製作一個文檔同步工具,自動同步到gitee中。。。
之所以要做這個工具是為了讓自己可以隨時用電腦時能記錄日常工作或生活。一般只需要簡單記錄下就行了。這樣我在家裡的和公司里的記錄都能同步看到。
這樣後期整理的時候看到幾個關鍵詞就能想起來具體的事情,有的也可以為日後整理成文章做一個草稿,這樣寫文章才能有頭有尾,否則想到什麼說什麼是非常不利於寫出文章的。
一開始我使用手動同步的方式,但是發現很麻煩,之後就直接用了個批處理文件來一次性同步。
git pull git add . git commit -m '同步' git push git status @echo off pause
但是這樣還是有幾個缺點:
1.有時候會忘記執行同步,特別是下班的時候,直接關機的。
2.如果一開始忘記同步了,後面就會產生git衝突。體驗不是太好。
因為後來抽時間寫了個小程式。只要把程式運行在後台,每過一段時間就會自動將文檔同步起來。
本地改過內容會自動同步到git倉庫,git倉庫內容被改後,又會自動拉取最新內容同步到本地,這樣就能保證遠程倉庫和本地最新了,兩台電腦直接的內容也就同步了。
我們開看下實現方式:
首先我們必須要有個git倉庫用來存儲數據。
去gitee.com申請開個倉庫就行。創建後得到遠程倉庫的地址,複製下來備用。
本地創建一個文件夾用於同步文檔數據。
文件加中執行 npm init -y 創建package.json
進行綁定遠程倉庫:
git init #進行初始化倉庫 git remote add origin [你的倉庫地址] git push origin git push --set-upstream origin master #首次同步倉庫
這樣之後就可以直接運行工具了。
在文件夾新增文件index.js
在文件夾中安裝依賴包
yarn add child_process yarn add iconv-lite yarn add moment
index.js中寫入程式碼:
const child_process = require("child_process");
const iconv = require("iconv-lite");
const moment = require("moment");
const encoding = "cp936";
const binaryEncoding = "binary";
//執行一行cmd命令
function cmd(text) {
return new Promise((resolve, reject) => {
child_process.exec(
text,
{ encoding: binaryEncoding },
(err = "", stdout = "", stderr) => {
if (err) {
resolve(err);
return;
}
resolve(iconv.decode(Buffer.from(stdout, binaryEncoding), encoding));
}
);
});
}
//cmd運行順序
async function run() {
const time = moment().format("YYYY-MM-DD HH:mm:ss");
let status = await cmd("git status");
if (
status.includes(
"not a git repository (or any of the parent directories): .git"
)
) {
//目錄未綁定git地址
console.log("目錄未綁定git地址");
} else {
//已綁定git
//拉取
const pull = await cmd("git pull");
if (
!pull.includes("Already up to date") &&
!pull.includes("Already up-to-date")
) {
//拉取下來了最新數據
console.log(`拉取了最新數據: ${time}`);
}
//狀態
status = await cmd("git status");
if (status.includes('(use "git add"')) {
//本地內容有改動 需要提交
await cmd("git add .");
await cmd('git commit -m "同步"');
await cmd("git push");
console.log(`同步成功: ${time}`);
}
}
}
//每30秒執行一次
setInterval(() => {
run();
}, 1000 * 30);
run();
這樣還不行,因為我們要同步的是指定目錄的文件,不是當前目錄的文件。所以我們要將其打包成一個exe文件,放到需要同步的文件夾中,才能同步指定目錄。
首先我們全局安裝一個依賴包:pkg
npm install -g pkg
然後在工具的目錄中執行:
pkg -t win index.js
即可將該nodejs項目打包成獨立的exe程式,然後將這個exe程式放在需要git同步的目錄中。
另外,為了不把這個exe文件同步到倉庫中,我們需要排除這個文件
所以要在同步的目錄中放一個.gitignore文件,裡面加上一行用於去除該exe文件
這個打包出來的文件://www.jianguoyun.com/p/DQGnvHQQ6KKRChjg8qIE
這個配置文件://www.jianguoyun.com/p/DbWJu0MQ6KKRChi486IE