Subversion: как сохранить отдельную версию проекта в качестве подкаталога другого проекта - PullRequest
2 голосов
/ 12 октября 2010

Я хочу скопировать проект subversion (/ signature_paper) в подкаталог другого проекта subversion (/ thesis). Я внесу изменения в / thesis / signature_paper, которые не вернутся в оригинальную подпись. В то же время, я хочу, чтобы / thesis / signature_paper принимал большинство или все изменения, сделанные в /signature_paper.

В идеале я бы хотел, чтобы это было проверено как отдельный проект подрывной деятельности, т. Е. Svn co http://blah/thesis тезис дает мне все это, включая /thesis/signature_paper.

Я не уверен, что ветвление и периодическое слияние с / signature_paper могут сделать это для меня или нет, и как это сделать, если так. Я использовал ветки в Clearcase много лет назад, но никогда не настраивал свои собственные. Я настроил наш SVN-репозиторий без первоначального использования дизайна / trunk. Я обычно использую клиент командной строки, но могу использовать Tortoise, если это поможет.

Есть ли простой способ сделать это? Я периодически вручную переделывал аналогичный проект в прошлый раз, когда у меня возникла эта необходимость (извлечение развивающейся бумаги в более крупный документ), и это было настоящей болью.

Edit: Хм, так работает ли что-то вроде следующего?
% cd диссертация
% svn co blah / signature_paper
% находить . -name .svn -exec rm -rf {} \;
% svn add signature_paper

Тогда позже использовать svn merge из / signature_paper в / thesis / signature_paper?

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

Вы можете просто установить его с помощью svn:externals, который (если вы не прикрепите номера ревизий) обновится с остальной частью оформления заказа. Только убедитесь, что вы не делаете коммит из вашего внешнего каталога (в отличие от update, commit не коммит svn:externals Я полагаю, но вы можете проверить это

Пример, для получения дополнительной информации см. документацию по svn:externals:

$ svn co http://blah/thesis
$ cd thesis
$ svn ps svn:externals 'signatur_paper http://blah/signature_paper' .
$ svn up
Fetching external item into 'signature_paper'
A    signature_paper/
....
Updated external to revision N.

Updated to revision N.
$ svn info .
....
URL: http://blah/thesis
.... 
$ svn info signature_paper
....
URL: http://blah/signature_paper
.... 

Обновление также извлекает внешние данные:

$ svn up
Fetching external item into 'signature_paper'
External at revision N.

At revision N.

Фиксация не выполняется из внешних источников, если вы явно не делаете это в каталоге:

$ touch signature_paper/test
$ svn add signature_paper/test
A         signature_paper/test
$ svn ci -m'test'
//nothing happens.......
$ svn ci -m'test' signature_paper/
Adding         test
Transmitting file data .
Committed revision N.
2 голосов
/ 12 октября 2010

Убедитесь, что у вас есть «одиночные» коммиты для изменений, которые должны быть объединены. Как объединить только определенные ревизии объясняет, как «синхронизировать» ваши документы.Разделение вашего текста на несколько вложенных документов может помочь.Subversion не требует макета каталога, вы можете создать макет каталога, который подходит вам лучше всего.

Самый простой подход - это выделить общие текстовые разделы в отдельные файлы, помещенные в общую папку.Эти абзацы включены с \ input {name} в вашу диссертацию или статью.

В тех случаях, когда вы не можете или не хотите поддерживать общий файл, тезис и статья должны быть объединены для обмена контентом.Я имею в виду два огромных документа.Поскольку вы не можете синхронизировать весь контент, изменения, которые должны быть объединены, должны перейти в «ревизию».Другими словами, ваша рабочая копия обновлена.Вы применяете свои изменения и делаете коммит.Затем вы объединяете эту точную ревизию с другим документом.

- багажник
--thesis
- paper1
- paper2
--common

...