ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

基于Git与纯文本的跨平台笔记系统部署指南

基于Git与纯文本的跨平台笔记系统部署指南

1. 项目概述:为什么需要一份跨平台的Bear部署指南?

如果你是一名重度依赖Markdown进行知识管理和写作的开发者或内容创作者,那么对Bear这款笔记应用一定不陌生。它以优雅的设计、流畅的写作体验和强大的标签系统著称,在macOS和iOS生态中备受推崇。然而,当你的工作流需要扩展到Linux服务器、FreeBSD工作站,甚至是跨平台的开发环境中时,一个现实的问题就摆在了面前:Bear的官方客户端仅限苹果生态。

这并不意味着Bear的核心价值——即用纯文本(Markdown)管理结构化知识——无法在其他平台上延续。恰恰相反,Bear所倡导的“用文件夹和标签组织笔记”的理念,其底层无非是存储在特定目录下的.md文件和一个元数据数据库。我们的目标,就是拆解这套逻辑,在Linux、macOS和FreeBSD上,复现甚至超越原生Bear的“无感”同步与便捷管理体验,构建一个真正属于你自己的、数据主权在握的“Bear”工作流。

这份指南的核心,不是教你安装某个名为“Bear”的第三方克隆软件(虽然社区有类似尝试),而是提供一套方法论和工具链,让你能在任何支持命令行的*nix系统上,搭建一个以Git为核心版本控制、以纯文本为存储格式、并能通过本地或远程同步实现跨设备一致性的知识库。你将学到如何用fswatchinotifywait监听文件变化,用rsyncSyncthing进行点对点同步,用VimVSCode或任何你喜欢的编辑器进行写作,最终获得一个开放、可扩展、且绝不输于原生的跨平台笔记解决方案。

2. 核心方案设计与工具选型

要实现跨平台的Bear式体验,我们需要一个稳固的、不依赖特定GUI客户端的核心架构。经过多年在各种环境下的折腾与磨合,我总结出一套以“纯文本仓库 + 自动化同步 + 通用前端”为铁三角的方案。这个方案的优势在于其极简的依赖和极强的可控性。

2.1 核心架构解析

整个系统的核心是一个用Git管理的目录,我们称之为“笔记仓库”。仓库内,每个笔记都是一个标准的Markdown文件(.md),你可以用任何文本编辑器打开和编辑。文件的组织方式完全模仿Bear或你喜欢的任何逻辑:可以按项目分文件夹,也可以用#标签在文件内容或YAML Front Matter中进行标记。

为什么选择Git作为核心?Git不仅是版本控制系统,更是我们的“时间机器”和“冲突解决器”。每一次修改都有记录,你可以随时回退到任何一个历史版本。当你在手机(通过Working Copy等App)、办公室的Linux和家里的Mac上同时修改了笔记,Git的合并机制能最大程度地帮你自动解决冲突,对于无法自动解决的,它会清晰地标记出来,让你手动处理。这比许多闭源同步方案的黑盒处理要透明和可靠得多。

同步层如何工作?我们通过文件系统监控工具(如fswatch,inotify-tools)来检测笔记仓库内文件的变动(新增、修改、删除)。一旦检测到变动,就自动触发一个同步脚本。这个脚本的核心任务是将本地变更提交到Git,然后推送到一个远程Git仓库(如GitHub、Gitee或自建的Gitea)。其他设备则通过定时拉取(git pull)或同样基于文件监控的拉取来获取更新。

前端编辑器的选择这是最自由的部分。在Linux上,你可以用Vim/Neovim配合coc.nvim等插件获得媲美IDE的Markdown体验;可以用VSCodeVSCodium,其丰富的插件生态(如Markdown All in One, Paste Image)能极大提升效率;甚至可以用Typora(虽然其最新版本已转向付费,但旧版本或开源替代如MarkText仍是优秀选择)。在FreeBSD上,这些编辑器同样可以通过Ports或pkg轻松安装。在macOS上,除了上述选择,你甚至可以继续使用Bear官方客户端来编辑仓库内的单个文件(需手动指向仓库目录),但这会失去自动化同步的便利,不推荐作为主力。

