Подсказка: я всегда использую явные ревизии и включаю команду слияния в сообщение фиксации, чтобы я мог легко просмотреть историю и понять, как воспроизвести или отменить изменения.

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

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

Я читал о ветках вендора (http://svnbook.red-bean.com/en/1.5/svn.advanced.vendorbr.html) но я не понимаю, почему объединение предыдущей копии кода поставщика и новой копии кода поставщика должно быть настолько сложным (т. е. svn_load_dirs.pl). Конечно, если сторонний код хранится в репозитории SVN, известна вся история, касающаяся того, какие файлы были перемещены / удалены, поэтому зачем вам рассказывать, что изменилось вручную?

Цитата:

Например, у вас будет возможность сообщить сценарию, что вы знаете, что файл math.c в версии 1.0 libcomplex был переименован в arithmetic.c в libcomplex 1.1.

Я тоже читал (http://svn.haxx.se/users/archive-2006-04/0285.shtml) что можно просто выполнить слияние между различными репозиториями, но я не думал, что это возможно, и всякий раз, когда я пробовал это, это заканчивалось неудачей (хотя я мог что-то делать не так).

Может кто-нибудь уточнить это для меня, и предложить лучшее решение?

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

но не понимаю, почему вы не можете использовать предложения из вашей второй ссылки.

svn merge ORIGINAL @ REV UPGRADE @ REV LOCAL_PATH

Это эффективно говорит SVN принять все изменения между оригинальной проверкой и версией, которую вы хотите, и применить их к вашей локальной копии.

Подсказка: я всегда использую явные ревизии и включаю команду слияния в сообщение фиксации, чтобы я мог легко просмотреть историю и понять, как воспроизвести или отменить изменения.

Решение Вопроса

Создание тестовых репозиториев

создать два новых репозитория в rep1 и rep2проверить rep1 в co1добавить текстовый файл в co1 и проверить его вэкспорт rep1 в ex1импортировать ex1 в rep2

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

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

Слияние изменений

Теперь, чтобы создать свою собственную рабочую копию, проверьте rep2 в co2.

Мы должны быть готовы попытаться объединиться из rep1 в co2.

Откройте диалоговое окно слияния для co2 и укажите его на rep1.

Для ревизии «от» выберите ревизию, в которую вы экспортировали свою копию (в данном случае ревизию 1), или ревизию, в которую вы в последний раз обновили свою локальную копию.

Для ревизии «до» выберите ГОЛОВКУ или последнее обновление, которое вы хотите применить.

Результаты

Кажется, что это работает, как и ожидалось, с изменениями из rep1, применяемыми к рабочей копии rep2 в co2. Затем они должны быть возвращены в ваш локальный репозиторий.

 Mike Houston23 янв. 2009 г., 14:51
На самом деле, теперь, когда я думаю об этом, то же самое относится и кобновление нормальная рабочая копия с одним хранилищем. Если вы измените локальную копию text.txt и кто-то переименует ее в messages.txt в хранилище, обновление вашей рабочей копии приведет к появлению двух файлов в вашем рабочем каталоге.
 Mike Houston23 янв. 2009 г., 14:42
Я понимаю, что вы имеете в виду: команда переименования фактически сохраняется как удаление старого файла и добавление нового файла (с содержимым нового файла, скопированным из предыдущей ревизии).
 Tall Jeff23 янв. 2009 г., 20:29
@Mike - в этом весь смысл сценария svn_load_dirs.pl. Это помогает справиться с переименованием и перемещением файлов. Я попытался объяснить это в своем ответе.
 Jack Sleight23 янв. 2009 г., 04:06
Еще некоторые незначительные проблемы с перемещенными / переименованными файлами. то есть. если вы настроили файл rep2, и этот файл был перемещен в rep1, когда он объединяет эту ревизию, он, кажется, не переименовывает ваш настроенный файл в новое имя, вместо этого он просто помещает копию неизмененного файла из rep1, что странно
 Jack Sleight23 янв. 2009 г., 04:02
Привет, спасибо, я попробовал это, и это похоже на работу! Я недавно обновил до 1.5, и я когда-либо пробовал это в 1.4 прежде, где я уверен, что это не сработало. После прочтенияblogs.open.collab.net/svn/2008/03/do-not-post-mer.html похоже, что они изменили что-то в 1.5.

роцесс того, что вы хотите сделать. Это идеальное решение, позволяющее вам выполнить прямое обновление (импорт) ветви поставщика, а затем, как вы намекаете, позволит вам объединить обновления поставщика с вашими изменениями в основной ветви разработки.

Проблема в том, что Subversion действительно не обеспечивает прямой поддержки переименований файлов и перемещений файлов между каталогами для последующего обновления из кода поставщика, потому что вы просто получаете моментальные снимки содержимого исходных файлов .... что-то нужно для запуска вводит команды в систему версий, чтобы указать, какие изменения вносятся в дерево имен файлов, составляющих новую версию. Это цель процесса сценария svn_load_dirs.pl. Это помогает вам манипулировать историей версий, чтобы соответствовать ветвям, чтобы вы могли затем продолжить слияние. Если поставщик не переименовал и / или не переместил файлы между импортированными версиями, у вас не возникло бы этой проблемы.

В любом случае, описанный процесс есть то, что вам / нужно сделать.

 prolink00722 июл. 2013 г., 17:22
Это решит мою проблему?stackoverflow.com/questions/17788986/...

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