Какие файлы, сгенерированные Autotools, я должен хранить в репозитории контроля версий? - PullRequest
50 голосов
/ 20 июля 2010

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

Ответы [ 3 ]

66 голосов
/ 20 июля 2010

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

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

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

autoreconf --install || exit 1

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

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

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

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

12 голосов
/ 20 июля 2010

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


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

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

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

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

./configure
make
make install

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

  • выиграть, если не будет повторно создавать эти файлы (для идентичного результата)
  • немедленно начатьрисунок и компиляция.
0 голосов
/ 20 июля 2010

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

...