2.2 工具链选型与考量

不同的操作系统在工具可用性上略有差异,以下是经过实战检验的选型建议:

  1. 文件监控工具

    • Linux (inotify):inotify-tools包中的inotifywait是首选。它轻量、高效,是Linux内核原生事件接口的封装。
    • macOS (FSEvents):fswatch是最佳选择。它提供了一个统一接口来监控macOS(FSEvents)、Linux(inotify)等多种系统的文件事件,但在macOS上最为成熟。
    • FreeBSD: FreeBSD 使用kqueue事件机制。幸运的是,跨平台的fswatch也支持kqueue,因此在FreeBSD上同样推荐安装fswatch。也可以通过Ports安装inotify-tools(其FreeBSD版本通过kqueue模拟了inotify API)。

    注意:虽然fswatch是跨平台的,但在Linux上我更倾向于使用原生的inotifywait,因为它在脚本中的输出格式更规整,易于处理。我们的部署指南将针对不同平台给出对应的监控方案。

  2. 同步与版本控制

    • Git: 毫无疑问是基石。确保所有系统上都安装了最新稳定版的Git。
    • 远程仓库:选择私有仓库服务。GitHub Private RepoGitee(国内速度佳)、或自建Gitea/GitLab实例都是好选择。如果笔记涉密程度极高,可以考虑用git-remote-gcrypt加密后推送到公开仓库,或使用Syncthing进行点对点加密同步,完全绕过Git服务器。
  3. 辅助脚本语言

    • Bash Shell: 用于编写简单的监控和同步触发脚本。它是在所有目标平台上都存在的标准环境。
    • Python 3:如果需要更复杂的逻辑,比如解析Markdown元数据、自动生成索引等,Python是更强大的选择。它的跨平台性极好。
  4. 编辑器与预览

    • 核心编辑器:按你的喜好选择。我个人的组合是:终端内用Neovim+markdown-preview.nvim插件;GUI环境下用VSCode
    • 即时预览VSCode有内置预览。Neovim需要插件。也可以使用gripmarkdown-server这类本地HTTP服务器提供实时预览。

2.3 目录结构设计示例

一个清晰、可扩展的目录结构是维持笔记库长期健康的关键。以下是我使用的结构,供你参考:

~/notes-repo/ # Git仓库根目录 ├── .git/ # Git数据库 ├── .gitignore # 忽略临时文件 ├── sync.log # 同步脚本日志(可选) ├── bin/ # 存放自定义脚本 │ ├── autosync.sh # 主同步脚本 │ └── watch_and_sync.sh # 文件监控脚本 ├── attachments/ # 统一存放图片、附件 │ ├── images/ │ └── pdfs/ └── notes/ # 笔记主体目录 ├── inbox/ # 收集箱,临时笔记 ├── projects/ # 项目相关笔记 │ ├── project-a/ │ └── project-b/ ├── areas/ # 领域知识(持续关注) │ ├── programming/ │ ├── linux/ │ └── writing/ ├── resources/ # 归档、参考资料 └── meta/ # 关于本笔记库的元信息 ├── templates.md # 笔记模板 └── index-generator.py # 自动生成索引的脚本

这种结构借鉴了PARA(项目-领域-资源-归档)方法论的思想,同时保持了文件的扁平化存储(每个笔记都是独立的.md文件),便于Git管理和全局搜索。

3. 分平台部署实战

接下来,我们将分别在Linux(以Ubuntu/Debian为例)、macOS和FreeBSD上,完成从环境准备到自动化同步的完整部署。请根据你的主要平台选择阅读。

3.1 Linux (Ubuntu/Debian) 部署详解

在Linux上部署,我们主要利用其原生的inotify机制,实现高效的文件监控。

