Entwicklung/Git: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Downloadlinks ausgetauscht, bessere Formatierung
Keine Bearbeitungszusammenfassung |
(Downloadlinks ausgetauscht, bessere Formatierung) |
||
Zeile 14: | Zeile 14: | ||
Git-Download | Git-Download | ||
... für Windows: | * ... für Windows: https://git-scm.com/download/win | ||
... für Mac: | * ... für Mac: https://git-scm.com/download/mac | ||
Installation per Installationsprogramm und Standardeinstellungen. Zur Installation in der Entwickler-VM siehe [[Entwicklung/Entwicklersystem|Entwicklersystem]]. | Installation per Installationsprogramm und Standardeinstellungen. Zur Installation in der Entwickler-VM siehe [[Entwicklung/Entwicklersystem|Entwicklersystem]]. | ||
Zeile 58: | Zeile 59: | ||
Nach dem ersten Auschecken ist der ''development''-Branch aktiv. Dieser enthält den aktuellen Entwicklungsstand. Welcher Branch aktiv ist, siehst du mit | Nach dem ersten Auschecken ist der ''development''-Branch aktiv. Dieser enthält den aktuellen Entwicklungsstand. Welcher Branch aktiv ist, siehst du mit | ||
git branch | |||
Unser Standard-Workflow sieht vor, dass '''nie im development gearbeitet wird'''. Stattdessen musst du dir - ausgehend von ''development'' - für jede Aufgabe einen Arbeitsbranch anlegen: | Unser Standard-Workflow sieht vor, dass '''nie im development gearbeitet wird'''. Stattdessen musst du dir - ausgehend von ''development'' - für jede Aufgabe einen Arbeitsbranch anlegen: | ||
git checkout -b 1234-new-feature development | |||
Die vorangestellte Nummer ist eine Ticketnummer aus der Todo-Liste. Wenn es keine passende gibt, lässt du sie weg. Verwende nach Möglichkeit englische Namen und Kommentare, denn das OC-Projekt ist international vernetzt. Nun kannst du mit <code>git branch</code> sehen, dass es in deinem lokalen Repo zwei Branches gibt, und der neu angelegte ist aktiv. Mit dem Kommando <code>git checkout Branchname</code> kannst du zwischen den Branches hin- und herwechseln; dabei wird jeweils der Code in den Arbeitsdaten entsprechend ausgetauscht. | Die vorangestellte Nummer ist eine Ticketnummer aus der Todo-Liste. Wenn es keine passende gibt, lässt du sie weg. Verwende nach Möglichkeit englische Namen und Kommentare, denn das OC-Projekt ist international vernetzt. Nun kannst du mit <code>git branch</code> sehen, dass es in deinem lokalen Repo zwei Branches gibt, und der neu angelegte ist aktiv. Mit dem Kommando <code>git checkout Branchname</code> kannst du zwischen den Branches hin- und herwechseln; dabei wird jeweils der Code in den Arbeitsdaten entsprechend ausgetauscht. | ||
Zeile 71: | Zeile 72: | ||
Wenn du die Änderungen vorgenommen hast, zeigt dir | Wenn du die Änderungen vorgenommen hast, zeigt dir | ||
git status | |||
in roter Farbe an, welche Dateien geändert oder hinzugefügt wurden, und | in roter Farbe an, welche Dateien geändert oder hinzugefügt wurden, und | ||
git diff | |||
die Änderungen im Einzelnen. Falls dein Editor bzw. deine Eintwicklungsumgebung irgendwelche zusätzlichen Dateien angelegt hat, kannst du diese in <code>.git/info/exclude</code> eintragen, damit sie nicht ins Repository gelangen. | die Änderungen im Einzelnen. Falls dein Editor bzw. deine Eintwicklungsumgebung irgendwelche zusätzlichen Dateien angelegt hat, kannst du diese in <code>.git/info/exclude</code> eintragen, damit sie nicht ins Repository gelangen. | ||
Als nächstes musst du Git mitteilen, dass die Daten zum aktiven Branch hinzugefügt werden sollen; dies geschieht mit | Als nächstes musst du Git mitteilen, dass die Daten zum aktiven Branch hinzugefügt werden sollen; dies geschieht mit | ||
git add . | |||
für alle geänderten und neuen Dateien im aktuellen Verzeichnisbaum (falls du Branches gewechselt hast vergewissere dich evtl. mit <code>git branch</code>, dass du im richtigen bist!) Wahlweise kannst du einzelne Dateien per (Pfad+)Dateiname hinzufügen oder Wildcards verwenden. Dateien löschen kann man mit | für alle geänderten und neuen Dateien im aktuellen Verzeichnisbaum (falls du Branches gewechselt hast vergewissere dich evtl. mit <code>git branch</code>, dass du im richtigen bist!) Wahlweise kannst du einzelne Dateien per (Pfad+)Dateiname hinzufügen oder Wildcards verwenden. Dateien löschen kann man mit | ||
git rm Dateiname | |||
Nun zeigt <code>git status</code> in grüner Farbe alle vorbereiteten Änderungen an, und mit | Nun zeigt <code>git status</code> in grüner Farbe alle vorbereiteten Änderungen an, und mit | ||
git commit | |||
checkst du sie in dein lokales Repository ein. Es öffent sich ein vi-Editor, in dem du einen Kommentar eingeben musst. Schreibe eine aussagekräftige, möglichst englische Zusammenfassung in die erste Zeile, und evtl. zusätzliche Erläuterungen in die weiteren Zeilen. Wenn es nur ein einzeiliger Kommentar sein soll, kannst du dir den Editor auch sparen und den Kommentar direkt angeben mit | checkst du sie in dein lokales Repository ein. Es öffent sich ein vi-Editor, in dem du einen Kommentar eingeben musst. Schreibe eine aussagekräftige, möglichst englische Zusammenfassung in die erste Zeile, und evtl. zusätzliche Erläuterungen in die weiteren Zeilen. Wenn es nur ein einzeiliger Kommentar sein soll, kannst du dir den Editor auch sparen und den Kommentar direkt angeben mit | ||
git commit -m "Kommentar" | |||
Wenn keine neuen Dateien hinzugefügt, sondern nur vorhandene geändert werden sollen, kannst du auch das <code>add</code> mit einbauen, also alle geänderten Daten mit nur einem Befehl einchecken: | Wenn keine neuen Dateien hinzugefügt, sondern nur vorhandene geändert werden sollen, kannst du auch das <code>add</code> mit einbauen, also alle geänderten Daten mit nur einem Befehl einchecken: | ||
git commit -am "Kommentar" | |||
Mit | Mit | ||
git log | |||
siehst du nun, dass ein neuer ''commit'' in die Versionsgeschichte des aktiven Branches eingefügt wurde. Wahlweise kannst du auch mit <code>git log --stat</code> nochmals alle geänderten Dateien anzeigen lassen. | siehst du nun, dass ein neuer ''commit'' in die Versionsgeschichte des aktiven Branches eingefügt wurde. Wahlweise kannst du auch mit <code>git log --stat</code> nochmals alle geänderten Dateien anzeigen lassen. | ||
Zeile 97: | Zeile 98: | ||
Der letzte (neueste) Commit des aktiven Branches hat auch den Name HEAD, der vorletzte HEAD~1, der drittletzte HEAD~2 etc. Mit | Der letzte (neueste) Commit des aktiven Branches hat auch den Name HEAD, der vorletzte HEAD~1, der drittletzte HEAD~2 etc. Mit | ||
git diff HEAD~1 | |||
kannst du dir z.B. alle Änderungen zwischen aktuellem und vorletztem Codestand anzeigen lassen - also genau das, was du mit deinem letzten <code>commit</code> eingecheckt hast. | kannst du dir z.B. alle Änderungen zwischen aktuellem und vorletztem Codestand anzeigen lassen - also genau das, was du mit deinem letzten <code>commit</code> eingecheckt hast. | ||
Zeile 133: | Zeile 134: | ||
==== Zusammenfassung des OC-Git-Standard-Workflow ==== | ==== Zusammenfassung des OC-Git-Standard-Workflow ==== | ||
Neuen Branch für eine neue Aufgabe anlegen | * Neuen Branch für eine neue Aufgabe anlegen | ||
*# <code>git checkout development</code> | |||
*# <code>git pull upstream</code> | |||
*# <code>git checkout -b 1234-new-feature</code> | |||
*: ... oder die Arbeit an einem bereits bestehenden Branch mit <code>git checkout 1234-new-feature</code> fortsetzen | |||
... oder die Arbeit an einem bereits bestehenden Branch mit <code>git checkout 1234-new-feature</code> fortsetzen | * Programmierzyklen | ||
*# Code schreiben | |||
Programmierzyklen | *# mit <code>git status</code> / <code>git diff</code> lokale Änderungen kontrollieren | ||
*# Änderung mit <code>git add</code> / <code>git commit</code> ins lokale Repo einchecken | |||
*# mit <code>git pull --rebase upstream development</code> auf aktuellen OC-Code aufsetzen | |||
*# weiter bei 1, wenn der Code noch nicht fertig ist | |||
* Hochladen | |||
*# <code>git push origin 1234-neues-Feature</code> | |||
*# ''Branch 1234-neues-Feature'' im Github aufrufen und Pull Request starten | |||
* Nicht mehr benötigte Branches löschen | |||
Hochladen | *# lokal: <code>git checkout development</code> / <code>git branch -d 1234-neues-Feature</code> | ||
*# auf dem Fork: <code>git push origin :1234-neues-Feature</code> | |||
Nicht mehr benötigte Branches löschen | |||
==== Commits zusammenfassen ==== | ==== Commits zusammenfassen ==== | ||
Zeile 228: | Zeile 222: | ||
== Noch ein paar Gimmicks == | == Noch ein paar Gimmicks == | ||
zeigt die Doku für ein Git-Kommando an. | * <code>git diff Branchname</code> zeigt alle Unterschiede zwischen dem aktuellen Branch und einem anderen an. | ||
* <code>git cherry-pick Commit-ID</code> übernimmt einen bestimmten Commit (von wo auch immer) in den aktiven Branch. | |||
* <code>git diff --name-only --diff-filter=U</code> zeigt eine Liste aller konfliktbehafteten Dateien nach einem Merge an | |||
* <code>git gc</code> führt eine [http://de.wikipedia.org/wiki/Garbage_Collection Garbage Collection] durch und gibt Platz im lokalen Repository frei. Per <code>git reset --hard</code> oder <code>git branch -d</code> gelöschte Commits werden damit endgültig weggeworfen (vorher sind sie via <code>git reflog</code> noch wiederherstellbar). | |||
* <code>git grep Suchbegriff</code> durchsucht den Code des aktuellen Verzeichnisbaums; für zahlreiche Optionen siehe Git-Doku. | |||
* <code>git help Kommando</code> zeigt die Doku für ein Git-Kommando an. | |||
== Forenbeiträge zu Git == | == Forenbeiträge zu Git == |