MATLAB-Funktion zum Finden des Projekt-Stammverzeichnisses anhand des .git-Ordners vom aktuellen Skriptpfad

Diese Funktion lokalisiert das Stammverzeichnis eines Git-Repositories durch Suche nach dem .git-Ordner, beginnend beim Verzeichnis des aufrufenden Skripts. Sie durchläuft den Verzeichnisbaum nach oben, bis sie ein Verzeichnis findet, das einen .git-Ordner enthält, oder die Wurzel des Dateisystems erreicht.

find_git_root.m

find_git_root.m
function rootDir = find_git_root(scriptFullPath)
% FIND_GIT_ROOT Navigiert im Verzeichnisbaum nach oben, um das erste Verzeichnis zu finden, das einen .git-Ordner enthält.
% rootDir = FIND_GIT_ROOT(scriptFullPath) startet beim Verzeichnis des angegebenen scriptFullPath
% und durchläuft den Verzeichnisbaum nach oben, bis ein .git-Ordner gefunden wird.
% Falls kein .git-Ordner gefunden wird, wird ein Fehler ausgegeben.

    % Verzeichnis des angegebenen Skript-Vollpfads abrufen
    scriptDirectory = fileparts(scriptFullPath);

    % Aktuelles Verzeichnis mit dem Skript-Verzeichnis initialisieren
    currentDir = scriptDirectory;

    while true
        % Prüfen, ob das aktuelle Verzeichnis einen .git-Ordner enthält
        if exist(fullfile(currentDir, '.git'), 'dir')
            fprintf('Directory containing ".git" found: %s\n', currentDir);
            rootDir = currentDir;
            return;
        end

        % Übergeordnetes Verzeichnis abrufen
        parentDir = fileparts(currentDir);

        % Prüfen, ob die Wurzel erreicht wurde, ohne einen .git-Ordner zu finden
        if strcmp(currentDir, parentDir)
            error('No directory containing ".git" was found in the path hierarchy.');
        end

        % Zum übergeordneten Verzeichnis wechseln
        currentDir = parentDir;
    end
end

Verwendungsbeispiel

Um diese Funktion zu verwenden, rufe sie einfach von einem beliebigen Skript innerhalb deines Git-Repositories auf. Sie gibt den Pfad zum Stammverzeichnis des Repositories zurück.

find_git_root_usage.m
rootDir = find_git_root(mfilename('fullpath'));

Ähnliche Beiträge nach Kategorie: MATLAB/Simulink