3.1.1 基础环境准备

首先,更新包管理器并安装核心工具:

sudo apt update sudo apt upgrade -y sudo apt install -y git inotify-tools curl wget python3-pip

如果你的发行版不是基于Debian(如Fedora、Arch),请使用对应的包管理器(dnf,pacman)安装gitinotify-tools

接下来,配置Git的全局信息,并生成SSH密钥用于免密推送代码到远程仓库:

git config --global user.name "Your Name" git config --global user.email "your.email@example.com" git config --global core.autocrlf input # 处理换行符,重要! git config --global core.safecrlf warn # 生成SSH密钥,如果已有可跳过 ssh-keygen -t ed25519 -C "your.email@example.com" # 将公钥 ~/.ssh/id_ed25519.pub 的内容添加到你的GitHub/Gitea等远程仓库的SSH Keys设置中。

3.1.2 创建笔记仓库与初始化

在你喜欢的位置创建笔记仓库目录并初始化Git:

mkdir -p ~/notes-repo/notes cd ~/notes-repo git init

创建.gitignore文件,忽略不必要的文件:

cat > .gitignore << EOF # 编辑器临时文件 *~ .*.swp .DS_Store *.tmp # 本地同步日志 sync.log # 附件目录下的缓存文件(如果有) attachments/.cache/ # 某些编辑器创建的预览缓存 .preview/ EOF

创建初始笔记和目录结构,并提交第一次更改:

mkdir -p notes/inbox notes/projects notes/areas notes/resources notes/meta mkdir -p attachments/images cat > notes/inbox/welcome.md << EOF --- created: $(date -Iseconds) tags: [meta, welcome] --- # 欢迎来到你的跨平台笔记库! 这是一个基于纯文本和Git的笔记系统,可以在Linux, macOS, FreeBSD上同步工作。 ## 快速开始 1. 在 `notes/inbox/` 存放临时想法。 2. 在 `notes/projects/` 存放项目相关笔记。 3. 在 `notes/areas/` 存放持续学习的领域知识。 4. 使用 `#标签` 在笔记内容中分类,或用YAML Front Matter(如上方的`tags`)。 **享受完全掌控自己数据的乐趣吧!** EOF git add . git commit -m "Initial commit: note repository structure"

3.1.3 配置远程仓库并推送

在GitHub或Gitee上创建一个新的私有仓库(例如名为my-notes)。然后将其添加为远程仓库并推送:

# 请将下面的URL替换成你实际的仓库SSH地址 git remote add origin git@github.com:yourusername/my-notes.git git branch -M main git push -u origin main

3.1.4 编写自动化同步脚本

这是核心环节。我们在~/notes-repo/bin/下创建脚本。

首先,创建主同步脚本autosync.sh

mkdir -p ~/notes-repo/bin cd ~/notes-repo/bin cat > autosync.sh << 'EOF' #!/bin/bash # 自动同步脚本 REPO_DIR="$HOME/notes-repo" LOG_FILE="$REPO_DIR/sync.log" cd "$REPO_DIR" || exit 1 # 函数:记录日志 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE" } log "开始同步..." # 检查是否有未提交的更改 if git status --porcelain | grep -q '^[ MADRC]'; then git add . COMMIT_MSG="Auto-sync: $(date '+%Y-%m-%d %H:%M:%S') from $(hostname)" git commit -m "$COMMIT_MSG" if [ $? -eq 0 ]; then log "本地提交成功: $COMMIT_MSG" else log "本地提交失败,可能没有实质更改。" fi else log "没有检测到本地更改。" fi # 尝试拉取远程更改(可能会产生合并冲突) git pull --rebase origin main PULL_STATUS=$? if [ $PULL_STATUS -eq 0 ]; then log "拉取远程更新成功。" # 拉取成功后,尝试推送本地提交 git push origin main if [ $? -eq 0 ]; then log "推送至远程仓库成功。" else log "推送至远程仓库失败,可能网络问题或权限不足。" fi elif [ $PULL_STATUS -eq 1 ]; then log "拉取失败,可能存在需要手动解决的冲突。请检查仓库状态。" # 可以在这里发送一个桌面通知 (需要安装 libnotify-bin) # notify-send "笔记同步冲突" "请手动解决Git冲突。" -u critical else log "拉取过程中发生未知错误。" fi log "同步流程结束。" EOF chmod +x autosync.sh

