¿Qué significa el argumento "–add" en el command "git config"?

Me encontré con un command git:

git config --global --add merge.ff false 

Presumiblemente, deshabilita el reenvío rápido de forma pnetworkingeterminada cuando se fusionan las twigs. Pero la opción --add llamó mi atención, así que ahora me pregunto qué hace exactamente. ¿Nadie?

Como se documenta en la página del manual , la bandera --add le dice a git config no sobrescriba ninguna configuration de merge.ff existente, sino que agrega una nueva, además de cualquier configuration existente.

Dado que merge.ff no es un configurable de múltiples valores, esto generalmente es lo incorrecto. (De hecho, debido a la forma en que Git escanea el file de configuration, una configuration recién agregada anula cualquier ajuste anterior, y --add agrega al final, por lo que funciona de todos modos.) Para los elementos de configuration de un solo valor como merge.ff realmente hay debería ser solo una input en cualquier file de configuration dado.

(Piense en ello como, por ejemplo, diciéndole a Git que no haga algo, luego diciéndole que haga algo, y luego diciéndole que no haga nada. Git simplemente obedece la última order que escuchó, en este caso).

Un ejemplo de un elemento de configuration de múltiples valores es la línea de fetch para cada control remoto. Por ejemplo, remote.origin.fetch normalmente es solo +refs/heads/*:refs/remotes/origin/* , pero puede agregar +refs/notes/*:refs/notes/* o +refs/notes/*:refs/notes/origin/* para copyr notas de origin , por ejemplo. (Definitivamente no querrá eliminar la primera configuration, solo para agregar una segunda).

(Esto no es algo específico de bash, sino algo específico de Git. Bash simplemente ejecuta el command con los arguments especificados, y deja la interpretación de esos arguments al command).

Desde el documento de git-config :

--add

Agrega una nueva línea a la opción sin alterar ningún valor existente. Esto es lo mismo que proporcionar ^ $ como value_regex en –replace-all.