Вы должны убедиться, что знаете, что на самом деле означает hg copy
, прежде чем делать это.
Короче говоря, при копировании файла из original_file
в new_file_1
добавляется ссылка, что Mercurialбудет использовать в будущих слияниях тогда и только тогда, когда не сможет найти new_file_1
в общем предке.Обычно это будет иметь место только в первом слиянии после создания копии.
График может проиллюстрировать это лучше:
old --- edit old --- edit in old copied to new --- edit old --- merge
\ / /
copy old new --/------- edit new ------------/
Мы начнем с набора изменений, где у вас есть файл old
.Затем вы редактируете old
в одной ветви и копируете old
в new
в другой.В первом слиянии редактирование в old
копируется в new
.Во втором слиянии нет специальной обработки для new
, поскольку у общего предка (copy old new
changeset) найдено new
.
Что это означает для вашего случая, это то, что существует большая разница вбудущее сливается в зависимости от того, когда люди увидят copy old new
.Если вы можете заставить всех использовать
old --- copy old new
в качестве отправной точки, тогда все в порядке.Но если кто-то имеет ответвления от набора изменений old
и фактически отредактировал old
в этой ветви, тогда они получат конфликты слияния при попытке слияния с набором изменений copy old new
.
Точнее,они получают конфликты слияния, если они редактировали какую-либо часть файла old
, которая не была скопирована в файл new
.Конфликты слияния предупреждают вас о том, что в old
произошло изменение, которое необходимо скопировать в new
.Однако, когда вы действительно сделали
hg copy old new1
hg copy old new2
hg copy old new3
, вы получите несущественные конфликты слияния в двух из трех новых файлов.
Если вы только что удалили файл old
и добавили триновые файлы, тогда вы все равно получите здесь конфликт слияния: вас спросят
remove changed old which local deleted
use (c)hanged version or leave (d)eleted?
Предпочитаете ли вы видеть это приглашение или видите, что запуск инструмента слияния - ваше дело, но теперь вы знаете,последствия hg copy
(или hg rename --after
, это действительно одно и то же).