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