Как Мерзавец решает объединяющуюся проблему? [закрытый]

У меня была та же проблема, я решаю ее, удаляя папку и создавая снова и прошлые изображения, а затем снова добавляю ссылку.

56
задан Assaf Lavie 4 March 2009 в 21:43
поделиться

5 ответов

Мерзавец не предотвратит конфликт в слияниях, но может согласовать историю, даже когда они не совместно используют родительского предка.
(до файл (.git/info/grafts) пересадок ткани, который является списком, один на строку, фиксации, сопровождаемой ее родителями, которых можно изменить для той цели "согласования".)
Настолько довольно мощный тут же.

, Но действительно мельком увидеть на, "как слияния были продуманы", можно запустить путем превращения к самому Linus , и понять эта проблема не так об "алгоритме":

Linus: Меня лично , я хочу иметь что-то, что очень повторяемо и неумно. Что-то, что я понимаю или , говорит мне, что не может сделать этого.
И вполне откровенно говоря, слияние однофайловой истории без [1 120] принятие во внимание истории всех других файлов заставляет меня пойти "тьфу".

важная часть слияния не то, как она обрабатывает конфликты (который должен быть проверен человеком так или иначе, если они вообще интересны), но что она должна объединить историю, вместе правильную так, чтобы у Вас была новая прочная база для будущих слияний.

, Другими словами, важная часть тривиальна часть: именование родителей и отслеживание их отношений. Не столкновения.

И похоже, что 99% людей SCM, кажется, думают, что решение этого состоит в том, чтобы быть более умным о довольном слияния. Который упускает суть полностью.

<час>

, Таким образом, Wincent Colaiuta добавляет (шахта акцента):

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

, В какие файлы были переименованы? Которые были скопированы? Которые были удалены? Какие строки были добавлены? Которые были удалены? Какие строки изменения сделали в них? Какие плиты текста были скопированы от одного файла до другого?
Вам не придется заботиться ни об одном из этих вопросов, и Вам, конечно, не придется поддерживать специальные данные отслеживания в порядке, чтобы помочь Вам ответить на них: все изменения в дереве (дополнения, удаляет, переименовывает, редактирования и т.д.) неявно кодируются в дельте между двумя состояниями дерева ; Вы всего дорожка , что содержание .

Абсолютно все может (и если) быть выведенным .

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

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

76
ответ дан VonC 7 November 2019 в 16:43
поделиться

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

5
ответ дан hillu 7 November 2019 в 16:43
поделиться

Ответы выше все корректны, но я думаю, что они пропускают centerpoint легких слияний мерзавца для меня. Слияние SVN требует, чтобы Вы отслеживали и помнили то, что было объединено, и это - огромный ЛАВАШ. Из их документов:

svn merge -r 23:30 file:///tmp/repos/trunk/vendors

Теперь это не уничтожитель, но если Вы забываете, является ли это 23-30 содержащими или 23-30 эксклюзивными, или объединили ли Вы уже некоторые из тех фиксаций, Вы политы из шланга, и необходимо понять ответы, чтобы не повторять или пропускать фиксации. Бог помогает Вам, если Вы переходите ответвление.

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

9
ответ дан jdwyah 7 November 2019 в 16:43
поделиться

Это теперь обычно согласуется, что алгоритм слияния с 3 путями (возможно, с улучшениями, такой как переименовывают обнаружение и контакт с более сложной историей), который принимает во внимание версию на текущем ответвлении ('наш'), версия на объединенном ответвлении ('их') и версия общего предка объединенных ответвлений ('предок'), является (с практической точки зрения) лучшим способом разрешить слияния. В большинстве случаев, и для большей части слияния уровня дерева содержания (который версия файла взять) достаточно; редко существует потребность в контакте с конфликтами содержания, и затем diff3 алгоритм достаточно хорошо.

Для использования слияния с 3 путями необходимо знать общего предка объединенных ответвлений (co названный основой слияния). Для этого необходимо знать полный история между теми ответвлениями. То, в какой Подрывной деятельности, прежде чем (текущая) версия 1.5 испытывала недостаток (без третьего лица оснащает такой как SVK, или svnmerge) был слияние, отслеживающее , т.е. помнящее за фиксацию слияния, какие родители (что фиксации) использовались в слиянии. Без этой информации не возможно вычислить правильно общего предка в присутствии повторных слияний.

Берут для учетной записи следующую схему:

---.---a---.---b---d---.---1
        \        /
         \-.---c/------.---2

(который, вероятно, исказить..., будет хорошо иметь способность нарисовать схемы ASCII-творчества здесь) .
, Когда мы объединяли фиксации 'b' и 'c' (создающий фиксацию 'd'), общий предок был точкой условного перехода, фиксация 'a'. Но когда мы хотим объединить фиксации '1' и '2', теперь общий предок является фиксацией 'c'. Не храня информацию слияния мы должны были бы прийти к заключению неправильно, что это - фиксация 'a'.

Подрывная деятельность (до версии 1.5), и более ранний CVS, сделанный слиянием трудно, потому что необходимо было вычислить общего предка сами и дать информацию о предке вручную при выполнении слияния.

Мерзавец хранит информацию обо всех родителях фиксации (больше чем один родитель в случае фиксации слияния) в объекте фиксации. Таким образом, можно сказать, что Мерзавец хранит DAG (прямой граф без петель) изменений, храня и помня отношения между фиксациями.

<час>

(я не уверен, как Подрывная деятельность занимается проблемами, упомянутыми ниже)

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

  • Файл переименовывает во время слияния, управляются с помощью эвристического базирующегося счета подобия (и подобие содержания файла и подобие пути, принят во внимание) , переименовывают обнаружение . Мерзавец обнаруживает, какие файлы соответствуют друг другу в объединенных ответвлениях (и предок (предки)). На практике это работает вполне хорошо на случаи реального мира.
  • Перекрещивающиеся слияния , см. , определением в revctrl.org wiki, (и присутствие [1 126] несколько оснований слияния ) управляют при помощи [1 127] рекурсивная стратегия слияния, которая генерирует единственного виртуального общего предка.
18
ответ дан 6 revs, 4 users 86% 7 November 2019 в 16:43
поделиться

Мерзавец просто делает более трудным завинтить всех репозиторий else с плохим слиянием.

единственная реальная выгода - то, что Мерзавец очень, намного быстрее при слиянии, потому что все сделано локально, и оно записано в C.

SVN, правильно используемый, совершенно применим.

-9
ответ дан RibaldEddie 7 November 2019 в 16:43
поделиться