¿Cómo puedo detectar si se ha realizado algún cambio en un git repo?

Mi objective es ofrecer una opción de "reserva de respaldo" en una IU solo si la copy de security más reciente ya no es válida, por lo que necesito una forma eficiente de determinar si se ha realizado algún cambio en el repository.

Mi primer pensamiento es agrupar los times de modificación de cada directory en el repository, que compararía con el mismo valor calculado en la copy de security. Funcionaría eso? ¿Hay una mejor manera?

En realidad, solo quiere ver si (después de get) su origen / sucursal de seguimiento remoto es igual que su sucursal de seguimiento local, así que simplemente verifique los SHA de tal (seguidos de una combinación para alcanzarlo). De modo que puede hacer un análisis de rev en origen / sucursal y compararlo con el análisis rev de la sucursal, ya que no importa por cuántos commits o qué cambios haya, solo que haya cambios (o un logging de git –oneline origin / branch..branch canalizado a un wc -l, tipo de cosa).

Su idea del hash en todo el directory es similar a cómo se calcula realmente el SHA de la confirmación, por lo que solo con el SHA se logra eso. Tenga en count que mi sugerencia fallaría si alguien hiciera una confirmación y luego una reversión y terminara con los mismos contenidos, los SHA cambiarían con cada confirmación sucesiva (ya que también contienen la información de confirmación así como la SHA principal), pero Creo que es un escenario poco probable y no uno para el que necesites optimizar.

Entonces mi enfoque asume que tiene un repository local que está clonando fuera del control remoto. Si no es así, o no desea retirar todo el repository remoto, puede hacer un clon superficial para get la propina y recordar cuál era el consejo anterior.

Sin embargo, un mejor enfoque es usar git ls-remote y analizar ese resultado y recordar su estado y compararlo la próxima vez que lo ejecute.

 NAME git-ls-remote - List references in a remote repository SYNOPSIS git ls-remote [--heads] [--tags] [--upload-pack=<exec>] [--exit-code] <repository> [<refs>...] DESCRIPTION Displays references available in a remote repository along with the associated commit IDs. 

Verá resultados como los siguientes:

 From https://github.com/foobar/myRepo.git 3133d81f8cca51c73c92aeeaa1c762b177683456 HEAD 3133d81f8cca51c73c92aeeaa1c762b177683456 refs/heads/master 

Como puede ver, enumera el HEAD del control remoto así como sus references y es una simple cuestión de analizarlo y savelo.

Puede analizar la salida de …

 git fetch --dry-run origin 

… Mi primer pensamiento es agrupar los times de modificación de cada directory en el repository, que compararía con el mismo valor calculado en la copy de security. Funcionaría eso? ¿Hay una mejor manera?

Sí, puedes verificar si hay cambios pendientes desde el server:

 # grab all latest changes git fetch # check to see if there are any changes git diff <origin/branch> ^branch # or git diff ^<branch> origin/branch 

Uno es para tirar y el segundo es para empujar


Otra forma es search y contar tostado el número de confirmaciones en cada twig suponiendo que no está haciendo una rebase [squash] interactiva.

 git rev-list --count