Zusammenarbeits-Guide
jinflow nutzt Git fuer Zusammenarbeit. Jedes Tenant-AFS ist von Geburt an ein Git-Repository. Teams teilen Arbeit ueber GitHub (oder jeden anderen Git-Remote).
Zwei Wege zum Start
Abschnitt betitelt „Zwei Wege zum Start“1. Neuer Tenant (Erster Analyst)
Abschnitt betitelt „1. Neuer Tenant (Erster Analyst)“Tenant aus einem Domain Pack erstellen, mit GitHub verbinden, pushen:
# Aus Pack erstellenjinflow init --pack millesime --tenant szo
# Mit GitHub verbinden (Repository zuerst auf GitHub erstellen)jinflow afs remote https://github.com/org/afs-millesime-domaine_zufferey.git
# Initialen Zustand pushenjinflow afs push -m "initial setup"2. Bestehendem Tenant beitreten (Zweiter Analyst)
Abschnitt betitelt „2. Bestehendem Tenant beitreten (Zweiter Analyst)“AFS von GitHub klonen — kein Pack noetig:
# Von GitHub klonenjinflow init --clone https://github.com/org/afs-millesime-domaine_zufferey.git
# Daten synchronisieren und bauenjinflow make --tenant millesime.domaine_zufferey --sync --cleanDies erstellt das vollstaendige Tenant-Layout (raw/, build/, store/) um das geklonte AFS. Das Pack wird nicht benoetigt — das AFS IST das analytische Framework.
Taeglicher Workflow
Abschnitt betitelt „Taeglicher Workflow“# Tagesbeginn: Team-Aenderungen pullenjinflow afs pull
# Arbeiten: Signals, Theses, Notizen bearbeiten# Bauen und erkundenjinflow makejinflow explore
# Tagesende: Aenderungen pushenjinflow afs push -m "added io_coefficient signal"AFS-Befehle
Abschnitt betitelt „AFS-Befehle“jinflow afs remote # aktuellen Remote anzeigenjinflow afs remote <url> # Remote setzen (hinzufuegen oder aktualisieren)jinflow afs status # Branch, Tags, Aenderungen anzeigenjinflow afs log # Build-Logbuch (git log)jinflow afs log -n 10 # letzte 10 Eintraegejinflow afs pull # vom Remote pullen (nur Fast-Forward)jinflow afs push # alle Aenderungen committen + pushenjinflow afs push -m "message" # mit eigener Commit-NachrichtWas versioniert wird
Abschnitt betitelt „Was versioniert wird“Das AFS (afs/) ist das Git-Repository. Es enthaelt:
| Inhalt | Versioniert | Hinweise |
|---|---|---|
| Signals, Theses, Verdicts | Ja | Die analytischen Instrumente |
| SMEbits, BitBundles | Ja | Expertenwissen |
| Notebooks | Ja | Untersuchungsnotizen |
| Entities, Lineage, Contracts | Ja | Schema-Definitionen |
| dbt Macros, Seeds, Tests | Ja | Datentransformationslogik |
| Modelle (Bronze, Silver, Gold) | Ja | SQL-Quellmodelle |
| jinflow.yml | Ja | Pack-Konfiguration |
| tenant/ (Config, Logo, Seeds) | Ja | Tenant-spezifischer Inhalt |
Was NICHT in Git ist (lebt neben dem AFS):
| Inhalt | Ort | Hinweise |
|---|---|---|
| Roh-CSVs | raw/ | Unveraenderliche Quelldaten aus DLZ |
| Build-Artefakte | build/ | Kompiliertes SQL, angereicherte CSVs (regenerierbar) |
| KLS + SIS | store/ | Gebaute Datenbanken (regenerierbar via make) |
Auto-Commits
Abschnitt betitelt „Auto-Commits“jinflow make erstellt nach jedem Build automatisch einen strukturierten Einzeiler:
jinflow make: ok | clean | 34/0/1 | v0.7.9 | darwin | mig | millesime.domaine_zufferey | 12.3sjinflow afs update --do-it erstellt nach der Synchronisierung von Pack-Inhalten automatisch einen Commit.
Diese Auto-Commits erstellen ein Build-Logbuch, sichtbar via jinflow afs log.
Domain Packs sind unabhaengige Git-Repositories (z.B. jinflow-pack-millesime). Sie werden manuell geklont:
git clone https://github.com/jinflow-io/jinflow-pack-millesime.gitPack-Root konfigurieren, damit jinflow sie findet:
jinflow us --pack-root ~/jinflow-packsPack-Aenderungen fliessen via jinflow afs update --do-it in Tenant-AFS.
Konfliktloesung
Abschnitt betitelt „Konfliktloesung“jinflow afs update verwendet Three-Way-Merge (SHA-256-Manifest):
- Nur Pack geaendert → sicheres Update (automatisch angewandt)
- Nur Tenant geaendert → bewahrt (deine Anpassung gewinnt)
- Beide geaendert → Konflikt (NICHT ueberschrieben, zur manuellen Loesung markiert)
- Force-Modus →
--forcelaesst Pack bei Konflikten gewinnen
jinflow afs pull verwendet nur Fast-Forward. Wenn lokal und remote auseinanderlaufen, wird empfohlen, manuell mit git pull --rebase aufzuloesen.