Mercurial - Как остановить отслеживание измененного файла, но сохранить первую версию в хранилище - PullRequest
4 голосов
/ 21 апреля 2010

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

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

Я пытался hg remove или hg forget, но это остановка отслеживания, а также удаление файлов в следующей редакции репозитория.

.hgignore тоже ничего не делает.

Я думаю о hg revert каждый раз, когда я запускаю ./configure или make, но это неэффективный способ. Есть ли лучшие способы?

Ответы [ 2 ]

2 голосов
/ 21 апреля 2010

Обычно хорошая форма для , а не отслеживания сценария configure вообще.Есть несколько причин для этого:

  • Это огромно.Я видел кодовые базы, где скриптовые и вспомогательные макроклавишные библиотеки были в десять раз больше, чем фактический компилируемый код.

  • Когда другие разработчики вносят изменения в configure.in (.ac), им нужно будет зафиксировать новый configure скрипт.Если это сделают три человека, вполне вероятно, что Mercurial потребуется хотя бы один из них, чтобы вручную разрешить конфликт слияния в самом configure.Имейте в виду, что configure генерируется компьютером, попытка прочитать его (гораздо реже конфликты слияния) может вызвать у вас кровотечение.

Как правило, вы предлагаете программу в исходном коде.Форма двумя способами:

  • Загрузка архива релиза (например, foo-1.2.3-rc2.zip), может содержать скрипт конфигурации.

  • Скачивание репозитория напрямую с помощью Mercurial.Если они хотят работать с этим, им нужно будет установить autoconf.

В корне моих репозиториев я обычно включаю файл с именем autogen.sh, который выполняет всенеобходимые шаги (aclocal, autoconf, ...), которые также обрабатывают предупреждение пользователя, если ему нужно что-то установить.Т.е. Could not find tool aclocal, please install the autoconf package.

Лучше всего просто пойти по методу autogen.sh.Это означает только отслеживание configure.in (или configure.ac) и связанных Make-файлов (из Makefile.in).Пусть каждая сборка конфигурирует свою собственную и предоставляет цель distclean для удаления всех файлов, генерируемых configure.Наконец, укажите цель maintainer-clean для удаления всего, что сгенерировано самим набором конфигурации, например, configure.

Это должно помочь облегчить ночные сборки.

0 голосов
/ 21 апреля 2010

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

Убедитесь, что использует хук предварительной фиксации , а не предварительно .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...