2010-07-20 3 views
45

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

ответ

59

Нельзя хранить файлы под контролем версий, которые не редактируются вручную. Это означает, что любой сгенерированный файл должен игнорироваться системой управления версиями. Я в основном положить только следующее под контролем версий:

  • configure.ac
  • Makefile.am
  • файлы документов, таких как AUTHORS, NEWS и т.д.
  • Makefile.am в подкаталогах

Для решения точка наличия «готовой к установке» версии, поднятой Sch arron, некоторые люди включают скрипт в корневой каталог проекта, называемый bootstrap или autogen.sh, который вы запускаете один раз, когда вы проверяете новую копию. Вы можете увидеть пример в одном из моих проектов here.Для более простого проекта, ваш autogen.sh нужно действительно только состоять из одной строки:

autoreconf --install || exit 1 

хотя некоторые люди предпочитают работать ./configure автоматически в конце autogen.sh.

Почему бы не отслеживать все сгенерированные файлы в контроле версий? Потому что их содержимое зависит от машины, на которой вы строите, версии автотюнов, с которыми вы их сгенерировали, и фазы луны. Каждый раз, когда любое из этих изменений, сгенерированные файлы autotools будут меняться, и вы получите много мусора в своих коммитах.

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

Что говорит VonC о проектах C идут с configure файлом для создания Makefile S верно для распределения исходного кода (.tar.gz файлов, которые вы получаете, когда вы набираете make dist), но не обязательно для свежа проверяемых из копий, начиная с версии контроль.

+0

Согласен. +1 (и назовите мой ответ как Community Wiki) – VonC

+1

Если вы добавите какие-либо пользовательские макросы в каталог m4, то также должны быть добавлены. – ext

+0

Спасибо за ответ и советы :) Хотя я хотел, чтобы мой проект находился в прямом установочном формате, но я считаю, что создание сценария, такого как autogen.sh, является лучшим вариантом. –

-2

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

+9

Вы абсолютно не можете поместить Makefile в репозиторий. Существует некоторая дискуссия о том, включать или не включать Makefile.in в репо (их не должно быть, поскольку «готовые к построению» версии должны существовать только как tarballs), но совершенно неправильно ставить Make-файлы в репо. Весь смысл скрипта configure заключается в том, чтобы сконструировать Makefile (и др.), Специфичные для конкретной машины, и Makefile может отличаться в зависимости от платформы. Ничего, генерируемое configure, не может быть в repo. –

11

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


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

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

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

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

./configure 
make 
make install 

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

  • Выгода от повторного создания этих файлов (для идентичного результата)
  • немедленно начать настройку и компиляцию.
+3

. Я думаю, вы в замешательстве относительно того, что такое дистрибутив исходного кода. У каждого проекта есть один, но это не то же самое, что хранится в управлении версиями. Распределение исходных кодов должно включать файлы, которые _users_ необходимо построить для проекта; управление версиями должно содержать файлы, которые _developers_ необходимо для создания проекта. – ptomato

+1

@ptomato: снова, я согласен. Дело в том, что я продолжаю перекомпилировать проект распределения исходного кода в эти дни (но я их не разрабатываю). Отсюда мое «перекошенное» видение того, что может быть в VCS. – VonC

Смежные вопросы