Files
obsidian-vault/family/documents/vault-sync/2026-09-04-git-identity-loss-silent-commit-failure.md
T

3.0 KiB
Raw Blame History

2026-09-04 — Потеря git identity → молчаливый отказ коммитов в sync

Симптом

Трёхфазный sync (/opt/data/sync-vault.sh) отрабатывал с exit 0 и «Pushed ✓» по всем фазам, но изменения с телефона (клон /obsidian-syncthing) НЕ доходили до bare-репозитория.

  • git status --porcelain в /obsidian-syncthing показывал staged M/D/A — файлы индексировались (git add -A), но коммит не происходил.
  • В логе /tmp/vault-sync.log — только «Pushed ✓» + «Already up to date.» без единой строки [main <hash>] после 2026-09-02 12:17.

Причина

В контейнере отсутствовала git identity (user.name/user.email не заданы):

git commit → fatal: unable to auto-detect email address (got 'root@4e97770b2f2f.(none)')

sync-vault-lib.sh глушит ошибку коммита (2>/dev/null || true), поэтому фаза «успешно» шла дальше: fetch/merge/push не находили новых коммитов → «Already up to date.».

Identity жила в /root/.gitconfig, который не переживает рекреацию контейнера. Последний коммит со старой identity — 2026-09-02 12:17 (4bcd0987, Taiga <taiga@hermes>), после инцидента hermes-taiga-crashloop и пересоздания контейнера (бэкапы .bak-per-user-20260902-1229) конфиг слетел. Изменения с телефона копились ~1.5 суток (до 2026-09-04 02:06).

Исправление

В /opt/data/sync-vault.sh добавлена идемпотентная установка identity при каждом запуске (рядом с уже существующим safe.directory — тот же паттерн):

git config --global user.name "Taiga"
git config --global user.email "taiga@hermes"

Проверено: sync закоммитил все накопленные изменения одним коммитом 2b45264 (23 файла, +654/459, автор Taiga <taiga@hermes>), все три репозитория сошлись на нём, деревья чистые.

Наблюдение (не блокер)

В коммите много mode change 100755 => 100644 — нормализация exec-бита, файлы на диске и в индексе теперь 644, churn не повторяется. Если режимные изменения начнут снова появляться при записях с телефона — выставить git config core.filemode false в /obsidian-syncthing (безопасно на ZFS, см. vault-sync-infrastructure skill).

Затронутые файлы

  • /opt/data/sync-vault.sh — добавлена установка git identity
  • Коммит 2b45264 в bare /vault.git (source of truth)