Почему git заботится о завершении пробела в моих файлах?

Какое дело в том, что VCS я использую, чтобы беспокоиться о том, что я вложил в свои файлы? Я не понимаю, что здесь. Является ли git контролем версий или синтаксисом?

Ответ 1

Это связано с тем, что одно из самых распространенных применений для Git отправляет ряд исправлений по электронной почте. Трейлинг пространства вызывают проблемы с электронной почтой и, как правило, удаляются, что означает, что любые конечные пробелы будут потеряны при отправке патча по электронной почте и его применении. Это, в свою очередь, означает, что если в репозитории есть промежутки времени на линиях, но не в применяемом патче, вы можете получить ложные конфликты или дополнительные изменения, которые не были предназначены, при применении патча.

Ключ предварительной фиксации, который был включен по умолчанию, но больше не. Кажется, я забыл; он никогда не включался по умолчанию. Как указывали другие, это всегда было образцом предварительного схватывания; он был отключен, не давая ему бит выполнения, но что-то, что можно получить довольно легко (например, работает под Cygwin в Windows), поэтому в более новых версиях Git (поскольку более года назад) образцы были отключены, получив имя pre-commit.sample. Вы можете удалить или переместить ваш .git/hooks/pre-commit, чтобы этот крюк не выполнялся, если вам не нравится поведение. Вы также должны обновить свой Git до более позднего, так как это исправлено довольно долгое время.

Ответ 2

Git все равно. Примером предварительного фиксации является проверка пробелов как демонстрация того, как писать крючок, но по умолчанию он не включен; вы должны сделать его исполняемым для него, чтобы что-либо сделать.

Ответ 3

Почему? Поскольку конечные пробелы легко теряются, они приводят к ложным изменениям и не применяются исправления (из-за изменения пробелов). Это вопрос соответствия стиля программирования.

Это говорит о том, что речь идет о pre-commit hook: вы можете отредактировать его или отключить, или настроить конечные пробелы (возможно, только для некоторых типов файлов), чтобы не считаться ошибкой.


Ключ pre-commit должен быть отключен по умолчанию, но более старые версии (до 1.6.0), используемые для их установки, отключены, если отключены разрешения на выполнение, что может не работать на не- Файловые системы UNIX, такие как FAT; с 1.6.0 они установлены отключены (отключены), добавив суффикс ".sample".

Ответ 4

Как писал hobbs, пример pre-commit hook может делать проверку для конечных пробелов. Чтобы отключить его, загляните в .git/hooks и убедитесь, что файлы там не исполняются.

Один из возможных способов, с помощью которого крючки могли быть активированы, заключается в том, что исполняемый бит может быть установлен, если вы перемещаете свое репо на флеш-накопителе FAT.

Ответ 5

Это не вопрос VCS, который пытается рассказать вам, какой хороший стиль программирования. Дело в том, что конечные пробелы плохо для них, потому что конечные пробелы можно рассматривать как бесполезную модификацию VCS.

Как это так?

Представьте, что у вас есть такая строка:

puts "Hello World"^M^M^M

Где каждый "^ M" является завершающим пробелом (чтобы упростить).

Другой разработчик случайно меняет это следующим образом:

puts "Hello World"^M^M

VCS увидит это как изменение. Бесполезный, который вообще не мешает коду, а меняется. Такое изменение может даже указывать на VCS как на конфликт (чего следует избегать, когда это возможно). Кроме того, он без проблем загрязняет вашу историю.