Encontrar dónde se bifurcó el progtwig desde una biblioteca git, sin un .git

Tengo un problema, no muy diferente de lo que se discute en Step a través del historial de un file en git; similar al timelapse p4v , pero suficientemente diferente.

Tengo un repository de Git, con 6 sucursales, más de 300 files y más de 600 commits.

También tengo un cuerpo de código que es una twig (files brutos sin confirmar) del mismo repository … sin una carpeta .git . En otras palabras, tengo un set de más de 300 files, sin historial, sin tags de compromiso o numbers hash.

Quiero volver a integrar esta twig informal, como una twig formal.

Necesito encontrar qué commit fue copydo, sin el .git , y editado posteriormente.

¿Cómo puedo hacer esto de manera eficiente, es decir, sin realizar un 'checkout' manual de los más de 600 commits y ejecutando diff / meld y contando el número de files cambiados?

Básicamente, desea encontrar la confirmación más similar a un cierto estado del directory de trabajo. Comience creando una sucursal local y enviando esos más de 300 files para que se conviertan en una confirmación. Luego, use git diffs para encontrar la confirmación más similar.

La siguiente secuencia de commands debería hacer el truco. Encuentra todos los commits en un range dado, y luego estima el número de líneas diferentes entre cada commit y el commit de reference. Finalmente encuentra la diferencia mínima.

 #!/bin/bash commit_to_compare_with=d67e commit_range=1cb1d..e172 list_of_commits=($(git rev-list $commit_range)) num_of_commits=${#list_of_commits[@]} minimal_diff_count=100000000 echo echo Found $num_of_commits commits in the range $commit_range echo count_lines_of_diff() { git diff $1 $2 | wc -l; } for c in "${list_of_commits[@]}" do diff_count=$(count_lines_of_diff $commit_to_compare_with $c) echo ${c:0:4} differs from ${commit_to_compare_with:0:4} by $diff_count lines if [ $diff_count -lt $minimal_diff_count ] then most_similar_commit=$c minimal_diff_count=$diff_count fi done echo echo Most similar commit to $commit_to_compare_with is $most_similar_commit 

Aquí está el resultado que obtengo:

 Found 5 commits in the range 1cb1d..e172 e172 differs from d67e by 45 lines 1431 differs from d67e by 26 lines 20e2 differs from d67e by 347 lines fb80 differs from d67e by 347 lines 8d67 differs from d67e by 360 lines Most similar commit to d67e is 14310bc0cf69967d4781e0aec2fd2cca21d72ac6