Función de MATLAB para encontrar el directorio raíz del proyecto por la carpeta .git desde la ruta del script actual

Esta función localiza el directorio raíz de un repositorio Git buscando la carpeta .git empezando desde el directorio del script que hace la llamada. Recorre hacia arriba el árbol de directorios hasta que encuentra un directorio que contiene una carpeta .git o alcanza la raíz del sistema de archivos.

find_git_root.m

find_git_root.m
function rootDir = find_git_root(scriptFullPath)
% FIND_GIT_ROOT Navega hacia arriba en el árbol de directorios para localizar el primer directorio que contiene una carpeta .git.
% rootDir = FIND_GIT_ROOT(scriptFullPath) comienza desde el directorio del scriptFullPath proporcionado
% y recorre hacia arriba hasta encontrar una carpeta .git. Si no se encuentra ninguna carpeta .git
% se lanza un error.

    % Obtener el directorio de la ruta completa del script proporcionado
    scriptDirectory = fileparts(scriptFullPath);

    % Inicializar el directorio actual al directorio del script
    currentDir = scriptDirectory;

    while true
        % Comprobar si el directorio actual contiene una carpeta .git
        if exist(fullfile(currentDir, '.git'), 'dir')
            fprintf('Directory containing ".git" found: %s\n', currentDir);
            rootDir = currentDir;
            return;
        end

        % Obtener el directorio padre
        parentDir = fileparts(currentDir);

        % Comprobar si llegamos a la raíz sin encontrar la carpeta .git
        if strcmp(currentDir, parentDir)
            error('No directory containing ".git" was found in the path hierarchy.');
        end

        % Move up to the parent directory
        currentDir = parentDir;
    end
end

Ejemplo de uso

Para usar esta función, simplemente llámala desde cualquier script dentro de tu repositorio Git. Devolverá la ruta al directorio raíz del repositorio.

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

Echa un vistazo a artículos similares por categoría: Matlab/Simulink