remote origin force example git git-push git-pull git-remote

origin - Git-¿Cuál es la diferencia entre push.default "emparejamiento" y "simple"



git remote add origin (3)

He estado usando git por un tiempo, pero nunca he tenido que configurar un nuevo repositorio remoto y he tenido curiosidad por hacerlo. He estado leyendo tutoriales y estoy confundido sobre cómo hacer que "git push" funcione.

Si simplemente uso git push , ¿me pide que vea una rama predeterminada (?) Para señalar? ¿Cuál es la diferencia entre estas dos opciones que me proporciona?

git config --global push.default matching git config --global push.default simple

La coincidencia solo empuja las ramas que tengo en mi repositorio local, y si no coinciden, debo indicarle manualmente que presione las nuevas sucursales locales que tengo, ¿correcto? ¿Es esta mejor práctica usar o es mejor simplemente?


Notas de lanzamiento de Git v2.0

Notas de compatibilidad hacia atrás

Cuando git push [$there] no dice qué presionar, hemos usado la semántica tradicional "coincidente" hasta ahora (todas sus sucursales se enviaron al control remoto siempre que ya existan sucursales del mismo nombre). En Git 2.0, el valor predeterminado ahora es la semántica "simple", que empuja:

  • solo la rama actual a la rama con el mismo nombre, y solo cuando la rama actual está configurada para integrarse con esa rama remota, si está presionando el mismo control remoto desde el que se obtuvo; o

  • solo la rama actual a la rama con el mismo nombre, si está presionando a un control remoto que no es de donde usualmente se obtiene.

Puede usar la variable de configuración "push.default" para cambiar esto. Si es un veterano que quiere seguir utilizando la semántica de "coincidencia", puede configurar la variable en "coincidencia", por ejemplo. Lea la documentación para otras posibilidades.

Cuando git add -u y git add -A se ejecutan dentro de un subdirectorio sin especificar qué rutas agregar en la línea de comandos, operan en todo el árbol para git commit -a coherencia con git commit -a y otros comandos (estos comandos se utilizan para operar solo en el subdirectorio actual). Di git add -u . o git add -A . Si desea limitar la operación al directorio actual.

git add <path> es lo mismo que git add -A <path> ahora, por lo que git add dir/ notará las rutas que eliminó del directorio y registrará la eliminación. En versiones anteriores de Git, git add <path> utiliza para ignorar eliminaciones. Puede decir git add --ignore-removal <path> para agregar solo las rutas agregadas o modificadas en <path> , si realmente lo desea.


De la documentación de GIT: Git Docs

A continuación se da la información completa. En resumen, simple solo empujará la current working branch e incluso entonces solo si también tiene el mismo nombre en el control remoto. Esta es una muy buena configuración para principiantes y se convertirá en la GIT 2.0 predeterminada en GIT 2.0

Mientras que el matching empujará a todas las sucursales localmente que tengan el mismo nombre en el control remoto. (Sin tener en cuenta su rama de trabajo actual). Esto significa que potencialmente se empujarán muchas ramas diferentes, incluidas las que tal vez ni siquiera quieras compartir.

En mi uso personal, generalmente uso una opción diferente: current que empuja la rama de trabajo actual (porque siempre me bifurco para cualquier cambio). Pero para un principiante sugeriría simple

push.default
Define la acción que debe realizar git push si no se proporciona explícitamente refspec. Diferentes valores son adecuados para flujos de trabajo específicos; por ejemplo, en un flujo de trabajo puramente central (es decir, el origen de captación es igual al destino de inserción), probablemente lo que usted desea es el flujo ascendente. Los valores posibles son:

nada: no empuje nada (error) a menos que se proporcione explícitamente una refspec. Esto está dirigido principalmente a las personas que desean evitar errores siendo siempre explícitos.

actual: presione la rama actual para actualizar una rama con el mismo nombre en el extremo receptor. Funciona tanto en flujos de trabajo centrales como no centrales.

upstream: empuje la rama actual de nuevo a la rama cuyos cambios generalmente están integrados en la rama actual (que se llama @ {upstream}). Este modo solo tiene sentido si está presionando al mismo repositorio del que normalmente obtendría (es decir, flujo de trabajo central).

simple: en el flujo de trabajo centralizado, trabaje como upstream con una seguridad adicional para negarse a presionar si el nombre de la sucursal upstream es diferente del local.

Cuando empuja a un control remoto que es diferente del control remoto del que normalmente tira, trabaje como actual. Esta es la opción más segura y es adecuada para principiantes.

Este modo se convertirá en el predeterminado en Git 2.0.

coincidencia: empuje todas las ramas que tengan el mismo nombre en ambos extremos. Esto hace que el repositorio que está presionando para recordar el conjunto de ramas que se eliminará (por ejemplo, si siempre presiona maint y master allí y no otras sucursales, el repositorio al que presionará tendrá estas dos sucursales, y su maint y master locales será empujado allí).

Para usar este modo de manera efectiva, debe asegurarse de que todas las ramas que empujaría hacia fuera estén listas para ser expulsadas antes de ejecutar git push, ya que el objetivo de este modo es permitirle empujar todas las ramas de una sola vez. Si normalmente terminas el trabajo en una sola rama y eliminas el resultado, mientras que otras ramas no están terminadas, este modo no es para ti. Además, este modo no es adecuado para ingresar a un repositorio central compartido, ya que otras personas pueden agregar nuevas sucursales allí o actualizar la punta de las sucursales existentes fuera de su control.

Este es actualmente el predeterminado, pero Git 2.0 cambiará el predeterminado a simple.


git push puede empujar todas las ramas o una sola dependiendo de esta configuración:

Empujar todas las ramas

git config --global push.default matching

Empujará todas las ramas a la rama remota y las fusionará. Si no desea empujar todas las ramas, puede empujar solo la rama actual.

Empuje solo la rama actual

git config --global push.default simple

Por lo tanto, es mejor, en mi opinión, usar esta opción y empujar su código rama por rama. Es mejor empujar ramas manualmente e individualmente.

Para leer más, por favor vaya a este blog