Ситуация
У меня есть два решения.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...
Подвижные подрепозитории
Цель - я хочу настроить subrepos так, чтобы я мог сохранить исходный код для любых проектов ссылочной библиотеки в моем Foo
и Bar
репозитории.
Согласно этой странице (который является буквально единственной документацией, которую я могу найти на subrepos), настраивая subrepo требует выполнения следующих команд от окна консоли 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"
Вопросы
>
? Я пытался перерыть Подвижные документы для >
, но ничего не нашел.nested/foo
. Где сделал foo
произойти из? Что foo
? Репозиторий? Папка?.hgsub
добавляется к main
? Или это добавляет к nested
?Bar
репозиторий теперь до пересмотра 10. Если я пытаюсь обновить свой рабочий каталог к пересмотру 7, будет эта причина мои папки библиотеки (My Documents/Development/Libraries/ProjectA
и .../Libraries/ProjectB
) обновить к тому, что хранится в пересмотре 7 также?Обновление
Я добавил 8-ю строку кода: ci -m "initial commit"
. Это делает две вещи: (1) добавляет .hgsubstate файл к основному repo и (2) фиксируют все изменения, включая новый subrepo в основной репозиторий (с сообщением "начальная буква фиксирует"). Цель .hgsubstate файла состоит в том, чтобы отслеживать состояние всего subrepos, поэтому если Вы возвратитесь к более раннему пересмотру, то это захватит корректный пересмотр от всего subrepos также.
Обновление 2 - некоторые инструкции
После дальнейшего экспериментирования я думаю, что могу теперь обеспечить шаги для решения моей исходной проблемы (использующий главным образом Windows Explorer и TortoiseHG):
Создание subrepo
Libraries/ProjectA
, Libraries/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
, Вы делаете a Synchronize/Pull
операция для каждого subrepo для получения subrepos в синхронизации с последними изменениями в репозиториях проекта библиотеки. Затем Вы снова используете командную строку для фиксации изменений (пока версия 0.10, когда можно просто использовать TortoiseHG для фиксации).
При обновлении рабочего каталога к более раннему пересмотру - Это, кажется, работает довольно обычно с TortoiseHG и, кажется, не требует использования никаких команд DOS. Для фактической работы с более ранним пересмотром в Visual Studio необходимо будет сделать a Synchronize/Push
операция для помещения более старой версии проектов библиотеки назад в Libraries/ProjectX
папка.
Так, как мне нравится TortoiseHG за простые задачи, вероятно, лучше записать пакетные файлы для часто используемых subrepo операций (особенно обновляющий).
Надежда это помогает кому-то в будущем. Если Вы видите какие-либо ошибки, сообщите мне (или не стесняйтесь редактировать себя, если Вы можете).
Вы, наверное, могли бы попробовать эту штуку и выучить ее быстрее, чем писать свой вопрос, но я укушу.
Может ли любой или все эти шаги быть казненный с TortoiseHG, начиная с версия 0.9.2? Если да, то как?
TortiseHG пока не ставит GUI-обёртки вокруг создания sub-repo, но TortiseHG всегда отлично работал с командной строкой. Используйте командную строку для создания и их, и вы можете начинать.
Что делает приведённый выше код сделать (построчно объяснение было бы очень высоко оценено).
hg init main # creates the main repo
cd main # enter the main repo
hg init nested # create the nested. internal repo
echo test > nested/foo # put the word test into the file foo in the nested repo
hg -R nested add nested/foo # do an add in the nested repo of file foo
echo nested = nested > .hgsub # put the string "nested = nested" into a file (in main) named .hgsub
hg add .hgsub # add the file .hgsub into the main repo
Вот некоторые специфические вопросы, которые пришли мне в голову, когда я был пытаясь расшифровать его: Что делает >?
Это не имеет ничего общего с меркуриальным, это стандартная оболочка (unix и dos) для "записи результата в файл с именем X"
В 5-й строке я не делаю понять, что такое гнездо/футболка. Где откуда взялся Фу? Что такое "Фу"? A Хранилище? Папка?
Это файл в повестке. Foo - традиционное произвольное имя, а произвольное содержимое - строка "test"
Line 6 - это один меня полностью сбивает с толку.
Он помещает содержимое в .hgsub, необходимое для того, чтобы сказать, что гнездо является вложенным repo по имени и расположено в гнезде.
В строке 7, Я предполагаю, что .hgsub добавляется к Главное? Или он добавляется во вложенный?
main
Let's say I get my subrepos set set, и моё хранилище в баре теперь ревизия 10. Если я попытаюсь обновить до 7-я поправка, приведет ли это к тому, что моя библиотека папки (Мой Документы/Разработка/Библиотеки/ПроектА и .../Библиотеки/ПроектБ) для обновления к тому, что хранится в ревизии 7 как Ну? Учитывая, что Фу также ссылается на Библиотеки/ПроектА, это может привести к тому. интересно!
Номер редакции не будет нести через себя, но у вас есть контроль, редактируя файл .hgsubstate.
Просто быстрое обновление после выпуска TortoiseHg 1.0.
Поддержка subrepo в THG 1 достаточно хороша, чтобы вы могли выполнять примеры шагов из проводника Windows. Единственное, что я не мог сделать из проводника, это шаг 6:
echo nested = nested > .hgsub
Проводник Windows (по крайней мере, в XP) сообщает об ошибке переименования «Вы должны ввести имя файла». если вы попытаетесь переименовать «New Text Document.txt» в «.hgsub».* 8 ')
Изменить: Между прочим, если вы используете и hg через TortoiseHg, и командную строку, и у вас еще нет Microsoft «Command Here» PowerTool , я очень рекомендую Это. Он добавляет пункт контекстного меню «Открыть командное окно здесь» в каждый каталог в проводнике Windows, что упрощает открытие командных окон в любом месте, где они вам нужны.