¿Hay alguna forma de ver cómo el tamaño de un archivo ha cambiado a través del tiempo en un repositorio git? Quiero ver cómo mi archivo main.js (que es la combinación de varios archivos y minificado) ha crecido y se ha reducido con el tiempo.¿Cómo ver el historial de tamaño de archivo de un solo archivo en un repositorio de git?
Respuesta
Puede crear un script que use la salida de git show --pretty=raw <commit>
para obtener el árbol, luego usa git ls-tree -r -l
para obtener el blob que está buscando, incluido el tamaño del archivo.
En caso de que tenga rubí y la gema grit instalado, esto es un pequeño script Tiré juntos:
require 'grit'
if ARGV.size < 1
puts 'usage: file-size FILE'
puts 'run from within the git repo root'
exit
end
filename = ARGV[0].to_s
repo = Grit::Repo.new('.')
commits = repo.log('master', filename)
commits.each do |commit|
blob = commit.tree/filename
puts "#{commit} #{blob.size} bytes"
end
Ejemplo de uso (nombre de archivo del archivo de secuencia de comandos es-size.rb), le mostrará la historia de somedir/somefile:
myproject$ ruby file-size.rb somedir/somefile
Mientras comandos como git log <filename>
, git whatchanged
, etc., pueden mostrar la historia perteneciente a ese archivo, no veo en cualquier lugar, ya sea en el built-in o costumbre bastante formatea una opción que muestra el tamaño (por desgracia, la opción es --log-size
solo para los mensajes de registro!).
Sin embargo, puede hacerse una idea aproximada del tamaño al ver el número total de líneas agregadas y eliminadas en cada confirmación. Puede ordenarlo con el comando git log --stat <filename>
, que usa signos más y menos. O use git log --numstat <filename>
para recopilar la cantidad de líneas agregadas o eliminadas en cada confirmación y use los números en alguna otra visualización.
puede utilizar cualquiera git ls-tree -r -l <revision> <path>
para obtener el tamaño de burbuja en la revisión dado, por ejemplo,
$ git ls-tree -r -l v1.6.0 gitweb/README 100644 blob 825162a0b6dce8c354de67a30abfbad94d29fdde 16067 gitweb/README
El tamaño de la mancha en este ejemplo es '16067'. La desventaja de esta solución es que git ls-tree
solo puede procesar una revisión a la vez.
En su lugar, puede usar git cat-file --batch-check < <list-of-objects>
, al alimentarlo con identificadores de blob. Si la ubicación del archivo no cambió a través del historial (el archivo no se movió), puede usar git rev-list <starting-point> -- <path>
para obtener una lista de revisiones que tocan una ruta determinada, traducirlas a nombres de blobs utilizando <revision>:<path>
sintaxis SHA-1 extendida (consulte la página de manual git-rev-parse), y alimentarlo al git cat-file
. Ejemplo:
$ git rev-list -5 v1.6.0 -- gitweb/README | sed -e 's/$/:gitweb\/README/g' | git cat-file --batch-check 825162a0b6dce8c354de67a30abfbad94d29fdde blob 16067 6908036402ffe56c8b0cdcebdfb3dfacf84fb6f1 blob 16011 356ab7b327eb0df99c0773d68375e155dbcea0be blob 14248 8f7ea367bae72ea3ce25b10b968554f9b842fffe blob 13853 8dfe335f73c223fa0da8cd21db6227283adb95ba blob 13801
Transfiera el resultado 'ls-tree' a' awk '{print $ 4 "" $ 5}' 'para obtener solo el tamaño y el nombre del archivo. – l0b0
crear un archivo llamado .gitattributes
y añadir la siguiente línea:
main.js -diff
Esto desactiva diferenciaciones basadas en línea para main.js
. Ahora ejecute el siguiente comando:
git log --stat main.js
El registro incluirá como líneas
main.js | Bin 4316 -> 4360 bytes
Después de que haya terminado, probablemente debería eliminar .gitattributes
. No sé qué otros cambios en el comportamiento de git pueden ser causados por el atributo -diff
.
Probado con las versiones de Git 1.7.12.4 y 1.7.9.5.
Fuente: La respuesta de ewall y https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html#_marking_files_as_binary
En caso de que esto sea de utilidad para alguien, este guión mostrar el tamaño de un archivo determinado en diferentes compromete:
git log <file_name> | grep "^commit" | cut -f2 -d" " | while read hash; do
echo -n "$hash -- "
git show $hash:<file_path_off_of_git_root_without_leading_slash> | wc -c
done
En Windows Estoy utilizando el siguiente comando:
cmd /c "@echo off & for /l %N in (1 1 30) do git ls-tree -r -l HEAD~%N "C:\path\to\file.txt"
Mostrará el tamaño de cada una de las últimas 30 versiones.
Si alguien puede convertir que a comandos de Linux que son bienvenidos ...))
- 1. ¿Cómo ver las confirmaciones completas al rastrear el historial de un solo archivo en Git?
- 2. Git: ¿muestra el historial de un archivo?
- 3. Obtiene un solo archivo de un repositorio remoto de git
- 4. ¿Cómo puedo "censurar" el historial de un repositorio de git?
- 5. Limitar el tamaño del archivo en el repositorio de git
- 6. En Mercurial, ¿cómo veo el historial de un archivo?
- 7. ¿Cómo ver el historial de revisiones para el archivo Mercurial?
- 8. Cómo marcar un solo archivo en GIT
- 9. Obtenga un solo archivo de un repositorio mercurial remoto
- 10. ¿Cómo ver el historial de archivos en Git?
- 11. Enviar solo un archivo a GitHub desde un repositorio local
- 12. Xcode pierde historial de git cuando mueve un archivo
- 13. ¿Git rm elimina todo el historial de un archivo?
- 14. Mantener el historial de git al dividir un archivo
- 15. ¿Cómo encuentro un archivo en un historial de repositorio de Subversion?
- 16. Cómo extraer un archivo con historial de commit de un git repo con index-filter & co
- 17. ¿Entrar en un solo archivo en Git?
- 18. ¿Cómo puedo ver un solo archivo de GitHub sin clonar todo el repositorio?
- 19. ¿Cómo recuperar un archivo borrado previamente en el historial de git?
- 20. Cómo ver diff de archivo en Git antes de cometer
- 21. ¿Hay alguna manera de eliminar el historial de un solo archivo en Mercurial?
- 22. ¿Cómo ver el archivo en Git?
- 23. "git format-patch" equivalente para un solo archivo?
- 24. ¿Es posible migrar un único archivo de un repositorio SVN a otro conservando el historial?
- 25. eliminar el archivo del historial de git no funciona
- 26. ¿Cómo verificar el tamaño de un archivo?
- 27. git solo inserta un archivo en Heroku
- 28. ¿Cómo puedo mover un único directorio de un repositorio de git a un nuevo repositorio mientras mantengo el historial?
- 29. Obtener el historial/registro de un archivo (potencialmente eliminado) en Git
- 30. ¿Cómo hacer un repositorio de git de solo lectura?
Me tomó un minuto para encontrar la manera de conseguir que se utilice la gema grano después de instalarlo (caminos cosa), pero que las obras maravillosamente Gracias. – Echo
Agregué un ejemplo de uso, me alegro de que esté funcionando. :) – igorw
Sugerencia menor: cambie 'commits = repo.log ('master', filename)' to commits = repo.log ('HEAD', nombre de archivo) 'para mostrar el sistema de archivos en función de dónde se encuentre actualmente (HEAD) en lugar de asumir el maestro. Por supuesto, permitir una discusión sería genial, pero eso es más trabajo de reflexión que lo que tengo en este momento. ;-) –