|
|
||
|---|---|---|
| .forgejo/workflows | ||
| src | ||
| .envrc | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| flake.lock | ||
| flake.nix | ||
| README.md | ||
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:
git clone REMOTE LOCAL
sac sync
Um lokale Änderungen mit dem Remote-Repository zu synchronisieren:
$ sac sync
Dabei werden die folgenden commands ausgeführt:
git add -Agit commitgit push
Wenn git push fehlschlägt (weil die Remote-Branch vor der lokalen Branch ist),
werden außerdem folgende Befehle ausgeführt:
git pull --rebasegit 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:
git pull --rebasegit 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:
git checkout -b NAMEgit pushgit 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 checkoutBefehl 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:
git branch -D BRANCHgit 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 demAutorabweichen)- 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:
git config --global user.name NUTZERNAMEgit 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.