Quellcode als Untersuchungsgegenstand: Repository, Commit, Branch und Build

Warum ein Quellcodeordner allein häufig keine hinreichend bestimmte Untersuchungsgrundlage ist und welche Repository- und Build-Informationen für eine reproduzierbare Prüfung relevant sein können.

Stand: 18.09.2026 Quellen geprüft: 18.09.2026 Autor: Mathias Ellmann Status: veröffentlicht

Software & Quellcode

Soll Quellcode technisch begutachtet werden, muss zunächst geklärt sein, welcher konkrete Codebestand tatsächlich Untersuchungsgegenstand ist. Ein Verzeichnis mit Quelldateien kann hierfür zu wenig Information enthalten: Repository-Historie, Commit-Zuordnung, lokale Änderungen, Submodule, externe Abhängigkeiten und der tatsächliche Build-Prozess können die Aussagekraft der Untersuchung wesentlich beeinflussen.

Kurzantwort

Für eine reproduzierbare Quellcodeuntersuchung sollte möglichst dokumentiert werden, aus welchem Repository der Code stammt, welcher Commit beziehungsweise welches Git-Objekt untersucht wird, welche Branch- und Tag-Referenzen hierzu gehören und ob Working Tree oder Index vom bezeichneten Commit abweichen.

Zusätzlich ist zu prüfen, ob Submodule, Abhängigkeiten, Konfigurationen oder Build-Schritte benötigt werden, um vom versionierten Quellcode zum tatsächlich untersuchten Softwareartefakt zu gelangen.

1. Was ist bei einer Quellcodeprüfung der Untersuchungsgegenstand?

Die Formulierung „der Quellcode wurde untersucht“ ist für sich genommen noch nicht hinreichend präzise. Technisch relevant ist, welche Dateien, welches Repository, welcher Versionsstand und welche ergänzenden Artefakte tatsächlich zur Verfügung standen.

Abhängig von der Fragestellung kann der Prüfgegenstand deshalb beispielsweise umfassen:

2. Repository und Quellcodeordner sind nicht gleichbedeutend

Ein exportierter Ordner kann zwar die Quelldateien eines bestimmten Zustands enthalten, muss aber nicht die Informationen enthalten, mit denen dieser Zustand unabhängig einer Repository-Historie oder einem Commit zugeordnet werden kann.

Ein vollständiges Repository ermöglicht demgegenüber abhängig vom vorhandenen Datenbestand die Untersuchung von Git-Objekten, Referenzen und Historie. Für ein Gutachten sollte deshalb dokumentiert werden, ob ein vollständiges Repository, ein Clone, ein Archiv oder lediglich ein Dateiexport übergeben wurde.

Wichtig: Ein Verzeichnisname wie projekt-final oder release-3.2 belegt für sich genommen nicht, welcher Git-Commit oder welche Repository-Fassung darin enthalten ist.

3. Der Commit als reproduzierbarer Bezugspunkt

Git-Revisionsangaben können konkrete Commit-Objekte beziehungsweise andere Git-Objekte adressieren. Für die Untersuchung kann deshalb die vollständige Objekt-ID eines Commits als technischer Bezugspunkt dokumentiert werden.

Mit git rev-parse --verify <rev>^{commit} kann beispielsweise geprüft werden, ob eine Revisionsangabe im vorhandenen Repository auf ein Commit-Objekt beziehungsweise auf ein zu einem Commit auflösbares Objekt verweist.

Damit wird allerdings nur die Zuordnung innerhalb des untersuchten Repositorys geprüft. Ob genau dieser Commit einem ausgelieferten Build oder einem bestimmten Ereignis zuzuordnen ist, benötigt gegebenenfalls weitere Nachweise.

4. Branch- und Tag-Namen müssen auf konkrete Objekte zurückgeführt werden

Branches und Tags sind Referenzen beziehungsweise Referenznamen innerhalb des Repositorys. Für eine technische Dokumentation ist daher nicht nur der Name der Referenz relevant, sondern auch die zugehörige Objekt-ID.

git show-ref kann vorhandene Referenzen zusammen mit ihren Objekt-IDs ausgeben. Mit einer Dereferenzierung können insbesondere auch die Ziele annotierter Tags zusätzlich sichtbar gemacht werden.

Dadurch kann beispielsweise dokumentiert werden, worauf refs/heads/main oder refs/tags/v3.2 im untersuchten Repository tatsächlich verweist.

5. Ein Commit beschreibt nicht zwingend den gesamten vorgefundenen Arbeitsstand

In einer ausgecheckten Arbeitskopie können Änderungen vorhanden sein, die noch nicht Bestandteil des bezeichneten Commits sind. Ebenso können Dateien existieren, die von Git nicht verfolgt werden.

Die offizielle Dokumentation von git status unterscheidet insbesondere: Änderungen zwischen aktuellem HEAD und Index, Änderungen zwischen Index und Working Tree sowie nicht versionierte Dateien.

