Mercurial Subrepos - Как вы их создаете и как они работают?

ситуация

У меня есть два решения .NET (Foo а такжеBar) и общая библиотека, которая содержит ProjectA, ProjectB и ProjectC.Foo а такжеBar ссылаться на один или несколько библиотечных проектов, но библиотечные проекты не находятся в пределахFoo а такжеBar Папки решения.

Структура каталогов:

-- My Documents*
   -- Development
      -- Libraries
         -- ProjectA
         -- ProjectB
         -- ProjectC
   -- Projects
      -- Foo
         -- Solution
            -- .hg
            -- .hgignore
            -- Foo { Project Folder }
            -- FooTests { Project Folder }
            -- Foo.sln { References ProjectA }
            -- Foo.suo
      -- Bar
         -- Solution
            -- .hg
            -- .hgignore
            -- Bar { Project Folder }
            -- BarTests { Project Folder }
            -- Bar.sln { References ProjectA and ProjectB }
            -- Bar.suo

* увы яя все еще использую Windows XP ...

Mercurial Subrepositories

Цель - Я хочу настроить подпункты так, чтобы я мог хранить исходный код для любых библиотечных проектов в моейFoo а такжеBar Хранилища.

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

1| $ hg init main
2| $ cd main
3| $ hg init nested
4| $ echo test > nested/foo
5| $ hg -R nested add nested/foo
6| $ echo nested = nested > .hgsub
7| $ hg add .hgsub
8| $ ci -m "initial commit"

Вопросы

Можно ли выполнить какой-либо или все эти шаги с помощью TortoiseHG, начиная с версии 0.9.2? Если да, то как? Я'Я уверен, что строки 1-3 могут, но я нене знаю о строках 4-7. Ничего из этого, похоже, не задокументировано в TortoiseHG.Что делает приведенный выше код (построчное объяснение будет высоко ценится). Вот некоторые конкретные вопросы, которые пришли мне в голову, когда я пытался их расшифровать:Что значит> делать? Я пытался искать в Mercurial документах для>, но неничего не найти.В строке 5 я нене понимаю, чтоnested/foo является. Где сделалfoo родом из? Что такоеfoo? Хранилище? Папка?Строка 6 - эта полностью сбивает меня с толку.В строке 7 я предполагаю.hgsub добавляется вmain? Или это добавляется?nestedПозволять'скажем, я настроил мои подпункты, и мойBar хранилище обновлено до версии 10. Если я попытаюсь обновить свой рабочий каталог до версии 7, это приведет к тому, что папки моей библиотеки (My Documents/Development/Libraries/ProjectA а также.../Libraries/ProjectB) обновить до того, что хранится в 7-й редакции?

Обновить

Я добавил 8-ю строку кода:ci -m "initial commit", Это делает две вещи: (1) добавляет файл .hgsubstate к основному репозиторию и (2) фиксирует все изменения, включая новый подпункт, в главном репозитории (с сообщением "первоначальный коммит). Цель файла .hgsubstate - отслеживать состояние всех вложенных элементов, поэтому, если вы вернетесь к более ранней версии, он также получит правильную версию из всех вложенных элементов.

Обновление 2 - некоторые инструкции

После дальнейших экспериментов ясчитать Теперь я могу предоставить шаги для решения моей первоначальной проблемы (в основном используя Windows Explorer и TortoiseHG):

Создание подпункта,

Libraries/ProjectALibraries/ProjectBи основные репозитории (Projects/Foo/Solution а такжеProjects/Bar/Solution) должны быть отдельные репозитории.Открыто .Projects/Foo/SolutionКлон изLibraries/ProjectA кProjects/Foo/SolutionдобавлятьProjectA кFoo репозиторий.

Используйте текстовый редактор для создания файла с именем.hgsub, содержащий следующее:

ProjectA = ProjectA

Откройте окно консоли DOS и введите следующие команды(см. примечание ниже):

cd c:\...\Projects\Foo\Solution
hg ci -m "Committing subrepo "ProjectA"

ЗаBar, шаги в основном одинаковы, за исключением того, что файл .hgsub должен содержать записи для обоих проектов, например:

ProjectA = ProjectA  
ProjectB = ProjectB

Замечания: начиная с TortoiseHG 0.10 (намечено на март), вы сможете использоватьHG Commit Команда оболочки, чтобы сделать это, но сейчас вы должны использовать командную строку.

Как только это все настроено, становится немного легче.

Передача изменений - внести изменения вFoo или жеBarВы делаетеSynchronize/Pull операция для каждого вложенного элемента для синхронизации вложенных элементов с последними ревизиями в репозиториях проектов библиотеки. Затем вы снова используете командную строку для фиксации изменений (до версии 0.10, когда вы можете просто использовать TortoiseHG для фиксации).

Обновление рабочего каталога до более ранней версии - Кажется, это нормально работает с TortoiseHG и неКажется, не требуется использование каких-либо команд DOS. Чтобы на самом деле работать с более ранней версией в Visual Studio, вам нужно сделатьSynchronize/Push операция, чтобы положить старую версию библиотечных проектов обратно вLibraries/ProjectX папка.

Как бы мне ни нравился TortoiseHG для простых задач,Вероятно, лучше написать командные файлы для часто используемых операций субрепаратов (особенно для обновления).

Надеюсь, это поможет кому-то в будущем. Если вы видите какие-либо ошибки, пожалуйста, дайте мне знать (или не стесняйтесь редактировать себя, если вы можете).

Ответы на вопрос(2)

Ваш ответ на вопрос