这个脚本的逻辑是:先检查本地变更并提交,然后尝试拉取远程更新(使用rebase保持历史线性),最后推送。如果拉取时产生冲突,脚本会记录错误并停止,等待你手动处理。这是保证数据一致性的安全策略。

接下来,创建文件监控脚本watch_and_sync.sh,它使用inotifywait监控notes/attachments/目录:

cat > watch_and_sync.sh << 'EOF' #!/bin/bash # 文件监控与同步触发脚本 REPO_DIR="$HOME/notes-repo" WATCH_DIRS="$REPO_DIR/notes $REPO_DIR/attachments" SYNC_SCRIPT="$REPO_DIR/bin/autosync.sh" LOG_FILE="$REPO_DIR/sync.log" echo "[$(date '+%Y-%m-%d %H:%M:%S')] 启动文件监控..." >> "$LOG_FILE" # 使用 inotifywait 监控创建、修改、删除、移动事件 inotifywait -m -r -e create -e modify -e delete -e move "$WATCH_DIRS" | while read -r directory events filename; do # 防抖:等待2秒,避免短时间内多次触发(如保存文件时可能触发多次modify) echo "[$(date '+%Y-%m-%d %H:%M:%S')] 检测到变更: $events $directory$filename" >> "$LOG_FILE" sleep 2 # 查找是否有新的 inotifywait 事件,如果没有,则执行同步 if ! kill -0 "$(pidof inotifywait)" 2>/dev/null; then # 如果 inotifywait 进程已结束,则重启监控(安全机制) exec "$0" fi # 执行同步脚本 "$SYNC_SCRIPT" done EOF chmod +x watch_and_sync.sh

3.1.5 设置系统服务(开机自启)

为了让监控脚本在后台持续运行,我们将其设置为一个systemd用户服务。

创建服务单元文件:

mkdir -p ~/.config/systemd/user/ cat > ~/.config/systemd/user/note-sync.service << EOF [Unit] Description=Note Repository Auto Sync Service After=network.target [Service] Type=simple ExecStart=%h/notes-repo/bin/watch_and_sync.sh Restart=on-failure RestartSec=5 WorkingDirectory=%h/notes-repo StandardOutput=journal StandardError=journal [Install] WantedBy=default.target EOF

然后启用并启动这个服务:

systemctl --user daemon-reload systemctl --user enable note-sync.service systemctl --user start note-sync.service systemctl --user status note-sync.service # 检查状态

现在,你的Linux系统上的笔记仓库已经配置完毕。任何在notes/attachments/下的文件更改,都会在短时间内被自动检测、提交并同步到远程仓库。

3.2 macOS 部署详解

macOS的部署流程与Linux类似,但监控工具换成了fswatch,并且自启动管理使用launchd

3.2.1 基础环境准备

首先,确保已安装Homebrew(macOS包管理器)。如果未安装,请从 brew.sh 获取安装命令。

通过Homebrew安装所需工具:

brew update brew install git fswatch

Git配置步骤与Linux完全相同,请参考3.1.1节配置用户名、邮箱和SSH密钥。

3.2.2 克隆远程仓库

由于我们已经在Linux上创建了仓库并推送到远程,在macOS上我们直接克隆即可:

cd ~ git clone git@github.com:yourusername/my-notes.git notes-repo cd notes-repo

3.2.3 编写同步脚本(适配macOS)

