Obsidian Git 同步設定教學:適用 Android、Windows 及 macOS

目錄

想知道怎麼用 GIthub 免費跨平台同步 Obsidian 筆記知識庫嗎?來看這篇教學就對了。

以前都只有用 HackMD 跟 Notion 做筆記(其實現在也會),後來陸續嘗試各種有腦圖、大綱式的筆記軟體像是 RemNote、LogSeq 以後,最終還是覺得 Obsidian 算是本地優先(Local-first)筆記軟體裡面比較優秀的。

本地優先的好處

本地優先的筆記軟體有一大好處就是在網路不佳/斷網的時候不會像 Notion/HackMD 一樣要原地轉圈圈等待。有的時候我只是突然想起某些資訊想從我的筆記裡翻找,被網路卡個幾秒鐘想看筆記的心情都沒有了XD

壞處

任何事物都是有好有壞的,這種本地優先的筆記軟體最明顯的缺點就是只適合自己做筆記,不適合雲端協作,同步也比較麻煩一點,所以我目前都是拿 HackMD 或 Notion 跟別人協作 / 分享單篇筆記等,自己的筆記才會用 Obsidian。

還記得我剛剛說 Obsidian 這種本地筆記軟體同步比較麻煩嗎?沒關係,教學文這不就來了嗎😎。

  1. 我們會使用 Github 來儲存我們的筆記(會設成 private,不用擔心筆記被別人看到),過程中需要設定 SSH Key,所以這套方案不適合不固定設備的使用者(每次都重新設定環境會比較麻煩)
  2. 這篇文章會教你怎麼在 Android 和 Windows 上設定同步,macOS 跟 Windows 的步驟應該大同小異,但如果你是 iOS 使用者就比較抱歉了,歡迎在留言區討論~

首先我們要先在電腦上安裝 Git ,請根據你的作業系統自行選擇,這裡以 Windows 為例:

./git-download-page.webp

打開下載的安裝檔安裝完畢後,應該可以在電腦中找到 Git Bash:

./search-git-bash.webp

打開 Git Bash 後我們要先設定使用者名稱跟密碼,當我們把筆記同步上 Github 的時候會自帶這個資訊(必須要設定,不然會 Commit 失敗)

1
2
git config --global user.name "your_username"
git config --global user.email "your_email@gmail.com"

這一步的 username 跟 email 可以跟等等 Github 上註冊的帳號/使用者名稱不一致沒關係

接著我們要去 Github 的網站 上註冊帳號:

./github-web-signup.webp

註冊完帳號以後點擊右上角頭像 → 選擇 Settings:

./github-head-image.webp ./select-settings.webp

在左側找到 SSH and GPG keys:

./find-ssh-gpg.webp

接著點擊 SSH keys 區塊標題右側的 New SSH key:

./click-new-ssh-key.webp ./add-new-ssh-key.webp

要填寫的內容:

  1. Title:這個隨便取,主要是讓你自己區別每個 key 是屬於哪個裝置的,這邊建議你現在如果是在用筆電就設成像 laptop 之類的名稱(等等設定手機的時候設定 android 之類的)。
  2. Key type:維持預設值 Authentication Key 就行。
  3. Key:接下來要在本機 git 中生成。

我們打開 Git Bash,輸入 ssh-keygen

./ssh-keygen.webp

可以看到他說 Your public key has been saved in /c/Users/<你的使用者名稱>/.ssh/...,我們到他說的目錄去看看:

./ssh-folder-content.webp

簡單來說 ssh-keygen 會生成兩組金鑰,一組是私鑰,只能放在你的電腦上(id_ed25519);另一組是公鑰(id_ed25519.pub),我們要把公鑰打開(可以用記事本或任何你喜歡的文字編輯器開啟):

./public-key-content.webp

把內容複製到剛剛 Github 的頁面上:

./paste-public-key.webp

新增完我們的 key 之後就可以來創建我們的倉庫了!

