2010-05-24 2 views
4

У меня есть типичный Subversion Настройка:Ручка переименовывает в параллельных ветвях

/trunk 
/branches/client-one 
/branches/client-two 
/branches/client-three 

Ствол имеет основное развитие и ветви держать клиент настройку. Теперь и затем, I изменения порта из ствола в ветвях и наоборот:

[+] /trunk/readme-trunk.txt 
[port] /trunk/readme-trunk.txt -> /branches/client-one/readme-trunk.txt 
[port] /trunk/readme-trunk.txt -> /branches/client-two/readme-trunk.txt 
[port] /trunk/readme-trunk.txt -> /branches/client-three/readme-trunk.txt 

Он работает довольно безупречно, за исключением того, когда мне нужно переименовать файл. Теперь, как я это делаю, я всегда получаю конфликты деревьев и, в зависимости от шагов, которые я предпринимаю, я теряю локальные модификации или я больше не могу переносить будущие изменения.

Можно ли переименовать файл и все еще иметь возможность изменять порт туда и обратно?

[rename] /trunk/readme-trunk.txt -> /trunk/readme.txt 
[port] /trunk/readme.txt -> /branches/client-one/readme.txt 
[port] /trunk/readme.txt -> /branches/client-two/readme.txt 
[port] /trunk/readme.txt -> /branches/client-three/readme.txt 

[edit] /trunk/readme.txt 
[port] /trunk/readme.txt -> /branches/client-one/readme.txt 
[port] /trunk/readme.txt -> /branches/client-two/readme.txt 
[port] /trunk/readme.txt -> /branches/client-three/readme.txt 

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

ответ

1

Я читал так как я задал вопрос, и кажется, что переименование файлов является слабым местом большинства систем управления версиями. Что касается Subversion, это одна из тех вещей, которые просто невозможно сделать (например, слияния до 1.5).

Это решение, которое, кажется, работает лучше всего:

  1. Выполнение регулярного переименования (копия + удаление) в багажнике. Commit.
  2. Для каждой ветви:
    • редакция Тэг от # 1, как объединены, например, svn merge --record-only (командная строка) или [X] Only record the merge (TortoiseSVN).
    • Выполните обычное переименование (копирование + удаление).

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

(Не проверено в каталогах, просто файлы. Комментарии приветствуются.)

Смежные вопросы