同步脚本autosync.sh与Linux版几乎相同,可以直接复用。只需确保路径正确。我们将Linux仓库中的脚本拷贝过来,或者重新创建一份。

创建~/notes-repo/bin/目录并编写脚本(内容同Linux的autosync.sh,此处略)。记得chmod +x

3.2.4 编写监控脚本(使用fswatch)

创建watch_and_sync_mac.sh,使用fswatch

cat > ~/notes-repo/bin/watch_and_sync_mac.sh << 'EOF' #!/bin/bash REPO_DIR="$HOME/notes-repo" WATCH_DIRS="$REPO_DIR/notes $REPO_DIR/attachments" SYNC_SCRIPT="$REPO_DIR/bin/autosync.sh" LOG_FILE="$REPO_DIR/sync.log" echo "[$(date '+%Y-%m-%d %H:%M:%S')] 启动文件监控 (macOS fswatch)..." >> "$LOG_FILE" # fswatch 的 -0 选项使用 NULL 字符分隔输出,便于处理含空格的文件名 # -r 递归, -e 排除 .git 目录 fswatch -0 -r --event Created --event Updated --event Removed --event Renamed --exclude='\.git' $WATCH_DIRS | while IFS= read -r -d '' event; do echo "[$(date '+%Y-%m-%d %H:%M:%S')] 检测到变更: $event" >> "$LOG_FILE" # 防抖处理 sleep 2 "$SYNC_SCRIPT" done EOF chmod +x ~/notes-repo/bin/watch_and_sync_mac.sh

3.2.5 配置LaunchAgent(开机自启)

macOS使用launchd管理后台服务。我们为用户创建一个LaunchAgent。

创建plist文件:

cat > ~/Library/LaunchAgents/com.user.notesync.plist << EOF <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.user.notesync</string> <key>ProgramArguments</key> <array> <string>/bin/bash</string> <string>$HOME/notes-repo/bin/watch_and_sync_mac.sh</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>StandardOutPath</key> <string>$HOME/notes-repo/sync_launchd.log</string> <key>StandardErrorPath</key> <string>$HOME/notes-repo/sync_launchd.err</string> <key>WorkingDirectory</key> <string>$HOME/notes-repo</string> <key>ProcessType</key> <string>Background</string> </dict> </plist> EOF

加载并启动这个服务:

launchctl load ~/Library/LaunchAgents/com.user.notesync.plist launchctl start com.user.notesync # 检查是否运行 launchctl list | grep notesync

至此,macOS端的配置也完成了。现在你在macOS上对笔记的修改,也会自动同步到Git仓库。

3.3 FreeBSD 部署详解

FreeBSD的部署是三者中最能体现其“纯净”哲学的一个。我们将使用Ports系统或pkg包管理器来安装工具,并使用fswatch(通过kqueue支持)进行监控。

3.3.1 通过pkg安装基础工具

FreeBSD的pkg包管理器非常高效。首先更新仓库并安装软件:

sudo pkg update sudo pkg upgrade -y sudo pkg install -y git fswatch bash

FreeBSD默认shell是tcsh,我们安装bash以获得更好的脚本兼容性。你也可以选择坚持使用tcsh并调整脚本语法。

同样,进行Git全局配置和SSH密钥设置(参考3.1.1节)。

3.3.2 克隆仓库与脚本准备

克隆远程仓库到本地:

cd /usr/home/$(whoami) # 或 cd ~ git clone git@github.com:yourusername/my-notes.git notes-repo cd notes-repo

将Linux或macOS上已经写好的autosync.sh脚本复制到bin/目录下,或者重新创建。FreeBSD上的bash脚本与Linux兼容性极高,通常可以直接运行。

3.3.3 编写监控脚本(使用fswatch)

FreeBSD上我们同样使用fswatch。创建监控脚本:

cat > ~/notes-repo/bin/watch_and_sync_bsd.sh << 'EOF' #!/usr/local/bin/bash # FreeBSD 上的监控脚本 REPO_DIR="/usr/home/$(whoami)/notes-repo" WATCH_DIRS="$REPO_DIR/notes $REPO_DIR/attachments" SYNC_SCRIPT="$REPO_DIR/bin/autosync.sh" LOG_FILE="$REPO_DIR/sync.log" echo "[$(date '+%Y-%m-%d %H:%M:%S')] 启动文件监控 (FreeBSD fswatch)..." >> "$LOG_FILE" # fswatch 参数与 macOS 版类似 fswatch -0 -r --event Created --event Updated --event Removed --event Renamed --exclude='\.git' $WATCH_DIRS | while IFS= read -r -d '' event; do echo "[$(date '+%Y-%m-%d %H:%M:%S')] 检测到变更: $event" >> "$LOG_FILE" sleep 2 "$SYNC_SCRIPT" done EOF chmod +x ~/notes-repo/bin/watch_and_sync_bsd.sh

注意脚本第一行的shebang指向了/usr/local/bin/bash,因为这是我们通过pkg安装的bash路径。FreeBSD的基础系统在/usr/bin下没有bash。

3.3.4 配置rc.d脚本(开机自启)

FreeBSD使用传统的BSD风格init系统,服务脚本位于/usr/local/etc/rc.d/。我们创建一个简单的脚本来管理我们的监控进程。

创建服务脚本:

sudo cat > /usr/local/etc/rc.d/notesync << 'EOF' #!/bin/sh # PROVIDE: notesync # REQUIRE: NETWORKING # KEYWORD: shutdown . /etc/rc.subr name="notesync" rcvar="${name}_enable" pidfile="/var/run/${name}.pid" command="/usr/sbin/daemon" command_args="-P ${pidfile} -r -u $(whoami) /usr/home/$(whoami)/notes-repo/bin/watch_and_sync_bsd.sh" load_rc_config $name run_rc_command "$1" EOF

赋予执行权限并启用服务:

sudo chmod 755 /usr/local/etc/rc.d/notesync # 编辑 /etc/rc.conf 来启用服务 echo 'notesync_enable="YES"' | sudo tee -a /etc/rc.conf

现在可以启动服务了:

sudo service notesync start sudo service notesync status

这样,FreeBSD上的笔记监控服务就会在系统启动时自动运行,并在后台保持活跃。

4. 高级配置、优化与问题排查

基础部署完成后,我们可以进一步优化工作流,并了解如何应对常见问题。

4.1 冲突解决策略与手动同步

自动同步虽好,但Git冲突是无法完全避免的,尤其是当你在两台设备上离线修改了同一文件的同一区域时。我们的脚本在遇到冲突时会停止自动合并并记录错误。

手动解决冲突的流程:

  1. 当同步脚本日志(sync.log)报告拉取失败时,进入仓库目录。
  2. 运行git status,查看哪些文件处于“未合并”状态。
  3. 打开这些文件,你会看到Git标记的冲突部分(<<<<<<<,=======,>>>>>>>)。
  4. 手动编辑文件,保留你想要的内容,并删除冲突标记。
  5. 解决所有冲突后,使用git add <file>标记冲突已解决。
  6. 最后,执行git rebase --continue(如果之前是rebase失败)或直接git commit(如果是在合并状态),然后手动运行git push

为了减少冲突,养成好习惯:在一台设备上开始工作前,先手动执行一次git pull。我们的自动同步更多是用于“备份”和“捕获”更改,而非严格的实时协作。

你也可以设置一个定时任务(cron),定期执行autosync.sh,作为文件监控的补充。例如,在Linux/macOS上,每小时同步一次:

# 编辑当前用户的crontab crontab -e # 添加一行 0 * * * * cd /home/yourname/notes-repo && /bin/bash bin/autosync.sh >> sync_cron.log 2>&1

4.2 使用Syncthing实现点对点同步(备选方案)

