2010-01-27 14 views
19

Cuando probé 'git push origin master' en el repositorio remoto de mi disco externo, se produjo una advertencia de git que indicaba que en las próximas versiones de git se rechazaría por defecto el repositorio de pago y envío. En el disco externo, he revisado el proyecto y deseo enviar los cambios que hice en mi computadora a estos repositorios. ¿'Git Push Origin Master' no es el correcto? ¿Tengo que 'git pull ...' en el repositorio en mi disco externo? Entonces, ¿no puedo presionar cambios sino simplemente sacarlos? ¿Solo trabajar con un repositorio "simple" es diferente? Entonces, si el repositorio en mi disco externo era un repositorio desnudo, ¿podría hacerle cambios? ¿Lo entiendo correctamente?Git push solo para repositorios desnudos?

Respuesta

6

No debe presionar en un repositorio no vacío porque presionar solo actualizará el estado interno del repositorio, y no afectará las copias de los archivos que se encuentran en el disco. Por lo tanto, podría tener problemas si comienza a trabajar en ese repositorio sin antes actualizar (a través de git checkout) las copias en disco del estado de los archivos en el repositorio.

+0

Entonces, presionar al repos no es exactamente un tirón del repositorio? –

+3

convirtiéndose en Gurú: Correcto; un empuje es efectivamente lo opuesto a una búsqueda. Pull = fetch + merge en la rama actual. – ebneter

+2

La clave es que un jalón también actualiza los archivos en el árbol de trabajo (los archivos "en disco"), que ni un empuje ni una extracción realizan. – mipadi

23

Lea atentamente la advertencia. La nueva prohibición predeterminada solo está en empujar a la rama actualmente desprotegida en un repositorio no desnudo. Está perfectamente bien presionar a cualquier otra rama en un repositorio no vacío.

La razón de esto es que el proceso de inserción no tiene acceso directo al árbol de trabajo por lo que el índice y el encabezado de rama se cambian bajo el árbol de trabajo. Cuando vaya posteriormente al árbol de trabajo, parece que el árbol de trabajo ha deshecho los cambios introducidos mezclados con los cambios que estaban genuinamente en desarrollo. Esto hace que sea muy difícil separar los dos conjuntos de cambios.

Empujar a otras ramas no tiene tales inconvenientes. A continuación, puede ir a ese repositorio y combinar esos cambios en la rama desprotegida si lo desea.

+3

No entendí esta respuesta hasta que leí [empuje de git ready] solo a repositorios desnudos] (http://gitready.com/advanced/2009/02/01/push-to-only-bare-repositories.html) y [todo acerca de repos "sin datos": qué, por qué y cómo solucionar un problema no descubierto] (http://sitaramc.github.com/concepts/bare.html) (especialmente el "sí, sí, pero ¿por qué? ¿necesito un repositorio vacío? "sección). Ahora, sin embargo, ¡lo hago! –

+0

¿Tenemos la capacidad de empujar en la ramificación no desprotegida y luego usar el gancho de origen de la fusión de post-recepción con la rama se actualizó? –