Mercurial Subrepositories - Нужно ли фиксировать в субрепозитории, а затем фиксировать в главном репозитории? - PullRequest
3 голосов
/ 01 сентября 2011

Использование TortoiseHg 2.1.3 и Hg 1.9.2. Независимо от того, что я делаю, родительский репозиторий не видит новые файлы, созданные в подпредставлении, если я сначала не зафиксировал их в подпредставлении. Я думал, что все коммиты и толчки должны были быть сделаны только на родительском репо?

Ответы [ 3 ]

3 голосов
/ 06 сентября 2011

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

2 голосов
/ 01 сентября 2011

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

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

1 голос
/ 01 сентября 2011

Вот что происходит.

Предположим, что вы только измените файл в подпункте.Это поможет с объяснением.

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

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

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

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

Таким образом, родительский репозиторий не имеет изменений, и поэтому вы не можете зафиксировать.

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

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

...