tortoisehg и подрепо

Я не могу заставить Tortoisehg (1.0) работать с подрепо

У меня есть такая структура каталогов:

root
  .hg
  .hgsub
  .hgsubstate
  Customer1
    Project1
      .hg
      foo.txt
    Project2
      .hg
  Customer2
    Project3
      .hg

файл .hgsub в корневом каталоге выглядит как

Customer1\Project1=Customer1\Project1  
Customer1\Project2=Customer1\Project2  
Customer2\Project3=Customer2\Project3  

Если изменить файл Customer1\Project1\foo.txt и зафиксировать от корня, он работает

>hg ci -m "command line commit"
committing subrepository customer1\project1

в Tortoisehg customer1\project1 отображается со статусом S (subrepo), но при фиксации я получаю сообщение

abort: customer1/project1: no match under directory!

Этот сценарий не поддерживается или я что-то делаю не так?

В документе говорится:
«TortoiseHg 1.0 представил рудиментарную поддержку для подрепозиториев, и только в инструменте фиксации / состояния. Когда Mercurial считает вложенное хранилище грязным, оно появится в инструменте фиксации как специальная запись в файле. list со статусом S. Если вложенное репо включено в список файлов фиксации, оно фиксируется вместе с другими изменениями, обновляя файл .hgsubstate в корне главного репозитория ".


person adrianm    schedule 20.03.2010    source источник
comment
У меня такая же проблема. Кажется, что, возможно, это как-то связано с тем, что tortoisehg пытается зафиксировать customer1 / project1 вместо customer1 \ project1 (обратная косая черта). Коммит из командной строки не вызывает проблем.   -  person drye    schedule 22.06.2010


Ответы (5)


У меня была почти такая же проблема, и я начал пробовать целую кучу вариантов, и, наконец, я заставил ее работать для меня, используя косую черту (/) с обеих сторон знака равенства, а не обратную косую черту (\) где-либо.

Так что постарайтесь...

Customer1/Project1=Customer1/Project1  
Customer1/Project2=Customer1/Project2  
Customer2/Project3=Customer2/Project3 

Кроме того, когда он не работал, в моем файле .hgsubstate было только несколько нулей. Когда он начал работать, в нем был настоящий GUID.

person markhoward02    schedule 04.11.2010
comment
Спасибо, я отошел от подрепо, поэтому мне он сам не нужен, но я доверяю вашему исследованию и отмечу это как ответ. - person adrianm; 09.11.2010

Я смог решить эту проблему, используя командную строку для основного репо.

hg commit -m 'Updated subrepo'
person Richard Garside    schedule 21.11.2012

У меня такая же проблема:

В одном из моих репозиториев не удалось выполнить фиксацию одного из моих измененных модулей подрепо с сообщением

"abort: mysubrepo: no match under directory!"

Причина:

TortoiseHG не может выполнить фиксацию во вложенном репозитории, потому что он обрабатывает имена папок с учетом регистра!

Пример: ваш исходный репозиторий:

C:\Shared\MySubRepo

Клонирование этого субрепо в другой репозиторий с помощью командной строки

hg clone C:\shared\mysubrepo   <--- Note the lower cases!

создаст папку вложенного репозитория mysubrepo внутри вашего родительского репозитория. Добавление его в файл .hgsub как обычно (я всегда использую независимый от платформы '/' вместо '\', поэтому я не думаю, что это причина ошибки). Попытка выполнить фиксацию с помощью --subrepos TortoiseHG приведет к ответу «Нет совпадений в каталоге!» ошибка. Однако коммит из командной строки работает.

После переименования папки вложенного репо mysubrepo в MySubRepo (как исходная папка с заглавными буквами) TortoiseHg может успешно выполнить фиксацию!

Возможно, вам нужно отредактировать имя папки также в файле hgrc, но я не уверен, действительно ли это необходимо, потому что я переименовал его в файле, прежде чем выяснять, что есть чувствительные к canse различия в самом названии папки. Также может потребоваться удаление репозитория из реестра репозитория TortoiseHg Workbench и его чтение (и / или перезапуск Workbench также).

person Michael S.    schedule 04.07.2013

Я думаю, ваша проблема заключается в указании «Customer1 \ Project1» в качестве вспомогательного репозитория, потому что Customer1 также должен быть вложенным репозиторием.

Клиент1 и Клиент2 должны иметь файлы .hgsub с описанием вложенных репозиториев внутри них (Project1 / 2).

Переделайте репозиторий Customer1 в другом месте и клонируйте в него Project1 и Project2. Добавьте записи Project1 и Project2 в файл .hgsub в разделе Customer1.

Затем проделайте то же самое с репозиторием Customer2.

Помните, что вложенные репозитории могут сами быть вложенными, поэтому создайте «корневой» репозиторий, а затем клонируйте в него Customer1 и Customer2, не забывая добавлять записи в .hgsub файл.

Зафиксируйте «root», и все будет в порядке.

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

У меня все основные репозитории находятся в одной родительской папке на моем компьютере, поэтому размещение относительных путей внутри файлов '.hgsub', таких как '../Project1' или '../Customer1', является простым способом внесения изменений в мои локальные клоны. с нашего центрального сервера.

Что касается использования TortoiseHG, вам подойдет версия 1.0, поскольку он будет создавать и управлять файлом .hgsubstate во вложенном репозитории , если вы уже создали файл .hgsub!

person Neil Trodden    schedule 22.03.2010
comment
Намного проще использовать командную строку для фиксации верхнего уровня. Я предполагаю, что tortoisehg пытается зафиксировать customer1 / project1 вместо customer1 \ project1 (обратная косая черта). - person adrianm; 23.03.2010

Добавляю свои 2 цента.

Я получал эту ошибку abort: customer1/project1: no match under directory в Windows по следующему сценарию:

  • репо находилось в папке с именем MyFolder (обратите внимание на верхний регистр)
  • репо имел субрепо
  • некоторые файлы (только некоторые!) в родительском репо были зафиксированы с использованием myfolder/filename.ext (обратите внимание на нижний регистр)

Все работает нормально, коммиты из командной строки работают нормально, но Черепаха жалуется.

Переименуйте файлы (найдите строчные, используя hg status --all, и все в порядке)

person jazzcat    schedule 11.12.2016