abapGit Tutorial: Versionskontrolle für ABAP Cloud und klassisches ABAP

kategorie
DevOps
Veröffentlicht
autor
Johannes

abapGit ist das wichtigste Open-Source-Tool für die Versionskontrolle von ABAP-Code. In diesem Tutorial lernst du, wie du abapGit installierst, konfigurierst und effektiv für die professionelle Code-Verwaltung nutzt - sowohl für klassisches ABAP als auch für ABAP Cloud Entwicklung.

Was ist abapGit?

abapGit ist ein Open-Source Git Client für ABAP, der vollständig in ABAP geschrieben ist. Er ermöglicht es, ABAP-Code in Git-Repositories zu speichern, zu versionieren und mit anderen Entwicklern zu teilen.

Warum ist abapGit so wichtig?

In der klassischen SAP-Welt war Versionskontrolle immer ein Sorgenkind:

  • Transportwesen ist gut für Deployments, aber schlecht für kollaborative Entwicklung
  • Versionen im System sind begrenzt und nicht branchbar
  • Code-Reviews waren praktisch unmöglich
  • Backup und Recovery waren umständlich

abapGit löst all diese Probleme, indem es ABAP-Objekte in standardisierte Git-Repositories überführt:

Vorher (ohne abapGit)Nachher (mit abapGit)
Versionen nur im SAP-SystemVollständige Git-Historie
Kein BranchingFeature Branches, Bugfix Branches
Schwierige Code-ReviewsPull Requests mit Diff-Ansicht
Transportbasiertes TeilenClone und Push wie bei jeder anderen Sprache
Vendor Lock-inCode auf GitHub/GitLab sicherbar

abapGit vs. gCTS

Eine häufige Frage: Wann nutze ich abapGit und wann gCTS?

KriteriumabapGitgCTS
ZielgruppeEntwicklerIT Operations
FokusCode-VersionierungTransport-Automatisierung
Git-IntegrationVollständig (Push/Pull)Nur Export
Open Source✅ Ja❌ Nein (SAP Produkt)
KostenKostenlosSAP Lizenz erforderlich
CI/CD PipelineManuell einrichtbarNative SAP Integration
EmpfehlungEntwicklung & CollaborationEnterprise Deployments

Kurzfassung: abapGit für Entwickler, gCTS für Enterprise-CI/CD. Beide können kombiniert werden.


Installation und Einrichtung

Voraussetzungen

  • SAP NetWeaver 7.02 oder höher (für klassisches ABAP)
  • ABAP Environment auf SAP BTP (für ABAP Cloud)
  • GitHub, GitLab, Azure DevOps oder anderer Git-Provider Account
  • ADT (Eclipse) für ABAP Cloud oder SE80/SE38 für klassisches ABAP

Installation auf On-Premise Systemen

Schritt 1: abapGit Report herunterladen

Die aktuellste Version findest du auf github.com/abapGit/abapGit.

  1. Navigiere zu Releases
  2. Lade die Datei zabapgit_standalone.prog.abap herunter

Schritt 2: Report im SAP-System erstellen

" Transaktion SE38 oder SE80
" Neuen Report anlegen: ZABAPGIT_STANDALONE
" Oder: ZABAPGIT (wenn du das volle Paket installieren möchtest)
  1. Öffne SE38 (ABAP Editor)
  2. Erstelle einen neuen Report: ZABAPGIT_STANDALONE
  3. Kopiere den kompletten Code aus der heruntergeladenen Datei
  4. Aktiviere den Report

Schritt 3: Erste Ausführung

" Starte den Report
REPORT zabapgit_standalone.

Beim ersten Start wirst du aufgefordert:

  • SSL-Zertifikate zu installieren (für HTTPS-Verbindungen)
  • Proxy-Einstellungen zu konfigurieren (falls vorhanden)

Installation in ABAP Cloud (SAP BTP)

In ABAP Cloud ist die Situation anders: abapGit ist nicht direkt installierbar, da kein Zugriff auf SE38/SE80 besteht. Stattdessen gibt es zwei Alternativen:

Option 1: abapGit für Eclipse (ADT Plugin)

  1. Öffne Eclipse mit ADT
  2. Gehe zu Help → Install New Software
  3. Füge die Update Site hinzu: https://eclipse.abapgit.org/updatesite/
  4. Installiere abapGit for ABAP Development Tools
  5. Starte Eclipse neu

Option 2: abapGit Repository Interface (ab SAP BTP ABAP Environment 2302)

