Как присоединиться к двум файлам в системе управления версиями
Я делаю рефакторинг моего проекта на С++, содержащего много исходных файлов.
Текущая стадия рефакторинга включает объединение двух файлов (например, x.cpp
и y.cpp
) в более крупный (скажем, xy.cpp
) с выбросом какого-либо кода и добавление еще некоторого кода.
Я хотел бы сообщить своей системе управления версиями (Perforce, в моем случае), что полученный файл основан на двух предыдущих файлах, поэтому в будущем, когда я смотрю историю изменений xy.cpp
, я также вижу все изменения, сделанные в x.cpp
и y.cpp
.
Perforce поддерживает переименование файлов, поэтому, если y.cpp
не существует, я точно знаю, что делать. Perforce также поддерживает слияние, поэтому, если бы у меня было 2 разных версии xy.cpp
, это могло бы создать из него одну версию. Из этого я понимаю, что возможно объединение двух разных файлов (не уверен в этом); однако я просмотрел некоторые документы по Perforce и другим системам управления версиями и не нашел ничего полезного.
Я пытаюсь сделать что-то вообще?
Имеет ли оно условное имя (поиск документации по "слиянию" или "присоединению" был неудачным)?
Ответы
Ответ 1
Я не думаю, что это можно сделать в классическом VCS.
Эти системы управления версиями представлены в двух вариантах (слайд 50+ Получение git Скоттом Чаконом):
-
История на основе треугольника: вы берете один файл и записываете его дельту. В этом случае устройство является файлом, вы не можете связать его историю с другим файлом.
-
История на основе DAG: вы берете один контент и записываете его патчи. В этом случае сам файл может меняться (его можно переименовать/переместить по желанию), и это может быть результатом двух других содержимого (так что это близок к тому, что вы хотите)... но все еще в истории одного файл (содержимое, поступающее из разных ветвей его DAG).
![alt text]()
Ответ 2
Вы можете попробовать интегрироваться с необоснованными слияниями (-i в командной строке). Если я правильно понимаю документацию (и я никогда не использовал ее сам), это приведет к интеграции двух файлов. Затем вам нужно будет разрешить интеграцию, но вы выбираете ее, что приведет к чему-то близкому к файлу, который вы предполагаете.
После этого я предполагаю, что история Perforce покажет интеграцию из несвязанного файла в историю интеграции, позволяющую вам по желанию отслеживать этот файл.
Ответ 3
Легкая часть будет следующей:
p4 edit x.cpp y.cpp
p4 move x.cpp xy.cpp
p4 move y.cpp xy.cpp
Тогда сложная часть становится решением перемещения y.cpp и выполняет ваш рефакторинг. Но это скажет Perforce, что файлы объединены.