Когда бы вы использовали разные стратегии git merge?

Очень возможно иметь несколько версий glibc в одной и той же системе (мы делаем это каждый день).

Однако вам нужно знать, что glibc состоит из множества частей (200 + разделяемых библиотек) которые все должны совпадать. Одна из частей - ld-linux.so.2, а должна соответствовать libc.so.6, или вы увидите ошибки, которые видите.

Абсолютный путь к ld-linux.so.2 жестко закодирован в исполняемый файл во время соединения и не может быть легко изменен после завершения связи.

Чтобы создать исполняемый файл, который будет работать с новым glibc , сделайте следующее:

g++ main.o -o myapp ... \
   -Wl,--rpath=/path/to/newglibc \
   -Wl,--dynamic-linker=/path/to/newglibc/ld-linux.so.2

Опция компоновщика -rpath сделает загрузчик времени выполнения для поиска библиотек в /path/to/newglibc (так что вам не нужно было бы устанавливать LD_LIBRARY_PATH перед запуском), и параметр -dynamic-linker будет «испечь» путь, чтобы исправить ld-linux.so.2 в приложении.

Если вы не можете повторно подключить приложение myapp (например, потому что это сторонний двоичный файл), не все потеряно, но становится сложнее. Одно из решений - установить для него подходящую среду chroot. Другая возможность - использовать rtldi и двоичный редактор .

412
задан 3 revs, 3 users 100% 2 September 2012 в 06:04
поделиться

3 ответа

Я не знаком с твердостью, но я использовал другие:

Рекурсивный

Рекурсивный значение по умолчанию для слияний неускоренной перемотки вперед. Мы все знакомы с тем.

Разветвитель

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

ответвление разветвителя объединяет многосекционные головки в одной фиксации, пока это может сделать это чисто.

Для иллюстрации, предположите, что у Вас есть проект, который имеет ведущее устройство, и затем три ответвления для слияния в (назовите их a, b, и c).

серия А рекурсивных слияний была бы похожа на это (обратите внимание, что первое слияние было ускоренной перемоткой вперед, поскольку я не вызвал рекурсию):

series of recursive merges

Однако единственное слияние разветвителя было бы похоже на это:

commit ae632e99ba0ccd0e9e06d09e8647659220d043b9
Merge: f51262e... c9ce629... aa0f25d...

octopus merge

Наш

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

Это сохраняет историю ответвления без любого из эффектов ответвления.

(Read: на Это даже не смотрят изменения между теми ответвлениями. Ответвления просто объединяются, и ничто не сделано в файлы. Если Вы хотите объединиться в другом ответвлении и каждый раз, когда существует вопрос "наша версия файла или их версия", можно использовать git merge -X ours)

Поддерево

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

296
ответ дан 6 revs, 5 users 82% 2 September 2012 в 06:04
поделиться

На самом деле эти только две стратегии, которые Вы хотели бы выбрать, наш , если Вы хотите отказаться от изменений, внесенных ответвлением, но сохранить ответвление в истории, и поддерево при слиянии независимого проекта в подкаталог суперпроекта (как 'мерзавец-gui' в репозитории 'мерзавца').

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

46
ответ дан Jakub Narębski 2 September 2012 в 06:04
поделиться

Поскольку ответы выше не показывают все детали стратегии. Например, некоторый ответ пропускает детали об импорте resolve опция и recursive, который имеет много sub опций как ours, theirs, patience, renormalize, и т.д.

Поэтому я рекомендовал бы посетить чиновника git документация, которая объясняет все возможные функции функций:

https://git-scm.com/docs/merge-strategies

0
ответ дан 22 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: