Git безымянные беды

Конфликты пропущенных пробелов

Пробелы оказались для меня ужасной болью используя git.

git config apply.whitespace=strip

кажется, затягивает ваши шансы на получение конфликтов (так как вы ненужные пробелы, а затем другие соавторы пробелы как изменение их коммитов?)

Я пробовал несколько других конфигураций для apply.whitespace в прошлое, и, возможно, одна из других конфигураций решает это, или, может быть, есть другие настройки для обработки пробелов, которые я просто не пришел но я еще не нашел ясного способа добраться туда, где я хочу быть.

Я хочу тихо разрешить конфликты с пробелами:

Я никогда не хочу иметь другой конфликт в пробеле. Если другой committer изменяет пробелы, или я изменяю пробелы, а затем должен сливаться с моими собственными конфликтами, я действительно не хочу об этом знать. Если кто-то меняет мой код от стиля K & R до стиля True True Brace меняя пробелы, я бы предпочел git разрешить либо настройку пробелов, чтобы выиграть, видеть конфликты. Мне просто неинтересно про пробелы, чтобы увидеть конфликты.

Итак...... есть ли способ, которым я могу настроить git для этого?

Если это имеет значение, здесь моя версия git, и моя текущая конфигурации:

tchalvak:~/ninjawars$ git --version
git version 1.6.0.4

tchalvak:~/ninjawars$
git config --list
color.branch=auto
color.diff=auto
color.status=auto
color.branch.current=yellow reverse
color.branch.local=yellow
color.branch.remote=green
color.diff.meta=yellow bold
color.diff.frag=magenta bold
color.diff.old=red bold
color.diff.new=green bold
color.status.added=yellow
color.status.changed=green
color.status.untracked=cyan
gui.recentrepo=/home/tchalvak/zd/htdocs/cms
apply.whitespace=strip
user.name=****
user.email=****
alias.co=checkout
github.user=tchalvak
github.token=****
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
[email protected]:tchalvak/ninjawars.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master 

Ответ 1

Git1.6.0.4 кажется немного старым, особенно если вы считаете, что:

  • в 1.6.3.4, "git apply --whitespace=fix" не исправил конечные пробелы на неполная строка
  • в 1.6.3.2, атрибут "whitespace" предназначен для обнаружения всех известных ошибок до git, но он сказал git игнорировать возвращаемые возвращаемые каретки.

Не могли бы вы попытаться с Git1.6.4.1 и вместо того, чтобы устанавливать глобальную конфигурацию, установите атрибут для файлов, которые вы хотите использовать специальным дескриптором пробела, например описывает.

В данном каталоге создайте файл .gitattributes.

* -whitespace

который будет игнорировать любые ошибки "пробелов".

Теперь это не помешает конфликту из-за отсутствия согласованности, но это может быть полезно попробовать.


Патч был тестом о:

Только игнорировать ошибки пробела в подкаталогах t/tNNNN-*.sh и t/tNNNN.
Другие файлы (например, тестовые библиотеки) должны быть еще проверены.

t/.gitattributes
t[0-9][0-9][0-9][0-9]-*.sh  -whitespace
t[0-9][0-9][0-9][0-9]/*     -whitespace

Примечание (Git 2.3.2+, Q1 2015, commit 0a80bc9, by Junio ​​C Hamano aka gitster) "git apply --whitespace=fix" больше не работает:

"git apply --whitespace=fix" фиксированные ошибки пробелов в общем контекстные строки, но сделали это без отчета.

Когда входящий патч имеет ошибки пробела в общей строке контекста (т.е. строка, которая, как ожидается, будет найдена и не будет изменена патчем), "apply --whitespace=fix" исправляет ошибки в пробелах, в строке есть, помимо ошибка пробела в строке, обновляемой патчем.
Однако мы не учитывали и не сообщали о том, что мы исправили ошибки на таких строках.

Ответ 2

Если вы собираетесь включить эти настройки, вам нужно запланировать день, когда ВСЕ исходный код в вашем проекте получает равномерное разделение пробелов, запуская script или сохраняя каждый файл из редактора, который будет выполнять полоса на сохранение. Тогда все будущие коммиты будут контролироваться настройками, поэтому все должно идти вперед.