Объедините несколько собственных DLLs в один DLL

чисто функциональный конфликт - это конфликт, в котором 2 конфликтующих изменения не затрагивают одни и те же файлы:

  • f1 изменяет прототип функции ( скажем, в файле S1 ) и все его использования (скажем, в файлах S2 и S3 )
  • [ 1123] f2 добавляет использование новой функции в другом файле, в котором функция ранее не использовалась (скажем, в файле S4 ), используя оригинальный прототип, так как он пока не видит изменения f1

Каждое отдельное изменение может пройти проверки, но при объединении в одну ветвь код не будет работать, так как добавленный вызов в S4 не будет соответствовать обновленному прототипу из S1 .

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

Только проверки, выполненные инструментом CI / CD, могут обнаружить такой чисто функциональный конфликт путем обнаружения несоответствия. В зависимости от используемого языка это может быть либо ошибка сборки / компиляции, либо ошибка тестирования / выполнения / выполнения.

Если 2 изменения вызывают конфликт слияния (трехсторонний или нет), это означает, что конфликт является VCS, а не чисто функциональным, и да, он будет обнаружен инструментами на основе git и / или git, поэтому к нему нужно будет обратиться до того, как слияние будет разрешено (выполнение инструмента CI / CD не будет необходимо для его обнаружения)

На ваш второй вопрос ApartCI обнаружит любой вид конфликта:

  • если это конфликт VCS, 2 изменения перекрываются (т.е. они оба касаются хотя бы одного общего исходного файла), поэтому они не будут связаны вместе для одновременной проверки. Это означает, что они никогда не окажутся в первичном пучке вместе. Один из них будет зафиксирован и в конечном итоге окажется в базовом сценарии проекта . Как только это произойдет, другое изменение не будет исправлено в следующей попытке проверки и будет отклонено.
  • Если это чисто функциональный конфликт, 2 изменения не пересекаются, поэтому они могут оказаться или не оказаться в одном пакете.
    • , если они не находятся в одном и том же пакете, поток событий будет в значительной степени таким же, как и в случае конфликта VCS
    • , если они находятся в одном и том же пакете, проверка пакета не удастся и после действия расщепления связки они в конечном итоге окажутся в другой связке, и снова будет следовать тот же поток событий, что и для конфликта VCS

8
задан Community 23 May 2017 в 12:13
поделиться

3 ответа

Я не знаю о слиянии dlls, но я уверен, что можно связать промежуточные объектные файлы в один dll. Это только потребовало бы изменений в Вашем сценарии сборки.

1
ответ дан 6 December 2019 в 01:41
поделиться

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

1
ответ дан 6 December 2019 в 01:41
поделиться

Кроме того, был продукт, который сделал.LIB из.DLLs. Вы могли затем связать свой exe против этого.LIB и избавиться от.DLLs в целом. Возможно, Вы могли связать.DLL из.LIB - я не уверен.

Продукт здесь: http://www.binary-soft.com/dll2lib/dll2lib.htm я не уверен, если это больше работает, если это поддерживается или даже продается. Это уверенный кажется дорогим, но это раньше имело (поддерживающий ворчание) бесплатный пробный период.

0
ответ дан 6 December 2019 в 01:41
поделиться
Другие вопросы по тегам:

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