Git jest niesamowity (gościnnie Obsidian + iCloud)

No więc mam sobie tego Obsidiana, w którym prowadzę praktycznie całe swoje życie cyfrowe. Ostatnio przeniosłem tam księgowość, dokumentację medyczną, a i rozważam rezygnację ze zbieractwa zdjęć w Immichu - nigdy nie przeglądam tych dziesiątek tysięcy zdjęć - i zamiast tego wrzucanie relacji z kilkoma wybranymi zdjęciami z ważnych dla mnie wydarzeń czy wyjazdów do dokumentu. Dużo lepiej się to przegląda, dużo łatwiej do tego wrócić. Obsidian ma nawet funkcję "prezentacja slajdów", która robi dobrą robotę np. na slajdowisko.

Jednym z zagadnień do ogarnięcia jest temat synchronizacji danych między urządzeniami. Chcę mieć dostęp do mojego skarbca zarówno na komputerze, gdzie pracuję i tworzę dokumenty, oraz na telefonie, gdzie następnie "konsumuję" te dokumenty - na przykład odhaczam zadania z listy zadań czy zakupy z listy zakupów. Ważnym tematem jest również kopia zapasowa, najlepiej zgodnie z zasadą 3-2-1 (trzy kopie, dwa urządzenia, jedno gdzie indziej).

Mój dotychczasowy system składał się z następujących komponentów:

Słuchajcie: to nie jest prosty system.

Na szczęście Obsidian oferuje dwie natywne opcje synchronizacji: Sync oraz iCloud. Obie te opcje twierdzą, ze są szyfrowane od końca do końca, dlatego wybrałem po prostu to, co już miałem - iCloud.

Teraz tak: ja już wcześniej używałem iClouda. Nie był najgorszy, ale w kontekście moich wymagań miał jedną fundamentalną wadę - synchronizowanie repozytorium Git w iCloudzie to jest KOSZMAR. Problemem jest prawdopodobnie to, w jaki sposób Git przechowuje zmiany - każda jest osobnym plikiem, ich tworzenie jest w pewnym sensie poza kontrolą; zapisujesz zmiany, i pliki "się robią". Osobiście mam nawyk zapisywania małych zmian bardzo często, i pewnie iCloud tego nie lubił. Poza tym, synchronizowanie repo w ogóle nie było mi potrzebne, mój ówczesny system z LiveSync tego w ogóle nie miał. Dlatego mam jasno postawiony cel: wracam do iClouda, ale tak, żeby repozytorium się nie synchronizowało.

Zacznijmy od samego niesynchronizowania. W iCloud działa to tak, że do nazwy pliku wystarczy dopisać .nosync, i folder po prostu się nie synchronizuje (źródło). Tworzę folder ObsidianRepo.nosync, w jego wnętrzu uruchamiam git init, repozytorium się tworzy, ale nie jest synchronizowane w iCloud - żyje jedynie na moim komputerze - doskonale.

Tylko "co teras?". Mam folder z repo (konkretnie to z folderem .git), który się nie synchronizuje, ale wszystkie inne pliki przecież powinny się synchronizować. Tutaj wchodzimy w magię Gita. Git pozwala na zmianę lokalizacji plików, które wersjonuje, przy użyciu mechanizmu worktree. Generalnie możesz powiedzieć Gitowi "to nie są pliki, których szukacie" i wskazać inny folder, za pomocą komendy albo wpisu w pliku config. Sposób, w jaki ja to zrobiłem, wygląda następująco:

Rozwiązanie działa doskonale, teraz mogę wywalić i zapomnieć o utrzymywaniu: CouchDB, fejkowego certyfikatu oraz ręcznego przekierowania w OPNsense. Docker, Debian, Proxmox i OPNsense na razie zostają - ale kto wie, może wpadnę na kolejny pomysł, w którym będę rezygnował z kolejnej rzeczy, której się uczyłem przez poprzednie pół roku. Nie żałuję niczego 🐓.

Chodź, jest debata