Für eine Quellcodebegutachtung ist dieser Unterschied wesentlich. Wird nur die Commit-ID dokumentiert, obwohl der tatsächlich untersuchte Working Tree lokale Änderungen enthält, beschreibt die Commit-ID nicht vollständig den vorgefundenen Dateibestand.

6. Der Working Tree sollte vor der Analyse dokumentiert werden

Vor einer inhaltlichen Codeanalyse kann deshalb der Zustand der Arbeitskopie dokumentiert werden. Ein maschinenlesbares Statusformat kann dabei helfen, lokale Änderungen und nicht versionierte Dateien reproduzierbar festzuhalten.

Ein solcher Status ersetzt keine Sicherung der tatsächlich untersuchten Dateien. Er ergänzt vielmehr die Dokumentation, ob der Arbeitsbestand vom bezeichneten Repository-Zustand abweicht.

7. Git-Objekte können unabhängig von Dateinamen geprüft werden

Mit git cat-file können Eigenschaften und Inhalte von Git-Objekten untersucht werden. Die Git-Dokumentation sieht unter anderem Optionen zur Prüfung der Existenz, zur Ausgabe des Objekttyps und zur Darstellung des Objektinhalts vor.

Für eine technische Untersuchung kann dies beispielsweise verwendet werden, um zu prüfen, ob eine übergebene Objekt-ID im Repository existiert und welchem Objekttyp sie entspricht.

Entscheidend ist dabei nicht, möglichst viele Git-Kommandos auszuführen, sondern die für die konkrete Beweis- oder Prüfungsfrage relevanten Identifikatoren nachvollziehbar zu dokumentieren.

8. Submodule sind eigenständige Untersuchungsbestandteile

Ein Softwareprojekt kann Quellcode aus weiteren Git-Repositories als Submodule einbinden. In diesem Fall genügt die Commit-ID des übergeordneten Repositorys allein nicht, um den gesamten tatsächlich benötigten Quellcodebestand als eigenständige Dateien bereitzustellen.

Git dokumentiert für Submodule einen im Superprojekt aufgezeichneten Commit-Bezug. Der tatsächlich ausgecheckte Zustand des Submoduls kann mit diesem aufgezeichneten Zustand verglichen werden.

Für eine vollständige Untersuchung ist deshalb gegebenenfalls auch zu dokumentieren, welche Submodule existieren, auf welche Commit-IDs sie verweisen und ob deren Inhalte tatsächlich vorliegen.

9. Externe Abhängigkeiten gehören zur Reproduzierbarkeit des Builds

Nicht jeder Bestandteil eines Builds befindet sich als Quellcode im Hauptrepository. Bibliotheken, Pakete, Plugins, Generatoren oder andere Werkzeuge können während des Build-Prozesses zusätzlich eingebunden werden.

Für eine reproduzierbare Untersuchung können deshalb beispielsweise relevant sein:

Welche dieser Informationen tatsächlich erforderlich sind, hängt von der konkreten Fragestellung und vom verwendeten Build-System ab.

10. Repository-Zustand und Build-Artefakt müssen technisch verbunden werden

Ein Repository-Commit identifiziert einen versionierten Quellcodezustand. Daraus folgt jedoch nicht automatisch, dass ein vorliegendes Binärpaket, Container-Image oder Deployment-Artefakt genau aus diesem Commit erzeugt wurde.

Diese Zuordnung kann je nach Projekt beispielsweise durch Build-Protokolle, CI/CD-Metadaten, Versionsinformationen, Artefakt-Metadaten oder andere dokumentierte Build-Nachweise unterstützt werden.

Fehlt eine solche Verbindung, sollte nicht allein aus identischen Versionsbezeichnungen geschlossen werden, dass Repository-Stand und Build technisch identisch zugeordnet sind.

11. Welche Informationen sollte die Übernahme dokumentieren?

Für die Untersuchung eines Quellcodebestands kann eine technische Übernahmedokumentation insbesondere folgende Angaben enthalten:

Nicht jede Untersuchung benötigt jeden dieser Punkte. Die Dokumentation sollte auf die technische Fragestellung und die mögliche Aussagewirkung abgestimmt werden.

12. Was ist bei einem ZIP- oder Dateiexport zu beachten?

Wird nur ein ZIP-Archiv oder ein kopierter Quellcodeordner übergeben, kann der enthaltene Dateibestand durchaus technisch analysiert werden. Die fehlende Repository-Metainformation kann jedoch bestimmte weitergehende Aussagen begrenzen.

Ohne zusätzliche Nachweise lässt sich aus einem reinen Dateiexport beispielsweise nicht automatisch ableiten, welcher Branch oder Tag zugrunde lag, ob lokale Änderungen vorhanden waren oder welche Historie zu diesem Stand führte.

