En el caso general, tendría que examinar cada compromiso, porque no tiene manera de saber si podría tener una gran diferencia en una, pequeña diferencia al siguiente, luego otra gran diferencia, luego un medio diff ...
Probablemente su mejor opción sea limitarse a archivos específicos. Si considera solo un archivo, no debería llevar mucho tiempo recorrer todas las versiones de ese archivo (use git rev-list <path>
para obtener una lista, de modo que no tenga que probar cada confirmación). Para cada confirmación que modificó el archivo, puede verificar el tamaño de la diferencia, y bastante rápidamente encontrar un mínimo. Haz esto para un puñado de archivos, ¡con suerte estarán de acuerdo!
La mejor manera de configurarte para la diferencia es realizar una confirmación temporal simplemente copiando en tu tarball, para que puedas comparar una rama llamada tarball
. De esta manera, usted puede hacer esto:
git rev-list path/to/file | while read hash; do echo -n "$hash "; git diff --numstat tarball $hash path/to/file; done
para conseguir una buena lista de todas las confirmaciones con sus tamaños diff (las tres primeras columnas serán SHA1, el número de líneas añadió, y el número de líneas eliminado).Posteriormente, se podría simplemente tubería awk '{print $1,$2+$3}' | sort -n -k 2
en en, y que tendría una lista ordenada de confirmaciones y sus tamaños diff!
Si no puede limitarse a un puñado de archivos para probar, podría sentir la tentación de implementar a mano algo similar a git-bisect
- simplemente trate de reducir su camino a una pequeña diferencia, suponiendo que en con toda probabilidad, se compromete cerca de su mejor de los casos también tendrá diferenciaciones más pequeños, y se compromete ni mucho menos tendrá diferenciaciones más grandes. (En algún lugar entre el método de Newton y un lleno en la búsqueda binaria/sistema, probablemente?)
Editar: Otra posibilidad, sugerida en Douglas' answer, si usted piensa que algunos archivos podrían ser idéntica a los que de alguna confirmación, es para discutir utilizando git-hash-object
, y luego ver lo que se compromete en su historia tiene que blob. Hay un question with some excellent answers acerca de cómo hacer eso. Si hace esto con un puñado de archivos - preferentemente los que han cambiado con frecuencia - que podría ser capaz de reducir el objetivo comprometerse con bastante rapidez.
Me he dado cuenta de que los archivos más antiguos de que el alquitrán se modificaron en 31/10/2006 12: 57. Comenzaría mi búsqueda allí. – Douglas
Como mencioné en la publicación original, sé más o menos que se bifurcaron en algún lugar en 2004/2005, pero eso es demasiado para investigar manualmente. –