Какие файлы, сгенерированные Autotools, следует хранить в репозитории системы контроля версий?

Я новичок в автоинструментах и ​​работаю над проектом C. Я хочу добавить свой проект в репозиторий git. Какие файлы, сгенерированные автоинструментами, мне нужно отслеживать в моей системе контроля версий, а какие следует игнорировать?


person Abhinav Upadhyay    schedule 20.07.2010    source источник


Ответы (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 для создания Makefiles, верно для дистрибутивов с исходным кодом (файл .tar.gz, который вы получаете, когда вводите make dist), но не обязательно для только что извлеченных копий из версии контроль.

person ptomato    schedule 20.07.2010
comment
Если вы добавите какие-либо пользовательские макросы в каталог m4, они, конечно же, также должны быть добавлены. - person ext; 20.07.2010

Примечание. Я согласен с ptomato'ss ответ и оставьте этот ответ как Community Wiki.
Это имеет смысл для дистрибутивов исходного кода , но ваш проект может быть другим.
Для целей разработки ответ ptomato имеет больше смысла.


Все проекты C обычно поставляются с конфигурационным файлом, способным генерировать фактический Makefile, используемый для компиляции.

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

http://upload.wikimedia.org/wikipedia/commons/thumb/8/86/Autoconf.svg/309px-  Autoconf.svg.png

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

./configure
make
make install

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

  • выгода от повторного создания этих файлов (для идентичного результата)
  • приступайте сразу к настройке и компиляции.
person Community    schedule 20.07.2010
comment
Я думаю, вы не понимаете, что такое дистрибутив исходного кода — он есть в каждом проекте, но это не то же самое, что хранится в системе контроля версий. Дистрибутивы с исходным кодом должны включать файлы, необходимые пользователям для сборки проекта; система управления версиями должна содержать файлы, необходимые разработчикам для сборки проекта. - person ptomato; 20.07.2010
comment
@ptomato: опять же, я согласен. Дело в том, что я продолжаю перекомпилировать дистрибутив исходного кода в эти дни (но я не занимаюсь их разработкой). Отсюда и мое искаженное представление о том, что может быть в VCS. - person VonC; 20.07.2010

Как правило, вы не должны хранить сгенерированные файлы в репозитории (иначе вы увидите изменения и вам придется их зафиксировать/отменить). Однако, если вы хотите, чтобы в ваш репозиторий была добавлена ​​(= помечена) «готовая к установке» версия, я бы рекомендовал сохранить файлы configure и Makefile. Они необходимы для установки, которая должна работать без автоинструментов.

person Scharron    schedule 20.07.2010
comment
Вы абсолютно не можете поместить Makefile в репозиторий. Есть некоторые споры о том, включать ли Makefile.in в репозиторий (не следует, так как «готовые к сборке» версии должны существовать только в виде архивов), но абсолютно неправильно помещать Makefiles в репозиторий. Весь смысл скрипта configure заключается в создании Makefile (и др.), специфичных для конкретной машины, а Makefile могут различаться в зависимости от платформы. Ничто, сгенерированное configure, не может быть в репо. - person William Pursell; 07.08.2010