SAP stellt ein natives Repository-Interface bereit:

  1. Öffne ADT
  2. Rechtsklick auf dein ABAP Cloud Projekt
  3. Configure → Link ABAP Repository to Git

Diese Integration ist noch im Aufbau, bietet aber native SAP-Unterstützung.

Git-Provider Konfiguration

SSH-Key einrichten (empfohlen)

Für sichere Kommunikation mit GitHub/GitLab:

Terminal window
# SSH-Key generieren (auf deinem lokalen Rechner)
ssh-keygen -t ed25519 -C "[email protected]"
# Öffentlichen Schlüssel anzeigen
cat ~/.ssh/id_ed25519.pub

Den öffentlichen Schlüssel fügst du dann in deinem Git-Provider unter Settings → SSH Keys hinzu.

Personal Access Token (Alternative)

Für HTTPS-Zugriff:

  1. GitHub: Settings → Developer Settings → Personal Access Tokens
  2. GitLab: Preferences → Access Tokens
  3. Token mit repo Berechtigung erstellen
  4. Token in abapGit als Passwort verwenden

Grundlegende Workflows

Repository klonen (Clone)

Der erste Schritt ist das Klonen eines bestehenden Repositories in dein SAP-System.

In abapGit Standalone:

  1. Starte ZABAPGIT_STANDALONE
  2. Klicke auf + Clone
  3. Gib die Repository-URL ein: https://github.com/username/repo.git
  4. Wähle das Ziel-Paket (z.B. ZABAP_GIT_DEMO)
  5. Klicke auf Clone

In ADT (Eclipse):

  1. Öffne die View abapGit Repositories (Window → Show View)
  2. Klicke auf + (Link Repository)
  3. Wähle dein ABAP-Projekt und gib die URL ein
  4. Wähle oder erstelle ein Paket

Änderungen stagen (Stage)

Nach dem Bearbeiten von ABAP-Objekten müssen Änderungen für den Commit vorbereitet werden:

  1. Öffne abapGit
  2. Wähle dein Repository
  3. Klicke auf Stage
  4. Du siehst eine Liste aller geänderten Objekte
  5. Wähle die Objekte aus, die du committen möchtest

Typische Ansicht:

Änderungen:
[x] ZCL_MY_CLASS (Modified)
[x] ZIF_MY_INTERFACE (Modified)
[ ] ZCL_TEST_CLASS (Modified) ← Nicht committen
[x] ZABAP_PROGRAM (New)

Commit erstellen

Ein Commit speichert deine Änderungen in der Git-Historie.

Best Practices für Commit Messages:

feat: Neue Validierung für Kundennummer implementiert
- Prüfung auf gültige Kundennummer in ZCL_CUSTOMER_VALIDATION
- Unit Tests für Randfälle ergänzt
- Fehlermeldung lokalisiert (DE/EN)
Refs: JIRA-1234

Konventionen:

  • feat: Neue Funktionalität
  • fix: Bugfix
  • refactor: Code-Refactoring ohne Funktionsänderung
  • docs: Dokumentation
  • test: Tests hinzugefügt oder korrigiert

Push zu Remote

Nach dem Commit müssen die Änderungen zum Remote-Repository gepusht werden:

  1. Klicke auf Push
  2. Authentifiziere dich (SSH-Key oder Token)
  3. Bestätige den Push
Pushing to origin/main...
✓ 3 objects pushed successfully

Pull vom Remote

Um Änderungen von anderen Entwicklern zu holen:

  1. Klicke auf Pull
  2. abapGit vergleicht Remote und lokale Version
  3. Bei Konflikten: Manuelle Auflösung erforderlich

Achtung: Pull überschreibt lokale Objekte! Sichere vorher deine Änderungen.


Integration mit GitHub und GitLab

GitHub Repository einrichten

Schritt 1: Neues Repository erstellen

Terminal window
# Auf github.com oder via CLI
gh repo create mein-abap-projekt --private

Schritt 2: Repository-Struktur verstehen

abapGit erzeugt eine standardisierte Ordnerstruktur:

mein-abap-projekt/
├── src/
│ ├── zcl_my_class.clas.abap
│ ├── zcl_my_class.clas.locals_def.abap
│ ├── zcl_my_class.clas.locals_imp.abap
│ ├── zcl_my_class.clas.testclasses.abap
│ ├── zcl_my_class.clas.xml
│ ├── zif_my_interface.intf.abap
│ ├── zif_my_interface.intf.xml
│ └── zmy_program.prog.abap
├── .abapgit.xml
└── README.md

