In der Softwareentwicklung gibt es unterschiedliche Varianten, wie git eingesetzt werden kann.
Dabei spielen grundsätzliche organisatorische Regelungen einen Rolle (z.B. deutsche oder englische
Commit Messages), die Integration in bestehende System (z.B. Jira oder CI / CD Tools), aber auch
die Art, wie und für welche Zwecke Branches angelegt werden sollen.
Ich will euch hier kurz vorstellen, wie wir in unseren Projekten vorgehen.
Wie ihr bereits wisst, setzen wir in unseren Projekten Bitbucket ein. Neben Bitbucket verwenden wir Jira und Confluence und damit einen Teil des sogenannten Atlassian-Stacks. Alle Tools sind kostenslos nutzbar und das Zusammenspiel der Systeme funktioniert einwandfrei. Als Build-Tool verwenden wir Jenkins, der bei uns in einem Docker-Container auf einem lokal installierten Server läuft.
Unsere Projekte haben einen master branch aus dem wir unsere Apps erstellen. Für jedes Feature oder jeden Bugfix erstellen wir einen eigenen Branch nach dem Muster:
feature/<jira-ticket-nr>-<kurzbeschreibung>
oder
bug/<jira-ticket-nr>-<kurzbeschreibung>
Dafür branchen wir für die Entwicklung des Features oder Bugs vom master Branch ab (wir verwenden unseren Alias für checkout):
git co -b <branchname>
Damit die Integration in Jira funktioniert verwenden wir für die commit message folgendes Muster:
git commit -m "[<jira-ticket-nr>] <commit message>"
Damit werden die Commits und Branches mit den entsprechenden Jira-Tickets verknüpft.
Wenn wir die Entwicklung an einem Ticket fertiggestellt haben, erstellen wir auf Bitbucket einen Pull Request (PR). Ein anderer aus dem Team kann sich diesen anschauen und kommentieren bzw. approven. Nach einem Approval mergen wir den Branch mit Hilfe der Bitbucket Merge-Funktion zurück in den master. Sollte das aufgrund von einem Merge-Konflikt nicht möglich sein. rebasen wir unseren lokalen Branch gegen den remote (^= origin) master und mergen die Änderungen händisch in unseren Branch (der Intellij 3-Wege Merge ist dabei ein guter Helfer). Danach müssen die Änderungen nur noch geforce pusht werden.
git rebase origin/master // nach dem Mergen ... git rebase --continue git push -f
Der Merge des PRs über Bitbucket sollte nun möglich sein.
Um Intellij als Merge-Tool einzustellen, können wir wiederum die gitconfig anpassen:
... [merge] tool = intellij [mergetool "intellij"] cmd = "idea64 merge \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"" trustExitCode = true [diff] tool = intellij [difftool "intellij"] cmd = "idea64 diff \"$LOCAL\" \"$REMOTE\"" ...