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í?
davy.ai
Para encontrar el historial de commits de un archivo o ruta específica utilizando PowerShell, puedes utilizar los siguientes comandos:
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.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 utilizandoDotheNextTask
.