es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo encontrar el registro de git o el historial de commits de un archivo específico utilizando PowerShell

Quería encontrar el historial de commits para un archivo/ruta específica usando Powershell. Según el último mensaje de commit, si fue eliminado, estoy invocando una función de eliminación. Esta función invoca una API REST para eliminarlo de Azure, de lo contrario, irá al siguiente.

Esto es lo que estoy intentando hacer:

$commitedfilename = $([io.path]::GetFileNameWithoutExtension($.Line)) #Esto me da el nombre del archivo

$path = $.Line #Esto me da la ruta completa. Cambian dinámicamente según el archivo comprometido en el repositorio de Azure DevOps

Haciendo uso de las líneas anteriores, estoy pasando los siguientes comandos de Git para obtener el historial de commits de un archivo específico. La mayoría de mis archivos son archivos Json.

Consultando estas dos preguntas en Stackoverflow: 
- [Find when a file was deleted in Git](https://stackoverflow.com/questions/6839398/find-when-a-file-was-deleted-in-git)
- [How to find a deleted file in the project commit history](https://stackoverflow.com/questions/7203515/how-to-find-a-deleted-file-in-the-project-commit-history)

Aquí está lo que hice:

# Intenté obtener el historial de commits usando una ruta
$commit_log = git log --full-history -1 [$path]
Write-Debug "Registro de commit: $commit_log" #[Sin embargo, esto no retorna nada]

# Luego intenté obtener el historial de commits usando un nombre de archivo
$commit_file = git log --all --full-history -1 -- "**/$commited_file_name.json.*"
Write-Debug "Historial de archivo de commit: $commit_file" #[Esto tampoco retorna nada]

# Y falla en este punto e invoca la función DotheNextTask incluso si el último commit del archivo fue eliminado.

$filter_commit = $("commit_file" | grep -c "Deleted")
if ("filter_commit" -ne 0 ) {
    Deletefile
}
else {
    DotheNextTask
}

¿Hay algo que no esté haciendo correctamente? ¿O me falta algo aquí?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para encontrar el historial de commits de un archivo o ruta específica utilizando PowerShell, puedes utilizar los siguientes comandos:

    • Para obtener el historial de commits utilizando una ruta:
    $commit_log = git log --full-history -1 [$ruta]
    

    En este comando, git log se utiliza para mostrar el historial de commits, --full-history se utiliza para mostrar el historial completo, -1 se utiliza para limitar la salida a un commit y [$ruta] se utiliza para especificar la ruta del archivo.

    • Para obtener el historial de commits utilizando un nombre de archivo:
    $commit_file = git log --all --full-history -1 -- "**/$nombre_archivo_commitado.json.*"
    

    En este comando, git log se utiliza para mostrar el historial de commits, --all se utiliza para mostrar el historial de todas las ramas, --full-history se utiliza para mostrar el historial completo, -1 se utiliza para limitar la salida a un commit y "**/$nombre_archivo_commitado.json.*" se utiliza para especificar el patrón de nombre de archivo.

    Después de obtener el historial de commits, puedes verificar si el último mensaje de commit indica que el archivo fue eliminado utilizando $filter_commit = $("$commit_file" | grep -c "Deleted").

    Si el archivo fue eliminado, puedes invocar una función para eliminarlo de Azure utilizando Deletefile. De lo contrario, puedes pasar a la siguiente tarea utilizando DotheNextTask.

Comments are closed.