Utilicé casi todos los commands de logging de git, pero no he encontrado la mejor manera de hacerlo. Solo necesito esto: get solo el nombre de file con ruta de acceso nada más
/path/filename.txt /path/anotherfile.ext ... ...
Mi input es date FROM y TO al command git log. Cualquiera de los loggings de git proporciona el nombre del desarrollador o la date o el número de confirmación o algo que no quiero con los nombres de los files. ¿Cómo get SOLO el nombre del file con la ruta completa?
Use las opciones --since
y --until
para seleccionar el intervalo de time y luego puede usar las tuberías UNIX para grep
, sort
y recostackr las routes uniq
e:
git log --name-status --since='..' --until='..' | grep -E '^[AZ]\b' | sort | uniq | sed -e 's/^\w\t*\ *//'
Ejemplo:
git log --name-status --since='1 January 2015' --until='2 January 2015' | grep -E '^[AZ]\b' | sort | uniq | sed -e 's/^\w\t*\ *//'
Para get resultados de git log
más detallados, consulte Cómo hacer que el logging de git muestre nombres de files como svn log -v
Si tiene que cometer hashes, también puede usar git diff
y --name-only
lugar, como la otra respuesta menciona:
git diff hash1..hash2 --name-only
Esto no utiliza el git log
, pero si está dispuesto a utilizar objects de confirmación (hash, references de bifurcación u otros identificadores de compromiso), git diff
lo simplifica. Ejemplo para get los files modificados para las últimas tres confirmaciones.
$ git diff HEAD~3 --name-only > some/path/with/file.php > another/path/and/file.html > yet/another.json
Puedes replace HEAD~3
con un solo compromiso, por lo que estás comparando con el HEAD actual (el compromiso en el que estás " <commitish>..<commitish>
"), o luego define un range de compromiso con <commitish>..<commitish>
:
$ git diff HEAD..abcd1234 --name-only > file/name/here.cpp $ git diff 1234abcd..abcd1234 --name-only > some/file/name-here.txt
Si necesita filtrar los files de acuerdo con el tipo de modificación (por ejemplo, agregado, modificado, eliminado …), puede utilizar la opción --diff-filter
. man git diff
:
--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]] Select only files that are Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), have their type (ie regular file, symlink, submodule, ...) changed (T), are Unmerged (U), are Unknown (X), or have had their pairing Broken (B). Any combination of the filter characters (including none) can be used. When * (All-or-none) is added to the combination, all paths are selected if there is any file that matches other criteria in the comparison; if there is no file that matches other criteria, nothing is selected.
Si necesita usar dates para filtrar, esta puede no ser la mejor opción. Quizás use git log --since=...
para get el primer hash de la date y pasarlo a git diff
?
Use --name-only
y elimine el post con un formatting vacío
git log --name-only --format=""
Simplemente use todas las demás opciones de git log
como de costumbre. P.ej
git log --name-only --format="" -n 2 master
Opcionalmente orderar y eliminar duplicates
git log --name-only --format="" | sort | uniq