2016-06-30 3 views
1

Я наткнулся на команду мерзавца:Что означает аргумент «--add» в команде «git config»?

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

Предположительно он отключает быструю пересылку по умолчанию при слиянии ветвей. Но опция --add поймала мои глаза, поэтому я теперь задаюсь вопросом, что именно она делает. Кто угодно?

+1

RTFM ссылка [ 'here'] (http://www.unix.com/man-page/linux/1/git-config/) ... – anishsane

+0

Спасибо, что немного непонятно, не настолько продвинуты пользователи, хотя –

ответ

2

Как documented in the manual page, то --add флага говорит git config не перезаписывать любые существующие merge.ff настроек, а для добавления нового в дополнении к любой существующей обстановке.

С merge.ff не является многозначной конфигурацией, это, как правило, неправильно. (Фактически, из-за того, как Git сканирует конфигурационный файл, вновь добавленная настройка отменяет любые предыдущие настройки, а --add добавляет в конце, поэтому она работает в любом случае.) Для однонаправленных элементов конфигурации, таких как merge.ff, действительно должно быть просто одно запись в любом файле конфигурации.

(Думайте об этом, как, например, говоря Git не делать что-то, а затем говорю это, чтобы сделать что-то, а затем, сказав, что не делать вещь. Git просто подчиняется команде последний он слышал, в этот случай.)

Примером многозначного элемента конфигурации является линия fetch для каждого пульта. Например, remote.origin.fetch обычно составляет только +refs/heads/*:refs/remotes/origin/*, но вы могли бы добавить+refs/notes/*:refs/notes/* или +refs/notes/*:refs/notes/origin/* для копирования заметок от origin, например. (Вы бы не захотели удалить первую настройку, просто добавив вторую).

(Это не проблема, связанная с bash, а скорее вещь, специфичная для Git. Bash просто запускает команду с указанными аргументами и оставляет толкование этих аргументов к команде)

+0

Извините, все еще сбиты с толку ... Значит, флаг '--add' означает, что весь этот параметр конфигурации будет опускаться ко всем областям git config (глобальный, репозиторий, ветвь)? –

+1

Нет. Попробуйте 'git config -global -add foo.bar first', затем просмотрите свой глобальный' .gitconfig' (например, 'git config -global -edit'). Затем 'git config --global --add foo.bar second' и снова проверьте глобальный' .gitconfig'. Каждый '--add' помещает еще одну строку в файл. Без '--add' команда заменяет существующий параметр или выходит из строя, если в этом файле есть несколько параметров. – torek

+0

Кстати, если вы установили 'merge.ff' в' false' в своих настройках '--global', а затем установите его в' '' '' '' '' в настройках '--local', локальное значение переопределяет глобальное значение. Способ, которым Git фактически реализует это, заключается в том, что он сначала сканирует вашу глобальную конфигурацию, а затем сканирует вашу локальную конфигурацию. Элементы, которые накапливаются, например 'remote.origin.fetch', будут принимать значения из * обоих * файлов, но для таких элементов, как' merge.ff', которые используют только одно значение, последний параметр переопределяет. Поскольку локальная конфигурация считывается последним, любая настройка там переопределяет глобальную конфигурацию. – torek

1

из git-config doc:.

--add

Добавляет новую строку в опции без изменения каких-либо существующих значений. Это то же самое, что предоставление^$ как value_regex в -replace-all.

Смежные вопросы