Я искал в Google и ТАК ищу кого-то, кто задал этот вопрос, но я подхожу совершенно пустым. Я заранее прошу прощения за длинный обходной путь задать вопрос. (Если бы я смог понять, как инкапсулировать проблему, возможно, мне бы удалось найти ответ.)
Как в Mercurial управляют большими проектами, когда в процессе сборки / компиляции генерируются сотни временных файлов для достижения конечного результата ?? Является ли .hgignore
единственным ответ?
Пример сценария:
У вас есть проект, который хочет использовать какой-то пакет с открытым исходным кодом для какой-то функции, и его нужно скомпилировать из исходного кода. Итак, вы идете за посылкой. un-.tgz, а затем вставьте его в собственный репозиторий Mercurial, чтобы вы могли начать отслеживать изменения. Затем вы вносите все свои изменения и запускаете сборку.
Вы тестируете свой конечный результат, довольны результатами и готовы выполнить фиксацию обратно в свой локальный клон репозитория. Итак, вы делаете hg status
, чтобы проверить свои изменения перед фиксацией. hg status
Результаты заставят вас немедленно начать использовать все те слова, которые заставили бы вашу мать стыдиться - потому что теперь у вас есть экраны и экраны «строительного мусора».
В качестве аргумента скажем, что этот пакет - MySQL или Apache: что-то, что
- вы не контролируете и будете регулярно менять,
- оставляет много мусора во многих местах, и
- нет гарантии, что этот мусор не будет меняться каждый раз, когда вы получаете новую версию из внешнего источника.
Вау что? Над конкретным проектом, вызывающим эту тревогу, будут работать несколько разработчиков в разных физических местах, поэтому он должен быть максимально простым. Если будет слишком много усилий, они не будут этого делать, и у нас возникнет более серьезная проблема. (К сожалению, некоторые старые собаки не хотят учиться новым трюкам ...)
Одно из предложенных решений заключалось в том, что им просто нужно было бы зафиксировать все локально, прежде чем делать make, так что у них есть «чистый лист», из которого они затем должны будут клонировать, чтобы фактически выполнить сборку. Это было выброшено как (а) слишком много шаги, и (б) нежелание портить историю кучей «пора создавать сейчас» ревизий.
Кто-то еще предложил, чтобы весь мусор просто фиксировался в репозитории Mercurial. Я категорически против этого, потому что в следующий раз эти файлы появятся как «измененные» и, следовательно, будут включены в список файлов набора изменений.
Мы не можем быть единственными, кто столкнулся с этой проблемой. Так какое же «правильное» решение? Наш единственный выход - попытаться создать очень интеллектуальный .hginore
файл? Это беспокоит меня, потому что если я скажу Mercurial «игнорировать все в этом каталоге, о котором я вам еще не говорил», то что произойдет, если следующий примененный патч добавит файлы в этот игнорируемый каталог? (Mercurial никогда не увидит этот новый файл, верно?)
Надеюсь, это не совсем глупый вопрос с очевидным ответом. Я уже много раз компилировал что-то из исходников, но мне никогда не приходилось применять контроль версий поверх этого. К тому же мы новички в Mercurial.