Usando Git o Mercurial, ¿cómo sabrías cuando haces un clon o un tirón, nadie está registrando files (empujándolo)?

Usando Git o Mercurial, ¿cómo sabrías cuando haces un clon o un tirón, nadie está registrando files (empujándolo)? Puede ser importante que:

1) Nunca se sabe que está en un estado incoherente, por lo que intenta durante 2 horas intentar depurar el código cuando el código está en un estado incoherente.

2) Con todo el código de framework (como Ruby on Rails) – potencialmente cientos de files – si algunos files son inconsistentes con el otro, no puede el rake db:migrate o script/generate controller causar algún daño o inconsistencias a la base del código?

Los tirones y los empujes son atómicos en Git y Mercurial. Significa que nunca le permitirán get sets de cambios parcialmente empujados. Siempre obtendrás un set de cambios completo.

Actualización: simplemente pensé que tenías miedo "¿Qué pasa si alguien está impulsando una serie de sets de cambios y obtendré algunos de ellos?". Luego se trata de la comunicación y el flujo de trabajo que se acepta en el proyecto.

A menudo se astring que cada compromiso con el enlace troncal (maestro o cómo lo llame) debe dejar el código en un estado consistente. Si alguien sabe que hará cambios que crearán incoinheritances temporales, debería hacerlo en una bifurcación y, si está listo, fusionarlo con la troncal. Luego, el tronco se lleva al estado de la twig en una confirmación, por lo que siempre se verá constante.

Actualización 2: Como dijo tonfa en el comentario, en Mercurial push es atómico. Hice algunas testings simples en git, y los empujes son atómicos aquí también. Por lo tanto, no debe temer tales inconsistencias si sabe que otros desarrolladores presionan los sets de cambios que funcionan. (aunque las declaraciones anteriores sobre las twigs siguen siendo válidas).

Como han dicho otros, los compromisos son atómicos, por lo que no tendrás un problema con una incoinheritance debido a un compromiso parcial.

Lo que esta respuesta agrega a la conversación es que tiene la opción de agregar enlaces de precompromiso que fuerzan una ejecución limpia del set de testings antes de permitir la confirmación.

http://git-scm.com/docs/githooks

https://www.mercurial-scm.org/wiki/Hook

Cuando hago un pull in hg , si no hay cambios, obtengo un:

 pulling from <REPOSITORY NAME> searching for changes no changes found 

Entonces sé que no ha habido ningún cambio desde la última vez que lo hice. Además, siempre puede examinar el historial del repository y ver qué cambios se han realizado.