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

55 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 — тот же паттерн):
```bash
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)