在 Github 的網頁右上角有個 “+” 號,我們點擊他並點 New repository ./click-new-repository.webp

接著進行設定,主要要注意這幾點:

  1. Repository name 可以任意取(英文、數字、-),我這裡取叫 obsidian-example
  2. 權限記得選擇 Private 而不是 Public,不然你的筆記庫就全部被看光光啦!
./create-repo-example.webp

接著會來到這個畫面,我們先點擊 SSH 的選項後複製 SSH 的地址:

./copy-ssh-link.webp

然後我們在電腦上找一個想要放置 Obsidian 筆記庫的地方,這邊以 D:\obsidian-example 舉例,我們先打開 Git Bash 並 cdD:

./cd-d.webp

接著輸入 git clone 加上剛剛複製的 SSH 連結:

./success-clone-win.webp

成功 Clone 下來以後我們就可以在 D: 看到有個 obsidian-example 的資料夾了:

./explorer-look-d.webp

我們打開 Obsidian 軟體,並選擇這個資料夾作為 vault:

./select-exists-folder.webp ./select-folder-exploerer.webp

成功打開筆記庫以後,現在就要來設定插件用來同步啦!

./select-setting-obisian.webp

點「第三方外掛程式」→「啟用社群外掛程式」:

./enable-plugin.webp

然後點擊「瀏覽」並搜尋 “git”:

./browse-plugin.webp ./search-git.webp

看到的第一個插件,作者 Vinzent, (Denis Olehov) 的就是我們要裝的插件,點擊他安裝並啟用:

./install-git-plugin.webp ./enable-git-plugin.webp

成功啟用後把設定頁面關掉,你會看到左側多了一個 Git 同步的選項:

./git-sync-plugin-icon.webp

我們現在來建立第一個筆記測試看看:

./create-computer-test.webp ./show-nothing.webp

從上圖你會看到,右側什麼都沒有,那麼為什麼會這樣呢?

因為這個 Github Repository(倉庫)從被我們創建到現在什麼都沒有,他也不知道要把變更更新到哪裡去(如果你剛好會用 Git 的話,簡單來說現在連一條 Branch 都沒有),所以我們第一次要先用 Git Bash 自己推上去:

1
2
3
git add .
git commit -m "init"
git push
./git-init-push-example.webp

然後我們再對文件做一點點變更,再看看插件的狀況(修改完可以按一下右上角的 Refresh 刷新狀態):

./second-test-and-refresh.webp

可以看到插件已經有內容了,我們點擊最左側的 Commit-and-sync 按扭:

./commit-and-sync.webp

右下角會即時顯示狀態:

./pushed-1-file.webp

此時你在 Github 應該也可以看到更新:

./github-check-update.webp

到此,如果你是要在電腦之間同步,那你只需要在另一台電腦安裝 git、設定 SSH key、把 Repository git clone 下來、用 Obsidian 打開就完成了!(插件甚至不必重新安裝,因為 Obsidian 是把插件跟著你的筆記庫一起帶著走的)

介紹一下剛剛使用的同步插件的重要功能:

./git-sync-plugin-intro.webp

比較常用的是圈起來這幾個:

./git-sync-plugin-crucial.webp

功能由左到右分別是:

  • Commit-and-sync:推送本地變更到雲端
  • Commit:儲存變更但不推到雲端(eg. 斷網的時候用)
  • 把本地儲存的變更補上傳到雲端(eg. 網路恢復的時候補上傳用)
  • 把雲端的變更下載下來(基本上每次打開 Obsidian 我都會做一次,避免其他裝置的變更我忘記下載下來,等等教你怎麼設定成每次打開 Obsidian 自動跑)
  • Refresh:有時候插件跟你的變更狀態沒有完全一致,可以按一下刷新。

你可以在設定 → 第三方外掛程式裡面看到 Git 插件,對他進行設定:

./setting-git-sync-plugin.webp

把 Pull on startup 打開,就可以在打開 Obsidian 的時候自動從雲端拉取變更了!

