черепаха и подотделы - PullRequest
       36

черепаха и подотделы

9 голосов
/ 20 марта 2010

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

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

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

.hgsub файл под root выглядит как

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 считает подпункт« грязным », он появится в инструменте фиксации как специальная запись в списке файлов со статусом S. Если вложенный репозиторий включен в список файлов коммита, он дополняется вместе с другими изменениями, обновляя файл .hgsubstate в корне основного репозитория. "

Ответы [ 5 ]

9 голосов
/ 04 ноября 2010

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

Так что попробуй ...

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

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

7 голосов
/ 21 ноября 2012

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

hg commit -m 'Updated subrepo'
4 голосов
/ 04 июля 2013

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

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

"abort: mysubrepo: no match under directory!"

Причина:

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

Пример: Ваш оригинальный репозиторий:

C:\Shared\MySubRepo

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

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

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

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

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

2 голосов
/ 23 марта 2010

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

Customer1 и Customer2 должны оба иметь файлы '.hgsub', описывающие вложенные элементы внутри них ( Project1 / 2 )

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

Затем сделайте то же самое для Customer2 хранилища.

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

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

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

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

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

1 голос
/ 12 декабря 2016

Добавление моих 2 центов.

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

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

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

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

...