Files
mac-home/README-SYNC.md

228 lines
5.9 KiB
Markdown

# mac-home Synchronisierungs-Toolset
Drei hilfreiche Werkzeuge um deine Dotfiles (`~/.zshrc`, `~/.gitconfig`, etc.) zwischen deinem Home-Directory und diesem Repository zu synchronisieren.
## 📦 Dateien
| Datei | Größe | Zweck |
|-------|-------|-------|
| **`sync-home-content.sh`** | 17 KB | Hauptscript mit 6 Synchronisierungs-Modi |
| **`SYNC-STRATEGY.md`** | 10 KB | Ausführliche Dokumentation & Best Practices |
| **`QUICK-START.sh`** | 6 KB | Quick-Start Guide (diesen hier lesen!) |
---
## 🚀 Schnellstart
```bash
cd ~/mac-home
# 1. Status anschauen
./sync-home-content.sh status
# 2. Mit --dry-run testen (KEINE Änderungen)
./sync-home-content.sh sync --dry-run
# 3. Echte Synchronisierung
./sync-home-content.sh sync
```
---
## 🎯 Die 6 Modi
### 1. **STATUS** — Nur Information
Zeigt welche Dateien geändert wurden (ohne zu ändern).
```bash
./sync-home-content.sh status
```
### 2. **PUSH** — Repo → Home
Kopiert vom Repository ins lokale Home-Directory.
**Nutze wenn:** Git-Update vorhanden.
```bash
./sync-home-content.sh push
```
### 3. **PULL** — Home → Repo
Kopiert vom Home-Directory ins Repository.
**Nutze wenn:** Lokal Dateien bearbeitet.
```bash
./sync-home-content.sh pull
```
### 4. **SYNC** — Bidirektional
Intelligente 2-Wege Synchronisierung.
**Nutze wenn:** Du unsicher bist, was verändert wurde.
```bash
./sync-home-content.sh sync
```
### 5. **CLEANUP** — Alte Backups löschen
Entfernt Backups älter als 30 Tage.
```bash
./sync-home-content.sh cleanup
```
### 6. **LIST** — Verwaltete Dateien
Zeigt alle Dateien, die versioniert sind.
```bash
./sync-home-content.sh list
```
---
## 🛡️ Sicherheitsfeatures
✅ **Backups:** Vor jeder Änderung wird ein Backup erstellt (`.sync-backups/`)
✅ **Dry-Run:** Mit `--dry-run` testen ohne zu ändern
✅ **Checksummen:** Content-basierter Vergleich (md5sum, nicht Timestamp)
✅ **Logs:** Alles protokolliert in `.sync-home-content.log`
✅ **Smart Conflict-Handling:** Neuere Version gewinnt automatisch (oder interaktiv)
---
## 💡 Typische Workflows
### Scenario 1: Lokal `.zshrc` bearbeitet
```bash
./sync-home-content.sh status # "≠ geändert im Home: .zshrc"
./sync-home-content.sh pull --dry-run # Test
./sync-home-content.sh pull # Sync ins Repo
git -C home-content commit -am "Update .zshrc"
git -C home-content push
```
### Scenario 2: Git-Pull → Home updaten
```bash
git pull # Repository updaten
./sync-home-content.sh push --dry-run # Test
./sync-home-content.sh push # Sync ins Home
source ~/.zshrc # (bei .zshrc reload)
```
### Scenario 3: "Weiß nicht was los ist"
```bash
./sync-home-content.sh sync --dry-run -v # Ausführlich sehen
./sync-home-content.sh sync # Bi-direktional sync
```
---
## 📋 Optionen
| Flag | Effekt | Beispiel |
|------|--------|---------|
| `-d, --dry-run` | Zeige nur, ohne zu ändern | `./sync status --dry-run` |
| `-v, --verbose` | Detaillierter Output | `./sync status -v` |
| `-i, --interactive` | Frage bei Konflikten | `./sync sync --interactive` |
| `--no-backup` | Keine Backups erstellen | `./sync push --no-backup` |
| `-h, --help` | Zeige Hilfe | `./sync -h` |
---
## 📚 Dokumentation
- **Quick-Start:** `./QUICK-START.sh` (ausgeben)
- **Detaillierte Docs:** Lies `SYNC-STRATEGY.md`
- **Logs:** `cat .sync-home-content.log`
---
## 🆘 Fehlerbehandlung
### Backup versehentlich gelöscht?
```bash
# Schaue in .sync-backups nach
ls -lh .sync-backups/
# Restore
cp .sync-backups/.gitconfig.20260928_150000.backup home-content/.gitconfig
```
### Falsche Synchronisierung?
```bash
# Checksum-Mismatch? Das sind die gültigen Einträge:
cd home-content && git ls-files
```
### Script zu langsam?
- Normal für ~14 Dateien < 1 Sek (md5sum overhead minimal)
- Bei vielen Dateien: `seq-Verarbeitung` ist bewusst, nicht parallelisierbar
---
## ⚙️ Erweiterte Nutzung
### Alias für schnellen Zugriff
```bash
# In ~/.zshrc hinzufügen:
alias synchome="~/mac-home/sync-home-content.sh"
alias synchome-status="~/mac-home/sync-home-content.sh status"
alias synchome-pull="~/mac-home/sync-home-content.sh pull --dry-run && ~/mac-home/sync-home-content.sh pull"
```
### Cron-Job für regelmäßigen Sync
```bash
# Alle 2 Stunden
0 */2 * * * cd ~/mac-home && ./sync-home-content.sh sync >> /tmp/sync-home.log 2>&1
```
---
## 🔍 Strategie: Inhalt vs. Timestamp?
Das Script nutzt **md5sum für Erkennung** + **Timestamp für Konflikt-Auflösung**:
| Aspekt | Methode | Grund |
|--------|---------|-------|
| Änderung erkennen | md5sum (Content) | Zuverlässig, Zeitzone-unabhängig |
| Konflikt lösen | Timestamp (mtime) | Welche Version ist neuerer? |
| Nur in Repo? | git ls-files | Tracking nur versionierter Dateien |
---
## ✅ Best Practices
**IMMER TUN:**
- ✓ Vor kritischen Änderungen `status` checken
- ✓ Mit `--dry-run` testen bevor echte Sync
- ✓ Logs regelmäßig prüfen: `tail .sync-home-content.log`
- ✓ Alte Backups mit `cleanup` entfernen (monatlich)
**NICHT TUN:**
- ✗ `--no-backup` ohne wichtigen Grund nutzen
- ✗ `push` als Standard-Modus (zu aggressiv)
- ✗ Mehrere Sync-Prozesse parallel laufen lassen
- ✗ `.sync-backups/` von Hand löschen
---
## 📖 Weitere Ressourcen
- Detaillierte Erklärung der Modi: `SYNC-STRATEGY.md` (5 min Lesedauer)
- Troubleshooting: `SYNC-STRATEGY.md` → Abschnitt "Troubleshooting"
- Change-Management Strategie: `SYNC-STRATEGY.md` → Abschnitt "Change-Management"
---
## 🤖 Was das Script tut
1. Liest alle in `git ls-files` registrierten Dateien
2. Vergleicht deren Checksum zwischen Repo und Home
3. Erstellt automatisch Backups bei Änderungen
4. Synchronisiert basierend auf gewähltem Modus
5. Protokolliert alles in `.sync-home-content.log`
6. Entfernt alte Backups (> 30 Tage mit `cleanup`)
---
## 💬 Fragen?
Lesen Sie `SYNC-STRATEGY.md` - fast alle Fragen sind dort beantwortet!
---
**Viel Erfolg beim Synchronisieren! 🎉**