Что может привести к слиянию SVN Update неправильно? - PullRequest
3 голосов
/ 13 октября 2009

Несколько дней назад я получил письмо от кого-то, у кого были проблемы с созданием проекта Delphi, который у меня есть в Google Code. Файл проекта и один из файлов DFM были закопаны после того, как он обновился с некоторыми изменениями, которые я зарегистрировал. Мы немного поговорили и проследили до того, что он сказал, что SVN добавлял дополнительные вещи. Он удалил файлы и снова запустил Update, и все заработало.

Я никогда раньше не сталкивался с этой проблемой и не смог воспроизвести или проверить ее с моей стороны. Не было никаких конфликтов обновлений с другими пользователями, так как я единственный, кто имеет доступ для записи в хранилище. Поэтому мне интересно, что могло вызвать это. Это известная проблема для SVN? Есть ли способ предотвратить это?

Ответы [ 6 ]

5 голосов
/ 13 октября 2009

Если файл DFM был обработан Subversion как текст, предполагая, что у пользователя были локальные изменения, он попытается выполнить слияние. Там, где есть конфликты, и Subversion не может их разрешить, он добавит дополнительную информацию, чтобы помочь вам вручную разрешить конфликты, вы увидите текст, подобный <<<<<<< .mine, который, конечно, будет работать в Delphi. Также возможно, что Subversion автоматически выполняет слияние, которое не конфликтует, а приводит к повреждению файла DFM.

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

Одно решение: если у вас есть текстовые файлы, которые не должны быть объединены с помощью Subversion, тогда установите svn: mime-type на соответствующее нетекстовое значение, и оно обрабатывать его как двоичный файл и не будет пытаться выполнить слияние. Вы должны будете вручную решить проблему. Кстати, это также хороший совет, если вам нужно хранить конфиденциальные текстовые файлы в Subversion и не хотите, чтобы diff отображал содержимое :)

3 голосов
/ 13 октября 2009

Предположим, он или его локальная система сумели обработать два файла.

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

Entia non sunt multiplicanda praeter Необходимость .

Хотя всегда возможно, что странная синтаксическая ошибка является ошибкой компилятора, а поврежденный файл - ошибкой svn, обычно есть более прозаические причины, и мы имеем ее Уильям Оккама что более простое объяснение обычно является правильным.

1 голос
/ 13 октября 2009

Содержали ли "munged" файлы текст "mine" или "их"?

Если так, то он, вероятно, испортил свое разрешение конфликта и в конечном итоге непреднамеренно совершил их или мой рев.

Или вполне возможно, что слияние решило, что может автоматически слить изменения, потому что они были в «несвязанных» частях файла, но для SVN (или любого наивного процесса автоматического слияния) «несвязанный» просто означает в строках файлы, которые не / не перекрываются.

«Наивное» автоматическое слияние ничего не знает ни о какой внутренней структуре файла, поэтому может легко объединить изменения, которые, по его мнению, не связаны, когда на самом деле эти изменения имеют неблагоприятные побочные эффекты друг на друга. Не зная точно природу "хулиганства", трудно сказать наверняка, хотя в этом случае ссылка на "лишние вещи" предполагает, что непреднамеренный коммит "моих" или "их" ревизий представляется наиболее вероятным .

0 голосов
/ 16 октября 2009

Я выполнял обновление SVN, а SVN копировал файлы DFM с моим <<<<<<<<. Mine, которого я никогда раньше не видел. Мне пришлось вручную удалить эти изменения, прежде чем Delphi позволит мне открыть проект. </p>

0 голосов
/ 13 октября 2009

Вы работаете на нескольких платформах? Используете ли вы редакторы, которые предполагают линейные окончания Unix (как некоторые инструменты cygwin?)

Если это так, проверьте, правильно ли вы настроили свойство eol-style.

0 голосов
/ 13 октября 2009

Какая версия Delphi?В старых версиях Delphi были ошибки, из-за которых иногда текстовые файлы DFM становились бинарными.

Файлы, внезапно становящиеся двоичными, уничтожают любую систему контроля версий.

- jeroen

...