Difference between revisions of "De/Git"
(→Stufe 2: Lokaler Klon zum Spielen: $HOME/.config/git/ignore) |
(Deutsches Handbuch) |
||
Line 1: | Line 1: | ||
− | Eine kleine Einführung | + | Eine kleine Einführung zur Verwendung der ''Versionsverwaltung'' Git im GnuCash-Projekt, basierend auf [[An Introduction to Git]] und [[Git]], aber mehr aufgabenorientiert. |
+ | ;Literatur: Deutsches Handbuch [{{URL:git}}book/de/v2/ Pro Git v2] | ||
[[Category:De|Git]][[Category:Git]] | [[Category:De|Git]][[Category:Git]] | ||
Line 91: | Line 92: | ||
:;benutzerspezifisch: <tt>$HOME/.config/git/ignore</tt><ref>offiziell "$XDG_CONFIG_HOME/git/ignore", where $XDG_CONFIG_HOME defaults to "$HOME/.config"</ref>. In letztere gehören alle Artefakte der verwendeten Werkzeuge, die man nicht zum Repo hinzufügen möchte. | :;benutzerspezifisch: <tt>$HOME/.config/git/ignore</tt><ref>offiziell "$XDG_CONFIG_HOME/git/ignore", where $XDG_CONFIG_HOME defaults to "$HOME/.config"</ref>. In letztere gehören alle Artefakte der verwendeten Werkzeuge, die man nicht zum Repo hinzufügen möchte. | ||
Beispiel eines Eclipse-Benutzers: <pre>*~ | Beispiel eines Eclipse-Benutzers: <pre>*~ | ||
+ | # Backups: | ||
*.bak | *.bak | ||
*.orig | *.orig |
Revision as of 06:57, 2 November 2021
Eine kleine Einführung zur Verwendung der Versionsverwaltung Git im GnuCash-Projekt, basierend auf An Introduction to Git und Git, aber mehr aufgabenorientiert.
- Literatur
- Deutsches Handbuch Pro Git v2
Contents
Was ist …
Git
Git ist eine ursprünglich von Linus Torvalds entwickelte Verteilte Versionsverwaltung (DVCS), um den Linux Quelltext ohne zentralen Server zu verwalten. Aktuelle Versionen und vielfältige Online-Dokumentation gibt es auf Git's Heimat. Insbesondere Pro Git von Scott Chacon steht in vielen Sprachen kostenlos als Git Book zur Verfügung.
Inzwischen bieten die meisten IDEs eine gute Integration von Git, es stehen aber auch viele Werkzeuge für die Befehlszeile zur Verfügung. Hilfreich ist es mindestens eins für die graphische Anzeige der verschiedenen Zweige zu haben wie git gui oder gitk.
Github
GitHub (GH) ist ein netzbasierter Dienst zur Versionsverwaltung für Software-Entwicklungsprojekte. Auch dort gibt es gute Dokumentation wie etwa Good Resources for Learning Git and GitHub.
Dort befinden sich die öffenlichen Mirror der verschiedenen Komponenten (oder Repositorien in git-isch) von GnuCash, wo man sich auch alles schn mal ansehen kann.
Zweige in Git
Für Programm und Dokumentation gibt es jeweils 2 aktive Zweige (branchs):
- maint
- ist für Bugfixes und führt zur Release 5.xx > 5.9
- master
- ist für neue Merkmale und führt zur Release 5.9xx >= 5.900.
- Siehe Release Schedule. Die Releases werden vom Releasemanager mit einem git tag markiert.
Die Website hat einen zusätzlichen Zweig beta, mit dem man Änderungen auf der [[[:Template:WebURL]]/beta/ Beta-Version der Website] testen kann, bevor man sie in master veröffentlicht.
In den anderen Komponenten ist lediglich der Zweig master aktiv.
In einigen Komponenten gibt es noch diverse andere Zweige. Das sind aber i.d.R. Relikte aus der Zeit, als das Projekt noch SVN oder zuvor CSV verwendete.
Idealerweise arbeitet man privat immer erstmal auf Zweigen wie Bug_1234567 oder zumindest work, die auf einem der Hauptzweige basieren, damit man sich nicht mit anderen Entwicklern in's Gehege kommt.
Verzweigen, aktualisieren und vereinen
- Konvention
- Die mit $ beginnenden Variablen durch sinnvolle Werte ersetzen.
Aktiven Zweig wechseln: git checkout $SELECTION
Neuen Zweig basiered auf aktuellem erstellen: git branch $NEW
- Aktualisieren und Vereinen
- Merge vs. rebase:
- Ausgangssituation
- parallele Änderungen auf beiden Zweigen
Zweig, Commits: work: B--- / maint: A---C--
- Variante 1 - merge
- Historie bleibt erhalten, ist aber unübersichtlicher.
git checkout maint; git merge work
Zweig, Commits: work: B--- / \ maint: A---C---D
- Variante 2 - rebase
- Historie wird linearisiert
- Schritt 1:
git checkout work; git rebase maint
Zweig, Commits: work: B'- / maint: A---C-
- Schritt 2:
git checkout maint; git merge work
- Anmerkung
- Git antwortet was mit fast forward, das Ergbenis ist also dasselbe als hätte man git rebase … verwendet. git merge … ist sicherer für den Fall, daß man zuvor was vergessen hat.
- Schritt 2:
Zweig, Commits: work: B'=D (maint) / maint: A---C
- Anwendungsfälle
- Solange ein Zweig noch nicht veröffentlicht wurde, rebasiere den Arbeitszweig auf den aktuellen Hauptzweig.
- Auch bei einem als PR veröffentlichen Zweig verwende rebase. Allerdings ist anschließend ein force push erforderlich.
- Von dem, was breits im Hauptrepositorium ist, sollte die Historie nie verändert werden. Es bleibt also nur ein merge. Diese Aufgabe obliegt aber eher den Maintainern.
Für jeden Zweck die passende Konfiguration
Stufe 1: Github-Klon für triviale Patches
- Voraussetzung
- Web-Browser-Führerschein
- Nachdem man dort ein Konto angelegt hat,
- kann man GnuCash-Repositorien über GitHub's Web-Interface klonen.
- Im eigenen Klone kann man dann Dateien verändern wie z.B. einen Tipfehler in der Dokumentation beheben.
- Dann erstellt man eine Pull-Request (PR).
- Falls einen dann einer der Kern-Entwickler um Anpassugen bittet, sind die dann vorzunehmen.
- Nachdem die PR gemerged oder abgelehnt wurde, kann man den Klon wieder löschen. Es sei denn, Github, baut eines Tages einen Rebase-Befehl in seine Oberfläche ein.
Stufe 2: Lokaler Klon zum Spielen
Nachdem man git installiert hat, konfiguriert man am Besten gleich seinen
- Filter
- welche Dateinamensmuster git ignorieren soll. Diese gibt es
- projekt-/ordnerspezifisch
- .gitignore oder
- benutzerspezifisch
- $HOME/.config/git/ignore[1]. In letztere gehören alle Artefakte der verwendeten Werkzeuge, die man nicht zum Repo hinzufügen möchte.
*~ # Backups: *.bak *.orig # Eclipse: /.settings/ /.autotools /.cproject /.project /nbprojectTBD
- ↑ offiziell "$XDG_CONFIG_HOME/git/ignore", where $XDG_CONFIG_HOME defaults to "$HOME/.config"