Diese Einschränkung betrifft nicht zwingend die Möglichkeit einer Codeanalyse, wohl aber die Nachvollziehbarkeit von Herkunft, Version und Entwicklungshistorie.

13. Technischer Befund und rechtliche Würdigung

Ein technischer Befund kann beispielsweise lauten, dass der übergebene Working Tree Änderungen gegenüber dem dokumentierten Commit enthält, dass ein Submodul auf einen anderen Commit zeigt als im Superprojekt aufgezeichnet oder dass die Herkunft eines Build-Artefakts aus dem bezeichneten Repository-Stand nicht nachgewiesen werden konnte.

Daraus kann fachlich eingeordnet werden, welche Codebasis tatsächlich untersucht wurde und welche Unsicherheiten hinsichtlich Reproduzierbarkeit oder Herkunft bestehen.

Rechtliche Grenze: Welche Quellcodefassung vertraglich geschuldet, herauszugeben oder für eine Abnahme rechtlich maßgeblich ist, wird durch die technische Repository-Analyse nicht entschieden. Die technische Untersuchung beschreibt vorhandene Datenbestände, Git-Zustände, Zuordnungen und deren Nachweisbarkeit.

Konstruiertes Beispiel

Für eine Quellcodeprüfung wird ein Git-Repository zusammen mit der Angabe Release 4.1 übergeben. Der gleichnamige Tag verweist auf einen bestimmten Commit. Der Working Tree enthält jedoch zusätzlich lokale Änderungen, und ein eingebundenes Submodul befindet sich auf einem anderen Commit als im Superprojekt aufgezeichnet.

Eine belastbare Untersuchung würde diese Zustände zunächst getrennt dokumentieren: Tag und Commit, Abweichungen des Working Trees, Submodul-Zuordnung und gegebenenfalls das tatsächlich erzeugte Build-Artefakt.

Erst danach wäre eindeutig festgelegt, ob sich die fachliche Analyse auf den versionierten Commit, den tatsächlich vorgefundenen Working Tree oder einen anderen rekonstruierten Zustand bezieht.

Das Beispiel ist vollständig konstruiert und stellt kein reales Mandat und keine gerichtliche Beauftragung dar.

Quellen und fachliche Grundlage

  • Technische Primärquelle Git-Projekt: gitrevisions . Revisions- und Objektreferenzen. Geprüft am 18.09.2026.
  • Technische Primärquelle Git-Projekt: git-rev-parse . Auflösung und Verifikation von Revisionsangaben. Geprüft am 18.09.2026.
  • Technische Primärquelle Git-Projekt: git-show-ref . Dokumentation vorhandener Referenzen und zugehöriger Objekt-IDs. Geprüft am 18.09.2026.
  • Technische Primärquelle Git-Projekt: git-status . Unterschiede zwischen HEAD, Index und Working Tree sowie nicht versionierte Dateien. Geprüft am 18.09.2026.
  • Technische Primärquelle Git-Projekt: git-cat-file . Prüfung von Existenz, Typ und Inhalt von Git-Objekten. Geprüft am 18.09.2026.
  • Technische Primärquelle Git-Projekt: git-submodule . Einordnung der im Superprojekt aufgezeichneten Submodul-Commit-Bezüge. Geprüft am 18.09.2026.
  • Ergänzende technische Primärquellen Git-Projekt: git-branch und git-tag . Geprüft am 18.09.2026.
  • Eigene Fachliteratur Mathias Ellmann: Von Code zu Lösungen im Software Engineering mit Java . Fachlicher Hintergrund zu Versionsverwaltung, Build-Prozessen, Softwarequalität und Fehleranalyse.
  • Eigene fachliche Einordnung Die konkrete Kombination aus Repository-Zustand, Working Tree, Submodulen, Abhängigkeiten und Build-Nachweisen richtet sich nach der technischen Fragestellung und dem verfügbaren Untersuchungsmaterial.

Weiterführende Beiträge

Welche Unterlagen für eine erste Softwareuntersuchung benötigt werden können, erläutert Welche Unterlagen benötigt ein IT-Sachverständiger bei Streit über Individualsoftware? .

Wie der relevante Versionsstand eines Systems bestimmt werden kann, erläutert Welche Softwareversion muss ein Sachverständiger untersuchen? .

Für den Vergleich eines bestimmten Softwarestands mit dokumentierten Anforderungen siehe Softwaremängel technisch untersuchen: Soll-Ist-Vergleich .

Der allgemeine Quellen- und Dokumentationsstandard ist unter Quellen und Methodik beschrieben.

IT-Sachverständiger Mathias Ellmann

Software- und Quellcode-Gutachten

Wenn ein konkreter Quellcodebestand untersucht werden soll, können Repository, Commit, lokale Änderungen, Submodule, Abhängigkeiten und Build-Nachweise zunächst technisch eingegrenzt werden.

Software-Gutachten ansehen