CLI tool build on top of git to make collaboration easier.
Find a file
2025-08-26 09:30:39 +00:00
.forgejo/workflows ci: add minimalistic CI (#4) 2024-12-21 18:27:16 +01:00
src fix: sync whole repo if no path is provided 2025-04-21 15:01:22 +00:00
.envrc chore: add .envrc to load flake 2025-04-11 18:08:36 +00:00
.gitignore chore: add .envrc to load flake 2025-04-11 18:08:36 +00:00
Cargo.lock fix: match Cargo.lock & Cargo.toml version 2025-04-21 15:07:51 +00:00
Cargo.toml chore: v0.2.2 2025-04-21 15:02:25 +00:00
flake.lock feat: sac switch command 2024-12-21 18:27:26 +01:00
flake.nix fix(hydraJobs): typo 2025-08-26 11:30:22 +02:00
README.md docs: added an installation guide 2025-03-02 19:45:23 +01:00

SAC

SAC ist ein CLI-tool basierend auf git. Es soll die arbeit damit erleichtern.

Die Grundidee ist es, die nötigen Schritte um lokale Änderungen mit einem Remote-Repository zu synchronosieren auf einen zu reduzieren.

$ sac sync

SAC wird (wahrscheinlich) zu einer nicht ganz so hübschen commit history führen, weswegen SAC in kombination mit branches genutzt werden sollte, welche anschließend sqash-merged werden können, um auf main eine saubere history zu erhalten.

Installation

sac kann mit dem nix package manager genutzt werden:

{
    inputs = {
        sac = {
            url = "git+ssh://forgejo@git.solarpunk.social:287/GTA-HEG/SAC.git";
            inputs.nixpkgs.follows = "nixpkgs";
        };
    };
}

Die Flake exposed sac unter: sac.packages.${system}.default, wobei system z.B. x86_64-linux ist.

CLI

Enwurf für das command interface für SAC.

sac clone

Um ein remote Git Repository zu klonen:

$ sac clone REMOTE LOCAL

REMOTE gibt the URL an, von welcher das remote Repository geklont werden soll.
LOCAL gibt den lokalen Pfad an, bei welchem das lokale Repository erstellt werden soll. Ist kein lokaler Pfad angegeben, wird das Repository in einem Unterordner mit dem Repositorynamen erstellt.

Dabei wird der folgende Befehl ausgeführt:

  1. git clone REMOTE LOCAL

sac sync

Um lokale Änderungen mit dem Remote-Repository zu synchronisieren:

$ sac sync

Dabei werden die folgenden commands ausgeführt:

  1. git add -A
  2. git commit
  3. git push

Wenn git push fehlschlägt (weil die Remote-Branch vor der lokalen Branch ist), werden außerdem folgende Befehle ausgeführt:

  1. git pull --rebase
  2. git push

Wenn git pull --rebase fehlschlägt (weil merge Konflikte vorliegen), wird sac sync beendet und der Nutzer wird gebeten zuerst die Mergekonflikte zu lösen. Dafür kann folgendes genutzt werden:

  • Code-Editor
    • die meisten haben eine sehr übersichtliche möglichkeit die Konflikte zu beheben
  • sac merge
    • eigener Command

Sollten keine lokalen Änderungen vorliegen werden folgende Befehle ausgeführt:

  1. git pull --rebase
  2. git push

Bei Mergekonflikten wird ebenfalls eine Warnung angezeigt.

Offline

Mit der --local Flag kann verhindert werden, dass die Änderungen mit dem Remote-Repository synchronisiert werden.

Das kann nützlich sein, wenn zum Beispiel keine Internetverbindung vorliegt.

sac merge (improvement)

Dieser command hat erstmal geringe priorität weil die meisten Editoren schon eine gute built-in methode haben um Mergekonflikte zu resolven.

Um Mergekonflikte aufzulösen:

$ sac merge

Öffnet ein TUI in welchem alle Dateien mit Mergekonflikten angeschaut werden können. Zudem kann entschieden werden, ob:

  • keine Änderung übernommen wird
  • beide Änderungen übernommen werden
  • eigene Änderung übernommen wird
  • remote Änderung übernommen wird Und das für jeden Konflikt.

Wenn keine Mergekonflikte bestehen, schlägt der Command fehl.

sac branch

Um eine Branch zu erstellen:

$ sac branch NAME

Dabei werden folgende Befehle ausgeführt:

  1. git checkout -b NAME
  2. git push
  3. git branch --set-upstream-to origin/NAME

Dieser command switched also automatisch zu der neu erstellen Branch.

Base Branch (improvement)

Um eine Branch / ein commit anzugeben, von dem Abgezweigt werden soll kann die --from Flag verwendet werden.

$ sac branch NAME --from main

Hierbei muss der git checkout Befehl angepasst werden.

Ich weiß gerade noch nicht ganz wie genau, aber das dürfte in den git-docs stehen.

sac switch

Um die branch zu wechseln:

$ sac switch BRANCH

Selbe funktionsweise wie git switch.

sac delete

Um eine branch zu löschen:

$ sac delete BRANCH

Dadurch wird die branch sowohl lokal als auch remote gelöscht.

Dabei werden folgende Befehle ausgeführt:

  1. git branch -D BRANCH
  2. git push -D origin BRANCH

Lokal

Durch die --local flag kann verhindert werden, dass die Branch auf dem Remote gelöscht wird.

sac log

Um die Commit-Hisotrie auszugeben:

$ sac log

Normalerweise werden dabei Autor, Datum, Commit-Hash und die erste Zeile der Commit message angezeigt.

--long

Zeigt erweiterte Informationen an:

  • Committer (sollte dieser von dem Autor abweichen)
  • komplette Commit message

--short

Zeigt verkürzte Informationen an:

  • kurzer Commit-Hash
  • Autor (Name)
  • Commit message (erste Zeile)

--branch NAME

Zeigt die commits von einer Bestimmten branch an

--commit

Zeigt einen einzelnen Commit in der erweiterten Form an.
Dabei wird immer Autor und Committer angezeigt

sac user

Um Nutzerdaten festzulegen oder anzuzeigen:

$ sac user

Es werden folgende Befehle ausgeführt:

  1. git config --global user.name NUTZERNAME
  2. git config --global user.email E-MAIL

Wenn ein Nutzername angegeben wird ändert sac die config.
wird sac user ohne weitere argumente ausgeführt werden stattdessen die aktuellen Informationen ausgegeben.

Eine E-Mail Adresse ist optional. Wird sie nicht angegeben wird sac@example.com verwendet.

Lokal

Die Nutzerdaten können lokal für dieses Projekt gesetzt werden durch die --local flag.