Я плохо знаком с автоинструментами, и я работаю над проектом C. Я хочу добавить свой проект к репозиторию мерзавца. Какие файлы, сгенерированные автоинструментами, я должен отследить в своей системе управления версиями и который должен быть проигнорирован?
Вы не должны держать под контролем версий файлы, которые не были отредактированы вручную. Это означает, что любой созданный файл должен игнорироваться системой контроля версий. В основном я поместил под контроль версий только следующее:
configure.ac
Makefile.am
AUTHORS
, NEWS
и т.д. Makefile.am
в подкаталогахДля решения вопроса о наличии "готовой к установке" версии, поднятого Шарроном, некоторые люди включают в корневой каталог проекта скрипт, называемый bootstrap
или autogen.sh
, который запускается один раз при проверке свежей копии. Вы можете увидеть пример в одном из моих проектов здесь. Для более простого проекта ваш autogen.sh
должен состоять всего из одной строки:
autoreconf --install || exit 1
хотя некоторые предпочитают запускать ./configure
автоматически в конце autogen.sh
.
Почему бы не отслеживать все сгенерированные файлы в системе контроля версий? Потому что их содержимое зависит от машины, на которой вы собираете, версии autotools, с помощью которой вы их сгенерировали, и фазы луны. Каждый раз, когда что-то из этого меняется, сгенерированные файлы autotools будут меняться, и вы получите много мусора в ваших коммитах.
Кроме того, любой, кто проверяет ваш код из системы контроля версий, чтобы собрать его, должен иметь установленные надлежащие средства разработки, поэтому вам не стоит беспокоиться о том, что у людей возникнут проблемы из-за отсутствия autotools.
То, что VonC говорит о C-проектах, поставляемых с configure
файлом для создания Makefile
ов, верно для дистрибутивов исходного кода (файл .tar.gz
, который вы получаете, набрав make dist
), но не обязательно для свежевыбранных копий из системы контроля версий.
Примечание: Я согласен с ответом ptomato, ответом, и оставляю этот ответ как Community Wiki.
Это имеет смысл для дистрибутивов исходного кода, но ваш проект может не быть таковым.
Для целей разработки ответ ptomato имеет больше смысла.
Все проекты на C обычно поставляются с файлом configure, способным генерировать фактический Makefile, используемый для компиляции.
Поэтому, когда вы рассматриваете цепочку автоинструментов, я бы рекомендовал версионировать все файлы, сгенерированные до файла configure, поскольку они обычно являются одноразовой операцией генерации.
Это означает, что любой, у кого есть проверенная копия проекта вашей версии, может немедленно начать:
./configure
make
make install
Таким образом, хотя в целом верно, что вы не должны версионировать любые сгенерированные файлы, вы можете сохранить эти файлы, особенно если другой читатель из этого проекта может:
Как правило, вы не должны хранить какие-либо сгенерированные файлы в репозитории (иначе вы увидите изменения и вам придется их зафиксировать / отменить). Однако, если вы хотите, чтобы в ваш репозиторий была добавлена «готовая к установке» версия (= помеченная), я бы рекомендовал сохранить файлы конфигурации и Makefile. Они необходимы для установки, которая должна работать без автоинструментов.