Если вы говорите Git не копаться в ваших файлах, вы должны учитывать тот факт, что некоторые файлы постоянно хранятся с окончаниями строк только для LF, а другие - с окончаниями строк CRLF.
Если вы скажете Git связываться с вашими файлами, это будет сделано не только при извлечении (git checkout
) или добавлении (git add
) файлов, которые должны быть сохранены в постоянном формате, но также и при извлечении файлов для различий.
Это часть того, что вы должны выбрать сейчас, потому что ясно, что у вас есть готовые копии, имеющие LF-ony окончания строки.
Как это все работает
Объявление:
<pattern> text eol=crlf
, по сути, является командой для Git, которая сообщает:
Когда вы берете файл out сублимированного формата (как хранится в хранилище и в области index / staging, чтобы поместить его в рабочее дерево, где вы можете его увидеть и использовать), измените любой конец строки только для новой строки.строки в конец строки CRLF.
Когда вы замораживаете файл, т. Е. Сохраняете файл рабочего дерева в индексе, чтобы он перешел в следующего коммита и имел окончания строки CRLF, замените их на конец строки только для новой строки.
Другими словами, вы говорите Git: Пожалуйста, покопайтесь в моих файлах. The eol=...
Часть говорит, как гадить с файлами.Часть строки pattern
сообщает Git , какие файлы, а директива text
сообщает Git: Это текстовые файлы, поэтому они отображаются нормально на моем экране.в diff, и вы должны связываться с ними.
Если вы используете binary
в качестве атрибута, вы говорите Git: Это двоичные файлы, поэтому они не отображаютсяОК на моем экране в diffs, и вы вообще не должны связываться с ними.
Как отметил phd в комментарии , вы можете использовать -text
, чтобы сказать не связывайтесь с ними без и , говоря , они не могут быть отображены .Но высказывание не связывайтесь с ними означает не связывайтесь с ними , и это включает в себя извлечение обезвоженного содержимого для создания различий.
Все из-за того, что Git работает с файлами, происходит либо на этапе регидратации, когда лиофилизированный файл превращается в пригодный для использования, либо на этапе лиофилизации, когда обычный файл превращается в файл, который можно хранить внутри Git,Более того, все встроенных в Git процессов модификации текстовых файлов хранят их внутри Git с LF-концами строк.Если эти *.vbs
файлы должны иметь CRLF внутри них при хранении в Git, 1 они не должны изменяться при входе, и поэтому вы не можете использовать встроенные в Git файлы.опции модификации.
Если файлы могут (разрешены) иметь LF-окончания строк, сохраненные в Git, вы можете использовать встроенные модификации.Если они должны иметь окончания строк CRLF в вашем рабочем дереве (или в любой форме, в которой вы можете видеть и работать с ними), и существующих подтвержденных копий, хранящихся в Git, уже имеют LF- только в конце строки, тогда вы должны выбрать, чтобы Git вносил изменения в файлы при их входе и выходе из форматов сублимационной сушки, поскольку ни один существующий файл с фиксированной сублимацией, сохраненный в Git, теперь не может бытьизменено. 2
Если вы можете жить с существующими сублимированными копиями, которые не имеют окончания строк CRLF, оставаясь такими, когда они возвращаются, в то время какновые файлы хранятся в Git с их окончаниями строк CRLF и сохраняют их окончания строк CRLF при копировании и вводе, вы можете использовать -text
(или вообще ничего не использовать 3 ) и просто не иметь Git messс ними.
1 Мне не ясно, зачем это вообще понадобится, поскольку только Git может читать сублимированные сохраненные файлы Git. Я говорю об этом так, потому что так легче думать об этом, и , а затем переходят от «это обязательно должно быть сделано таким образом» к «я бы предпочел сделать это так», когда вы ослабите свои ограничения .
2 У вас, конечно, есть возможность взять какой-нибудь существующий репозиторий и преобразовать его в новый и другой репозиторий с новыми и разными коммитами, которые имеют файлы в какой-то другой форме. Вы можете сделать это по всему хранилищу, используя git filter-branch ... --all
или некоторое подмножество хранилища. Преимущество этого состоит в том, что вы получаете «чистый» репозиторий, как если бы вы давно следовали любой практике, которую вы сейчас установили. Недостатком является то, что вы должны заставить всех, у кого есть клон исходного репозитория, перейти на использование коммитов замены, которые вы придумали сегодня.
3 Первоначальная концепция Git заключалась в том, что он должен был сохранять все файлы в точности так, как они появлялись в индексе во время фиксации. Эта концепция остается, но введение этих модификаций - «размазывания» файлов по мере их выхода из индекса в рабочее дерево, а затем «очистки» их при возвращении к следующему коммиту - позволяет пользователям Windows, которые требуют Концы строк CRLF, чтобы ладить с пользователями Linux, которые требуют окончания строк только для LF. Но он также вводит эту неуклюжую ситуацию, в которой Git теперь должен знать, какие файлы должны запутаться - какие из них «текстовые», а какие нет, потому что они «двоичные». Устраните проблемы с вашими данными, и вы избавитесь от необходимости описывать, какие файлы получают какую обработку.