iCloud & GitHub Workflow auf macOS – Ordnerstruktur, Sync & Backups (2025)
Wie ich auf mehreren Macs ohne Reibungsverluste arbeite: iCloud beherbergt alle Projektunterlagen, GitHub die Repos und Issues. Lokale Arbeitsordner bleiben schlank (keine großen Kundendaten) und Time Machine übernimmt die Backups. Deployments halten dist/ und den Server automatisch synchron.

~8 Min. Lesezeit · Veröffentlicht am
Ordnerstruktur
- iCloud → Projektordner: Enthält Dokumente, Briefings, Assets & Kundendaten. Zusätzlich liegt hier ein Alias zum lokalen Arbeitsordner.
- Mac → Benutzerverzeichnis: Pro aktivem Projekt ein Arbeitsordner als Git-Repo (GitHub-Remote). Vorteil: sensible/gewichtige Daten bleiben außerhalb des Repos → Datenschutz & schnelle Git-Operationen.
- iCloud → Webserver-Root:
/Users/<user>/Library/Mobile Documents/com~apple~CloudDocs/Work/Sites/– alle Projekte sind von jedem Mac aus erreichbar.
iCloud: Projektdaten & Webserver-Root
iCloud dient als „Single Source of Truth“ für Unterlagen und als gemeinsames Webroot für lokale Server (Apache/Nginx). Beispiel-VHost:
<VirtualHost *:8080>
ServerName dev.local
DocumentRoot "/Users/sven/Library/Mobile Documents/com~apple~CloudDocs/Work/Sites/devsite"
<Directory "/Users/sven/Library/Mobile Documents/com~apple~CloudDocs/Work/Sites/devsite">
AllowOverride All
Require all granted
</Directory>
</VirtualHost> So ist das Projekt auf jedem Mac sofort startklar – iCloud sorgt für Dateiabgleich im Hintergrund.
GitHub: Repos, Branches & PRs
- Repo schlank halten: Nur Quellcode + Build-Scripte. Keine großen Kundendaten, keine generierten Binärdateien.
- Branch-Strategie:
mainstabil; Features über Kurzlebige Branches; PRs mit Review. - Actions (optional): Lint/Tests/Builds triggern, Releases bundlen.
Sync: dist/ → Server automatisieren
Nach jedem Build halte ich dist/ und den Ziel-Server synchron. Zwei leichte Varianten:
Node.js + rsync (lokal)
// package.json (Ausschnitt)
"scripts": {
"build": "node scripts/build.mjs",
"deploy": "npm run build && node scripts/deploy.mjs"
} // scripts/deploy.mjs (Beispiel)
import { execSync } from 'child_process';
const TARGET = 'user@example.com:/var/www/html/project';
execSync(`rsync -az --delete dist/ ${TARGET}`, { stdio: 'inherit' }); SFTP (Node)
// scripts/deploy.mjs (ssh2-sftp-client)
import Client from 'ssh2-sftp-client';
import fs from 'fs-extra';
const sftp = new Client();
await sftp.connect({ host:'example.com', username:'user', password:'***' });
await sftp.rmdir('/project', true).catch(()=>{});
await sftp.uploadDir('dist', '/project');
await sftp.end(); Beide Varianten sorgen dafür, dass dist/ und der Server-Inhalt deckungsgleich bleiben.
Backups mit Time Machine
Time Machine sichert iCloud-Inhalte (lokal vorgehaltene Dateien) und die lokalen Arbeitsordner. Kritische Daten liegen damit doppelt: in iCloud und im TM-Backup.
Praxis-Tipps & Stolperfallen
- Konflikte vermeiden: Große Binaries, Node-Module,
dist/nicht in iCloud-Versionierung packen. - .gitignore sauber halten: z. B.
node_modules,dist, Editor-/Systemdateien. - Netzwerk beachten: Bei sehr großen Projekten initiale iCloud-Sync-Zeit einplanen.