./enable-pull-on-startup.webp

當然他還有很多設定,像是每隔多少分鐘自動同步一次,這就靠各位自行去摸索了。我是比較習慣自己選擇什麼時候要上傳同步🤣。

如果你不只想要在電腦上使用 Obsidian,想要能夠同步到 Android 的手機或平板上的話,就繼續看下去吧(如果你是 iOS / iPadOS 使用者可以自行上網搜尋怎麼在自己的系統上使用 git)

我們會使用到 Termux,他是一款強大的開源終端機模擬器(可以參考 Ivon 的部落格 ),由於太過強大所以不能直接在 Google Play 上架完整版,我們要先安裝一個開源的應用程式商店 F-Droid

./f-droid-download-button.webp

下載 .apk 檔並安裝後,打開 F-Droid 這款 App:

./android-open-f-droid.webp

由於個人不太喜歡他古老經典的介面,所以我們先用他下載一個比較新版的商店 Droid-ify:

./fdroid-home-ui.webp ./search-bar-hint.webp ./search-droid-ify.webp

安裝好 Droid-ify 後,我們打開它並搜尋 Termux:

./droid-ify-search-termux.webp

請安裝上圖圈起來的 Termux 和 Termux:Widget 兩個 App。

Termux:Widget 的功能是讓我們可以把 git pull 和 git push 的指令做成手機桌面上的 Widget(外掛組件),就不用打指令同步。

你可能會疑惑「不是有 Obsidian 插件嗎?」但那款插件在手機上支援度不完全,所以我們採用別的方法在手機上同步。

打開 Termux 輸入以下指令更新套件:

1
2
pkg update
pkg upgrade

然後我們需要安裝 opensshgit 套件,當然也要像電腦端一樣進行 git 設定:

1
2
3
4
pkg install openssh git vim

git config --global user.name "your_username"
git config --global user.email "your_email@gmail.com"

其實跟電腦端設定差不多,一樣是用 ssh-keygen 指令生成 key:

1
ssh-keygen

生成 key 以後要 cd 到 key 存放的目錄 ~/.ssh,並把有 .pub 結尾的公鑰檔案的內容複製下來,可以用以下指令找到檔案:

1
2
cd ~/.ssh # 移動到 ssh 存放的目錄,Termux 預設應該都是這裡
ls # 顯示當下目錄有什麼文件
./termux-find-ssh-file.webp

可以看到我們要找的檔案是 id_ed25519.pub,我們用 cat 指令把它印出來:

1
cat id_ed25519.pub

然後你應該會在畫面上看到你的公鑰,這邊就不截圖了,跟電腦端示範的時候一樣,複製起來並到 Github 網站上面新增 SSH key,輸入進去。

Tips: 還記得我們說過 ssh-keygen 產生的是一組私鑰、一組公鑰嗎?基本上私鑰只會在你的手機/在你的電腦(也就是打 ssh-keygen 的裝置上)才有,公鑰被別人知道則是沒什麼問題。所以你如果要用 LINE 之類的通訊軟體把 key 丟到電腦上,用電腦在 Github 的網站上設定是沒問題的喔!

Termux 內部算是一個虛擬的空間,跟 Android 原本是隔開的,這樣我們手機版 Obsidian 沒辦法正常讀取我們同步下來的筆記庫。

所以我們現在要讓 Termux 可以讀寫手機內部的儲存空間,直接讓 Termux 把筆記同步在手機目錄下,Obsidian 就能讀了!

在 Termux 中打:

1
termux-setup-storage

此時可能會跳出視窗,問你允不允許 Termux 存取手機空間,請點擊「是」

如果不小心點到「否」,也可以再從手機的設定 → 應用程式 → 找到 Termux,把存取檔案空間的權限打開。

成功打開權限以後我們可以發現手機的檔案被掛載在 ~/storage/shared/ 底下:

./android-storage-connect-succ.webp

