思源筆記是一款本地筆記為主的軟體,其目前提供了148元/year的付費同步功能,但對於21世紀中國難民而言還是太貴啦。
條件允許的同學還是使用官方的同步,支援下作者。
所以,就在思考有沒有白嫖的一種方法,能同步且不要付費呢。
網上有些使用雲盤自動同步,但可能導致資料丟失。
這裡提供方法:
筆記通過小軟體的方式進行自動同步到git。
這個[siyuansyntogit]小軟體基於python開發,我只在win10上進行過測試,下方有原始碼及exe提供,諸君自取。
https://gitee.com/kingstacker/siyuansyntogit
筆者對python語言並不熟悉,這是第一個demo,當前對於我已然夠用,當然你可以自行進行更改。
軟體及環境:
win10、思源筆記v2.4.7、siyuansyntogit、git、gitee網站
(1)軟體支援功能:
>目錄正確性判斷
>網路連線線判斷,開啟軟體後,檢測到電腦聯網後會自動拉取遠端檔案同步
>檢測思源筆記開關狀態
>思源筆記軟體關閉則自動提交git同步
>小軟體執行後預設最小化 視窗執行
(2)確保你使用過Git,Git使用不再此文說明。軟體放置路徑跟思源筆記的data路徑在同一層級。git工程也在這一層級。
.gitignore檔案內容參考:避免其他資料夾同步,這裡只會同步data資料夾。思源筆記的筆記內容是存放在data資料夾中的。
conf/
history/
temp/
*exe
(3)確保已經進行了初次git提交,確保環境一切正常。enjoy it。
(4)你也可以把小軟體開機自啟:
參考:https://zhuanlan.zhihu.com/p/446167633
(4.1)建立小軟體的快捷方式。
(4.2)快捷方式拖入:win+R開啟開啟對話方塊輸入shell:startup,進入啟動資料夾
(5)小軟體執行介面圖示:小軟體開啟預設最小化執行。
檢測到思源筆記軟體關閉,則自動提交同步。
這裡使用gitee作為遠端倉庫,可以看到版本已經提交。
(6)原始碼參考:你可以進行任意更改,希望我的工作對你有所幫助。
import os
import sys
import ctypes
import time
import psutil
from subprocess import call
home_dir = os.getcwd() #獲得當前路徑
choice_list = ['上傳','下載']
def git_update():
os.chdir(home_dir)
git_add_cmd = "git add ."
git_commit_cmd = "git commit -m {}".format(gitdate)
git_push_cmd = "git push origin master"
call(
git_add_cmd + "&&" +
git_commit_cmd + "&&" +
git_push_cmd,
shell=True
)
def git_get():
os.chdir(home_dir)
git_pull_cmd = "git pull origin master"
call(
git_pull_cmd,
shell=True
)
def is_process_running(process_name):
pl = psutil.pids()
for pid in pl:
if psutil.Process(pid).name() == process_name:
return True
else:
return False
if __name__ == "__main__":
ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 6)
print("---------------------------------------------------")
print("歡迎使用 SiYuan Auto Backup,poweredBy kingstacker!")
print("---------------------------------------------------")
print("程式當前執行路徑:")
print(home_dir)
time.sleep(0.5)
print("----------------")
print("檢查程式執行路徑是否正確中...")
dir_status = int(os.path.exists(home_dir+'\data'))
if dir_status == 1:
print("程式執行路徑正確.")
pass
else:
print("未發現當前路徑存在data資料夾,請確認!")
os.system("pause")
sys.exit()
eth_exit_code = 1
print("----------------")
print('檢查網路連線狀態中,請等待...')
status_befor = 0;
auto_pull_status = 0;
while True:
if eth_exit_code == 1:
# eth_exit_code = int(os.system('ping www.baidu.com > /dev/null'))
eth_exit_code = int(os.system('ping www.baidu.com'))
else:
pass
if eth_exit_code == 1:
print('沒聯網,確認你的網路連線狀態.')
time.sleep(2)
while True:
gitdate = time.strftime("%Y-%m-%d/%H-%M-%S/%A", time.localtime())
if eth_exit_code:
break
if auto_pull_status == 0:
print("----------------")
print("拉取遠端檔案中...")
git_get()
print("拉取遠端檔案完成!")
print("----------------")
time.sleep(2)
try:
siyuan_program_status = int(is_process_running("SiYuan.exe")) # 檢視思源軟體是否開啟
except:
pass
else:
pass
if status_befor == 0 and siyuan_program_status == 1:
print("----------------")
print("發現思源軟體已開啟,等待軟體關閉...")
if status_befor == 1 and siyuan_program_status == 0:
print("----------------")
print("發現思源軟體已關閉,備份筆記到雲端中...")
print("請等待...")
print("拉取遠端檔案更新確認中...")
git_get()
print("正在提交筆記...")
git_update()
print("提交備份已完成!")
print("當前備份時間點:",gitdate)
print("----------------")
status_befor = int(siyuan_program_status)
auto_pull_status = 1;
以上。