Dateikonventionen:

  • .clas.abap - Klassen-Implementation
  • .clas.locals_def.abap - Lokale Typen/Konstanten
  • .clas.locals_imp.abap - Lokale Klassen
  • .clas.testclasses.abap - ABAP Unit Tests
  • .intf.abap - Interface-Definition
  • .prog.abap - Programm/Report
  • .xml - Metadaten (Paket, Beschreibung, etc.)

GitLab Integration

GitLab funktioniert identisch zu GitHub. Wichtige Unterschiede:

# GitLab Repository URL
https://gitlab.com/username/mein-abap-projekt.git
# GitLab Personal Access Token
Preferences → Access Tokens → Scope: api, read_repository, write_repository

Azure DevOps Integration

Für Microsoft-Umgebungen:

# Azure DevOps Repository URL
https://dev.azure.com/organization/project/_git/repository
# Personal Access Token
User Settings → Personal Access Tokens → Scope: Code (Read & Write)

Code-Snippets für typische Szenarien

Szenario 1: Neues Projekt initialisieren

" 1. Erstelle ein neues Paket in SE80/ADT
" Paket: ZABAP_GIT_DEMO
" Transportauftrag: Lokal (für Entwicklung)
" 2. Erstelle initiale Objekte
CLASS zcl_demo_application DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.
CLASS zcl_demo_application IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
out->write( 'Hello from abapGit managed project!' ).
ENDMETHOD.
ENDCLASS.
" 3. In abapGit: Repository verlinken und ersten Commit machen

Szenario 2: Feature Branch Workflow

Terminal window
# Auf deinem lokalen Rechner (nach Clone)
git checkout -b feature/neue-validierung
# Oder direkt in abapGit:
# 1. Repository → Settings → Default Branch
# 2. Manuell Branch wechseln vor dem Pull

Im SAP-System:

  1. Pull den neuen Branch
  2. Entwickle dein Feature
  3. Stage und Commit
  4. Push zum Feature Branch
  5. Erstelle Pull Request auf GitHub/GitLab

Szenario 3: Konfliktauflösung

Wenn zwei Entwickler die gleiche Klasse geändert haben:

" Datei: zcl_shared_class.clas.abap
" <<<<<<< HEAD (deine Änderung)
METHOD calculate_total.
rv_result = iv_quantity * iv_price * ( 1 - iv_discount ).
ENDMETHOD.
" =======
" >>>>>>> origin/main (Remote-Änderung)
METHOD calculate_total.
rv_result = iv_quantity * iv_price.
rv_result = rv_result - ( rv_result * iv_discount / 100 ).
ENDMETHOD.

Lösung:

  1. Entscheide, welche Version korrekt ist (oder kombiniere beide)
  2. Entferne die Konfliktmarker
  3. Teste die Änderung
  4. Commit und Push

Szenario 4: .abapgit.xml konfigurieren

Die Projektkonfiguration wird in .abapgit.xml gespeichert:

<?xml version="1.0" encoding="utf-8"?>
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DATA>
<MASTER_LANGUAGE>D</MASTER_LANGUAGE>
<STARTING_FOLDER>/src/</STARTING_FOLDER>
<FOLDER_LOGIC>PREFIX</FOLDER_LOGIC>
<IGNORE>
<item>/.gitignore</item>
<item>/LICENSE</item>
<item>/README.md</item>
<item>/.github/</item>
</IGNORE>
</DATA>
</asx:values>
</asx:abap>

Wichtige Einstellungen:

  • MASTER_LANGUAGE: D für Deutsch, E für Englisch
  • FOLDER_LOGIC: PREFIX (empfohlen) oder FULL
  • IGNORE: Dateien, die nicht ins SAP-System importiert werden

Best Practices für Team-Arbeit

1. Branching-Strategie definieren

Empfohlenes Modell für ABAP-Projekte:

main (oder master)
├── develop
│ ├── feature/US-001-kunde-anlegen
│ ├── feature/US-002-material-suche
│ └── bugfix/FIX-042-preisberechnung
└── release/1.0.0