我們一樣到 Github 上複製 SSH 的連結:

./android-github-copy-ssh.webp

我希望我們的筆記庫放在 手機內部儲存空間/Obsidian/obsidian-example,所以我們先創 Obsidian 這個資料夾:

1
2
cd ~/storage/shared # 到手機內部儲存空間的位置
mkdir obsidian # 創資料夾

接著進入 obsidian 資料夾裡面 git clone 我們剛剛複製的 Github 連結:

1
2
3
cd obsidian
# 下面這行記得把 SSH 連結換成你的倉庫
git clone git@github.com:coke5151/obsidian-example.git
./android-clone-repo.webp

在我們設定同步腳本之前,因為我們已經把目前的筆記庫抓下來了,其實可以先用 Obsidian 打開筆記庫看看效果:

選擇 “Use my existing vault”:

./android-use-my-existing-vault.webp

選擇 “On this device”:

./android-on-this-device.webp

還記得我們剛剛把筆記抓到哪嗎?obsidian/obsidian-example,選到這資料夾並選擇「使用這個資料夾」:

./android-to-path.webp

點擊「允許」:

./android-allow-folder-permission.webp

有可能會問你允不允許插件,當然是打開,沒有插件的 Obsidian 就沒有靈魂了😎:

./android-obsidian-allow-plugin.webp

接著你應該就能看到自己筆記庫裡的內容了!不過我建議把 Git 插件設定成 “disable on this device”,畢竟我們手機端沒有打算用它同步,乾脆不要讓這個插件在手機上運作:

./android-obsidian-setting-button.webp

點擊「第三方外掛程式」:

./android-third-party.webp

然後點開 Git 插件的設定,並把 “Disable on this device” 打開:

./android-git-plugin.webp ./disable-on-this-device.webp

終於來到最後一個部分了,我們新增一些腳本,同步的時候才不要手動打開 Termux 打指令!

首先我們 cd 到家目錄,並創一個 .shortcuts 資料夾然後進去(資料夾名稱一定要一模一樣):

1
2
3
cd ~
mkdir .shortcuts
cd .shortcuts

然後我們輸入 nano Pull 來創建一個叫 Pull 的檔案,輸入後會進入 Nano 的介面:

./nano-ui.webp

很重要很重要的一點,這攸關你怎麼退出 Nano,那就是:

畫面底部那些按鍵提示的 ^ 代表的是 Ctrl 鍵,所以舉例他寫 Exit 的按鍵是 ^X所以退出要按一下 Termux 給你的 CTRL,再按鍵盤大寫 X

既然你知道怎麼退出了,那在退出前來輸入 Pull 的腳本吧:

1
2
3
4
#!/usr/bin/bash
cd ~/storage/shared/obsidian/obsidian-example
# 記得換成你的筆記庫的位置,畢竟你可能不叫 obsidian-example
git pull

然後按 Ctrl + X 左檔,他可能會問你是否要存檔、存成什麼檔名,就選 Yes 就對了。

接著是 Push 的腳本:

1
2
3
4
5
#!/usr/bin/bash
cd ~/storage/shared/obsidian/obsidian-example
git add -A
git commit -m "sync from android"
git push

兩個腳本都存好檔後,我們就可以回到手機桌面,新增一個外掛程式:

./android-add-widget.webp ./find-termux-widget.webp

新增完 Widget 以後如果沒有如圖看到 PullPush 兩個選項,可以按一下 Widget 右上角的 Refresh 鍵:

./refresh-widget.webp

在處理完這些設定以後我們日常的工作流就變得非常輕鬆了:

  1. 電腦打開 Obsidian 會自動拉取雲端的變更 → 做筆記 → 做完筆記記得要按 Commit-and-Sync 推到雲端。
  2. 平板/手機先按一下桌面上的 Pull 拉取變更 → 打開 Obsidian 閱讀/編輯筆記 → 做完筆記關掉 Obsidian → 按桌面的 Push 同步變更到雲端。