Будет ли исправление ошибок в конце строк в репозиториях Git делать будущие "различия" бесполезными - PullRequest
0 голосов
/ 02 июля 2010

Итак, я столкнулся с этой проблемой . Прежде всего, страница GitHub , похоже, указывает, что это влияет только на машины Windows. Это правда? Я испытываю проблему, когда делаю свежий клон перенесенного репо в OS X.

Во-вторых, если я сделаю то, что предлагается в этом исправлении, я в конечном итоге изменю тысячи файлов. Проблема в том, что когда я смотрю на различия в поэтапных изменениях, кажется, что он изменил весь файл. Мой вопрос: не сделает ли это все различия будущих версий этих файлов по сравнению с версиями до обязательством исправлять окончания строк бесполезными?

Простите, если это специфическая для SVN проблема, но в SVN подобные изменения означают, что различия будут показывать весь файл, измененный всякий раз, когда вы пытаетесь различать версии, которые охватывают коммит, в котором исправлены окончания строк. 1011 *

Ответы [ 2 ]

1 голос
/ 02 июля 2010

Стандартный подход, как вы говорите, заключается в создании нового коммита, который фиксирует окончания строк и, следовательно, меняет каждую строку каждого файла. Однако, поскольку у вас недавно перенесенный репозиторий, может быть более целесообразно переписать все коммиты, чтобы в них были правильные окончания строк. Вы можете сделать это с помощью git rebase или git filter-branch. Делать это с rebase - это, по сути, ручной процесс, но фильтр-ветвь использует предоставленный вами скрипт. Ваш скрипт может делать все, что захочет, ко всему дереву, и результат будет сохранен как новая версия коммита.

Точные детали скрипта будут зависеть от вашей конкретной ситуации, потому что вы не захотите пытаться изменить окончания строк двоичных файлов. Однако, если вы знаете шаблоны имен файлов, вы можете использовать команду find, чтобы сгенерировать список всех соответствующих файлов в дереве, и использовать ее с командой xargs, чтобы запустить на них fromdos для преобразования окончания строки. Например:

#!/bin/sh
find . \( -name '*.cpp' -o -name '*.h' \) -print0 | xargs -0 fromdos

Обратите внимание, что вы должны запускать скрипт для каждого коммита, потому что git хранит файлы целиком, а не diffs.

И обязательно сделайте резервную копию вашего каталога .git заранее, на случай, если все пойдет не так!

0 голосов
/ 02 июля 2010

Вы можете просто использовать эту опцию:

   -w, --ignore-all-space
       Ignore whitespace when comparing lines. This ignores differences
       even if one line has whitespace where the other line has none.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...