¿La mejor forma de comparar versiones de files git remotos con versiones de files locales?

Estoy escribiendo una secuencia de commands python para mantener mis files dot actualizados con un repository en GitHub. Copia los files de puntos en un directory separado ( ~/dotfiles ) para que mi directory personal no sea un repository git. Antes de copyr los files, realiza un filecmp.cmp( fileInLocalRepo,fileInHomeDir ) para ver si el file ha cambiado desde la última vez que se copió en el repository local. Una vez que todos los files se actualizan, si ha habido algún cambio, los files modificados se envían a GitHub.

Eso funciona bien hasta que empiece a actualizar los files de puntos de más de una computadora, entonces los files más antiguos podrían sobreescribir mis remotos. Si dotfiles primero los files dotfiles locales, filecmp.cmp() seguirá diciendo que los files son diferentes y el script sobrescribirá el file desplegable con el local, luego lo presionará porque cree que hubo un cambio.

¿Hay alguna forma de que pueda averiguar qué file es realmente más nuevo? Sé que git no conserva los times de actualización en las properties del file, así que no puedo usar eso. ¿Cómo puedo extraer los files de GiHut a un repository local ( ~/dotfiles ) y luego compararlos con los mismos files de puntos que están en mi directory de inicio para ver cuál de cada file es realmente más nuevo?

Suponiendo que todas las computadoras que está configurando tienen times precisos, puede hacer que cree un file de timestamp para cada file de puntos, que solo contiene el time de modificación local del file de puntos. Luego puede comparar la timestamp local con la remota.

También puede hacer el commit localmente e intentar fusionarse con la twig remota. Si la fusión tiene éxito, supongamos que está bien. Si falló, hubo dos cambios diferentes en la misma parte de un file y el conflicto debe resolverse, en cuyo caso usted se notifica de algún modo.

Una solución potencialmente más simple y less propensa a errores (porque es más manual) sería hacer que sus files dot se vinculen simbólicamente a los files dot en el git. Luego, cuando edite un file de puntos, se actualizará el git one y podrá confirmar y enviar los cambios de forma manual fácilmente.

    Intereting Posts