Regeln:

  • main: Nur stabile, getestete Releases
  • develop: Integration aller Features
  • feature/*: Ein Branch pro User Story
  • bugfix/*: Schnelle Fehlerbehebungen
  • release/*: Release-Kandidaten

2. Pull Request Workflow etablieren

  1. Feature entwickeln im eigenen Branch
  2. Pull Request erstellen auf GitHub/GitLab
  3. Code Review durch mindestens einen Kollegen
  4. CI/CD Checks (Syntax, ABAP Unit Tests)
  5. Merge nach Genehmigung
  6. Branch löschen nach Merge

3. Code Review Checkliste für ABAP

## ABAP Code Review Checkliste
### Funktionalität
- [ ] Erfüllt der Code die Anforderungen?
- [ ] Sind Randfälle behandelt?
### Code-Qualität
- [ ] Clean ABAP Prinzipien befolgt?
- [ ] Sprechende Variablennamen?
- [ ] Keine Magic Numbers?
### Performance
- [ ] Keine SELECT * ohne Einschränkung?
- [ ] Richtige Indexnutzung?
- [ ] Bulk-Operationen wo möglich?
### Tests
- [ ] Unit Tests vorhanden?
- [ ] Testabdeckung ausreichend?
### Dokumentation
- [ ] Öffentliche Methoden dokumentiert?
- [ ] Komplexe Logik erklärt?

4. Commit-Konventionen einhalten

Nutze Conventional Commits für konsistente Historie:

<type>(<scope>): <subject>
<body>
<footer>

Beispiele:

feat(customer): Validierung für internationale Kundennummern
- ISO 3166-1 Ländercode-Prüfung implementiert
- VAT-ID Validierung für EU-Kunden
- Unit Tests für alle Ländervarianten
Closes #42
fix(pricing): Division durch Null bei 0% Rabatt
Die Preisberechnung brach ab, wenn ein Rabatt von 0%
angegeben wurde. Jetzt wird der Fall korrekt behandelt.
Fixes #57

5. .gitignore für ABAP-Projekte

Erstelle eine sinnvolle .gitignore:

# OS-spezifische Dateien
.DS_Store
Thumbs.db
# IDE-Dateien
.idea/
*.iml
# Lokale Konfiguration
.local/
# Generierte Dateien
*.log

6. Dokumentation im Repository

README.md Vorlage:

# Projekt: Kundenmanagement Erweiterung
## Übersicht
Dieses Repository enthält Custom-Erweiterungen für das SD-Modul.
## Installation
1. Klone das Repository in Paket `ZCUSTOMER_EXT`
2. Aktiviere alle Objekte
3. Führe den Setup-Report `ZCUSTOMER_SETUP` aus
## Abhängigkeiten
- SAP S/4HANA 2023 oder höher
- Paket `ZABAP_UTILS` (siehe anderes Repo)
## Entwicklung
1. Feature Branch erstellen
2. Änderungen implementieren
3. Unit Tests ergänzen
4. Pull Request erstellen
## Kontakt
Maintainer: [email protected]

Troubleshooting

Problem: SSL-Zertifikatsfehler

Error: SSL certificate problem: unable to get local issuer certificate

Lösung:

  1. Transaktion STRUST öffnen
  2. SSL Client Standard → Zertifikat hinzufügen
  3. GitHub/GitLab Root-Zertifikat importieren

Problem: Proxy-Verbindungsfehler

Error: Could not connect to proxy

Lösung: In abapGit → Settings → Proxy:

Proxy Host: proxy.firma.de
Proxy Port: 8080
Bypass: localhost,*.intranet.firma.de

Problem: Objekt kann nicht deserialisiert werden

Error: Object ZCL_EXAMPLE could not be deserialized

Mögliche Ursachen:

  • Fehlende Abhängigkeiten (andere Klassen/Interfaces)
  • Inkompatible SAP-Version
  • Korrupte XML-Metadaten

Lösung:

  1. Abhängigkeiten zuerst importieren
  2. .xml Datei prüfen und ggf. korrigieren
  3. Im Notfall: Objekt manuell anlegen, dann Pull wiederholen

Problem: Push wird abgelehnt

Error: rejected - non-fast-forward

Lösung:

Terminal window
# Lokal: Änderungen fetchen und rebasen
git pull --rebase origin main
# In abapGit: Erst Pull, dann Konflikte lösen, dann Push

Fazit

abapGit revolutioniert die ABAP-Entwicklung, indem es moderne Versionskontrolle in die SAP-Welt bringt. Die wichtigsten Takeaways:

  1. abapGit ist unverzichtbar für professionelle ABAP-Entwicklung
  2. Git-Workflows (Branching, Pull Requests) funktionieren auch mit ABAP
  3. Team-Kollaboration wird durch Code Reviews massiv verbessert
  4. Backup und Portabilität - dein Code gehört dir, nicht dem SAP-System

Nächste Schritte:

  1. ✅ abapGit installieren (Standalone oder ADT Plugin)
  2. ✅ Erstes Repository klonen oder erstellen
  3. ✅ Feature Branch Workflow im Team etablieren
  4. ✅ Code Reviews über Pull Requests einführen

Weiterführende Artikel