如果你不希望依赖Git服务器,或者需要同步大型二进制文件(如图片、PDF),Syncthing是一个完美的去中心化替代方案。它可以在设备间直接、加密地同步文件夹。

  1. 在所有设备上安装Syncthing:Linux/macOS/FreeBSD均有官方包或二进制文件。
  2. 配置:在一台设备上启动Syncthing(通常是一个Web管理界面),将其他设备通过设备ID添加进来。
  3. 同步文件夹:添加你的~/notes-repo文件夹作为同步文件夹,并与其他设备共享。
  4. 注意事项:Syncthing处理的是文件,不是Git仓库。这意味着它无法处理合并冲突,后保存的文件会覆盖先前的版本。因此,强烈建议在Syncthing同步的文件夹内,仍然使用Git进行版本管理。你可以设置Syncthing忽略.git目录,但这样每台设备都需要单独执行git pull/push。一种混合模式是:用Syncthing同步notes/attachments/,而.git目录仅在一台“主机”上管理,其他设备通过Syncthing获取文件更新,但Git操作只在主机上进行。

4.3 编辑器集成与效率提升

  • VSCode:安装Markdown All in One,Paste Image,markdownlint等插件。配置Paste Image将粘贴的图片保存到attachments/images/并以当前日期时间命名,这能极大提升插入图片的效率。
  • Vim/Neovim:使用coc.nvimvim-lsp配合marksman语言服务器获得智能补全和导航。插件vim-markdownmarkdown-preview.nvim也必不可少。
  • 全局搜索:在终端,你可以使用grep -r "关键词" ~/notes-repo/notes。更高效的是使用ripgrep (rg)silver-searcher (ag)。在GUI下,VSCode的全局搜索已经非常强大。

4.4 常见问题与排查实录

问题1:监控脚本不触发同步。

  • 排查:首先检查服务是否在运行 (systemctl --user status note-syncps aux | grep fswatch)。查看日志文件sync.logsync_launchd.log(macOS)是否有错误信息。
  • 可能原因:脚本路径错误、没有执行权限、监控的目录路径不对、inotify监控数量达到系统上限(Linux下可调整/proc/sys/fs/inotify/max_user_watches)。
  • 解决:确保脚本有+x权限。在Linux上,可以临时运行./watch_and_sync.sh在前台测试,观察输出。

问题2:Git推送时要求输入密码。

  • 排查:说明SSH密钥认证未生效。
  • 解决:确保~/.ssh/id_ed25519.pub(或你使用的密钥)的内容已正确添加到远程Git托管平台的SSH Keys设置中。测试连接:ssh -T git@github.com

问题3:FreeBSD上bash脚本执行报错bad interpreter

  • 排查:脚本的shebang行指向了错误的bash路径。
  • 解决:使用which bash查看bash的真实路径(通常是/usr/local/bin/bash),并修改脚本第一行。

问题4:同步后文件换行符混乱(Windows风格CRLF)。

  • 排查:在不同系统间编辑文件可能导致换行符不一致。
  • 解决:确保Git配置中设置了core.autocrlf input(Linux/macOS)或core.autocrlf true(Windows),并在.gitattributes文件中设置* text=auto,让Git自动处理。

问题5:附件文件太大,导致Git仓库膨胀。

  • 建议:不要将大型二进制文件(如视频、大型数据集)用Git管理。使用.gitignore忽略它们,或者使用git-lfs(Git Large File Storage)扩展。更好的办法是,将附件存储在单独的对象存储(如MinIO)或同步工具(如Syncthing)中,只在笔记里保存引用链接。

经过以上步骤,你已经拥有了一个在Linux、macOS、FreeBSD上都能无缝工作、数据自主、基于开放标准的“Bear”式笔记系统。这套系统的真正力量在于其灵活性和可塑性,你可以根据自己的工作流随意定制和扩展。它可能没有原生Bear那样精致的UI,但它给予你的是百分之百的控制权和跨越任何平台的自由。

返回列表