Должен ли я включать configure и makefile в репозиторий github?

Недавно мы перешли из подчинения в git, а затем в Github для нескольких проектов с открытым исходным кодом. Github был хорош в том, что он обеспечил много функциональности. Одна из вещей, которые мне особенно нравятся, - это возможность загружать теги в виде файлов zip или .tar.gz.

К сожалению, Github недавно прекратил скачивание. Это не должно быть проблемой из-за возможности загрузки тегов. Однако в прошлом мы не помещали в репозиторий Makefile, configure script или любые другие файлы, созданные autoconf, потому что у них возникает много конфликтов при слиянии людей.

Какой правильный способ справиться с этим?

  • Должен ли я помещать файлы autoconf и automake-generated в репо, чтобы люди могли напрямую загружать теги?
  • Или должен быть файл bootstrap.sh, и людям говорят, что он запускает это?
  • Или мне просто нужно сделать make dist и поместить это в репо?

Спасибо

Ответ 1

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

Так как Git - это, скорее, контроль версий для текста (в отличие от ретрансляции артефакта, такого как Nexus), обеспечивая способ генерации окончательного двоичного кода. путь.

Ответ 2

Опубликовать вывод make dist через выпуск GitHub

Ваш первый вариант - поместить файлы Autoconf- и Automake в репозиторий - это не очень хорошая идея. Почти никогда не выгодно хранить сгенерированные файлы в исходном управлении. В этом случае он будет загрязнять вашу историю множеством ненужных и потенциально противоречивых коммитов, особенно если не все ваши авторы используют ту же версию Autotools. Ваша третья опция проверки на выходе make dist - это плохая идея по тем же причинам, что и первая опция.

Второй вариант - добавление "начальной загрузки" script, который вызывает Autoconf и Automake для генерации сценариев configure, также является плохой идеей. Это разрушает всю цель Autotools, которая должна сделать ваш источник переносимым по всем системам, включая те, для которых Autotools недоступен! (Подумайте, что произойдет, если кто-то захочет создать и установить ваше программное обеспечение на компьютере, на котором у них нет доступа root, и где не установлена ​​GNU Build System. Загрузочный файл script не поможет им, потому что они Сначала нужно сделать локальную установку Autotools и, возможно, всех ее зависимостей.)

Правильный способ выпуска кода, который использует Autotools, заключается в создании tarball с make dist (или еще лучше, make distcheck, так как это также будет запускать тесты и выполнять другие проверки работоспособности), а затем публиковать этот tarball где-то еще чем исходный репозиторий.

В исходном вопросе с апреля 2013 года говорится, что GitHub прекратил загрузку страниц. Однако в июле 2013 года GitHub добавил функцию "Релизы" , которая не только предварительно упаковывает ваши исходные теги, но также позволяет присоединять произвольные файлы для каждого выпуска. Итак, на GitHub, на странице выпусков вы должны опубликовать свои make dist tarballs (и предпочтительно также отфильтрованные подписи GnuPG).

Основные шаги

  • Когда вы готовы сделать выпуск, пометьте его и нажмите тег на GitHub: $ git tag 1.0 # Also use -s if desired $ git push --tags
  • Используйте Makefile для создания tarball: $ make dist # Alternatively, 'make distcheck'
  • Посетите страницу GitHub для своего проекта и следуйте ссылке "релизы": Снимок экрана проекта GitHub с указанием местоположения ссылки на выпуск
  • Вы попадете на страницу "Релизы" для своего проекта. В первый раз, когда вы заходите, все, что вы увидите, - это список тегов и автоматически созданный tarballs из исходного дерева: GitHub выпускает страницу Нажмите кнопку "Черновик новой версии".
  • Затем вам будет представлена ​​форма, в которой вы должны заполнить тег Git, связанный с выпуском, и необязательный заголовок и описание. Ниже приведена также селектор файлов с надписью "Присоединить двоичные файлы, отбросив их здесь или выбрав их". Используйте это, чтобы загрузить tarball, который вы создали на шаге 2 (и, возможно, также отдельную подпись GnuPG). Составление выпуска GitHub Когда вы закончите, нажмите кнопку "Опубликовать выпуск".
  • На странице "Выпуски" вашего проекта будет отображаться релиз, включая заметные ссылки для загрузки вложенных файлов: Завершена страница выпуска GitHub

Если вы не хотите использовать выпуски GitHub, тогда как указано в предыдущем ответе, вы должны загрузить tarballs где-то в другом месте, например, свой собственный веб-сайт или FTP-сайт. Добавьте ссылку на этот репозиторий из вашего проекта README.md, чтобы пользователи могли его найти.

Ответ 3

Когда вы разрезаете выпуск, загрузите результат make distcheck на страницу загрузки проекта: это цель makefile, которая создает архив и проверяет, что он устанавливает, удаляет, проходит тесты и другие проверки работоспособности. Гитуб, ошибочный, не является оправданием: создайте такое дерево в своем репо:

/
/source
/source/configure.ac
/source/Makefile.am
/source/...
/releases
/releases/foo-0.1.tar.gz
/releases/...

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