Команда merge (Team Foundation Version Control)
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Visual Studio 2019 | Visual Studio 2022
Команда tf merge
применяет изменения из одной ветви в другую в Team Foundation Version Control (TFVC).
Заметка
Результаты этой команды не отражаются на сервере Azure DevOps, пока не будет выполнена операция регистрации. Дополнительные сведения см. в статье Разработка кода и управление ожидающих изменений.
Необходимые условия
Чтобы использовать команду merge
, укажите для разрешения для разрешить для папки рабочей области, содержащей destination
, и укажите разрешения чтения разрешить для папки рабочей области, содержащей source
. Дополнительные сведения см. в разделе разрешения TFVC по умолчанию.
Синтаксис
tf merge [/recursive] [/force] [/candidate] [/discard]
[/version:versionspec] [/lock:none|checkin|checkout] [/preview]
[/baseless] [/nosummary] [/noimplicitbaseless] [/conservative] [/format:(brief|detailed)] [/noprompt] [/login:username,[password]] source destination
Параметры
Аргументы
аргумент
описание
<versionspec>
Предоставляет значение, например C2
для параметра /version
. Дополнительные сведения о том, как TFVC анализирует спецификацию версии, чтобы определить, какие элементы находятся в пределах области, см. в разделе Использование команд управления версиями Team Foundation.
<source>
Указывает файл или папку, которые будут выступать в качестве источника слияния.
<destination>
Указывает файл или папку, которые будут выступать в качестве назначения слияния.
<username>
Предоставляет значение для параметра /login
. Можно указать значение username
как DOMAIN\username
или username
.
Параметры
параметра
описание
/recursive
Соответствует спецификации элемента source
в текущем каталоге и любых вложенных папках.
/force
Игнорирует журнал слияния и объединяет указанные изменения из источника в место назначения, даже если некоторые или все эти изменения были объединены до этого.
/candidate
Выводит список всех наборов изменений в источнике, который еще не был объединен в место назначения. Список должен содержать идентификатор набора изменений, который не был объединен и другие основные сведения об этом наборе изменений. Звездочка для заданного результата указывает, что она была частично объединена, что означает, что некоторые изменения в наборе изменений были объединены, а другие изменения не были объединены.
/discard
Не выполняет операцию слияния, но обновляет журнал слиянием для отслеживания того, что произошло слияние. Это отменяет использование набора изменений для конкретного слияния.
/version
Для выборочного слияния этот параметр задает диапазон, который следует объединить в место назначения. При слиянии с перехватом этот параметр указывает версию, перед которой необходимо объединить все необъединенные изменения.
Для выборочного слияния диапазон версий обозначает начальные и конечные точки набора изменений, которые необходимо объединить. Например, если вы пытаетесь объединить версию 4~6
, наборы изменений 4, 5 и 6 объединяются.
/lock
Указывает тип блокировки или удаляет блокировку из элемента. Дополнительные сведения см. в статье Общие сведения о типах блокировки.
Параметры блокировки:
None
. Не помещает блокировку на элемент и удаляет из него существующую блокировку.Checkin
: другие пользователи могут извлечь указанные элементы, но они не могут регистрировать исправления для заблокированных файлов, пока не выпустите блокировку, выполнив вход. Если другие пользователи заблокировали любой из указанных элементов, операция блокировки завершается ошибкой.Checkout
. Запрещает пользователям выполнять вход или проверку любого из указанных элементов до тех пор, пока вы не разблокируете блокировку. Если другие пользователи заблокировали любой из указанных элементов или существуют ожидающие изменения для любого элемента, операция блокировки завершается ошибкой.
/preview
Отображает предварительный просмотр слияния.
/baseless
Выполняет слияние без базовой версии. То есть позволяет пользователю объединять файлы и папки, которые не имеют связи слияния. После бессерверного слияния связь слияния существует, и будущие слияния не должны быть бессерверными.
Заметка
Бессерверные слияния не могут удалять файлы в целевом объекте. Вы можете вручную перенести такие изменения.
/noimplicitbaseless
Указывает, что TFVC не будет выполнять неявное бессерверное слияние между двумя элементами с одинаковым относительным именем в двух несвязанных деревах управления версиями.
/nosummary
Сводка конфликтов, ошибок и предупреждений.
/noprompt
Подавляет любые запросы на входные данные.
/conservative
Приводит к большему конфликту при слиянии одной ветви с другой.
/format
Задает форматы суммирования конфликтов слиянием:
-
Brief
(по умолчанию): суммирует только общее количество конфликтов, предупреждений и ошибок. -
Detailed
: суммирует не только общее количество конфликтов, предупреждений и ошибок, но и содержит сведения о каждом конфликте.
Заметка
Этот параметр применяется только в том случае, если выходные данные содержат сводку конфликтов. Сводка не может отображаться, если используется параметр /nosummary
или слияние вызвало менее 10 конфликтов, предупреждений и ошибок.
/login
Указывает имя пользователя и пароль для проверки подлинности пользователя с помощью Azure DevOps.
Замечания
С помощью команды merge
служебной программы командной строки tf
можно применить изменения в существующей исходной ветви к существующей целевой ветви. Вы можете объединить отдельную редакцию или полный набор изменений в целевую ветвь. Вы можете объединить изменения из источника в целевую ветвь или из назначения в исходную ветвь.
Команда merge
также позволяет запрашивать изменения в исходной ветви, которая не была перенесена в целевую ветвь. Команда также позволяет указать, что некоторые изменения никогда не будут объединены из источника в место назначения и больше не должны отображаться в качестве кандидатов для операции слияния.
Дополнительные сведения об использовании служебной программы командной строки tf
см. в разделе Использование команд управления версиями Team Foundation.
Бессерверное слияние
Используйте бессерверное слияние для слияния элементов, которые не являются напрямую ветвлениями друг от друга. Чтобы выполнить бессерверное слияние, необходимо использовать команду tf merge
. При выполнении бессерверного слияния TFVC не содержит никаких сведений о связи файлов в ветвях. В бессерверном слиянии необходимо выполнить ручное разрешение конфликтов. После выполнения бессерверного слияния и разрешения любых конфликтов TFVC записывает журнал слияния и устанавливает связь между папками и файлами.
При запуске tf merge
TFVC выполняет неявное бессерверное слияние между элементами с одинаковым относительным именем в двух ранее управляемых версиями деревьях. Например, может потребоваться объединить связанные ветви $SRC
и $TGT
. Обе ветви содержат несвязанный файл, который называется a.txt. При запуске tf merge
TFVC устанавливает связь между двумя файлами a.txt, если эти два файла одинаковы, шифрование, совместимое с FIPS, отключено, а исходный файл не связан с любым другим файлом в целевом объекте.
Если вы запускаете tf merge
с набором параметров /noimplicitbaseless
, когда TFVC пытается объединить две ветви, при попытке проверить изменения два файла a.txt создают конфликт пространства имен. Чтобы устранить конфликт, необходимо переименовать один из файлов.
Примеры
В следующем примере выполняется слияние изменений из MyFile_beta1, которые не были объединены в MyFile_RTM.
c:\projects>tf merge MyFile_beta1 MyFile_RTM /recursive
Следующий пример объединяет набор изменений 137 в branch2.
c:\projects>tf merge /version:C137~C137 branch1 branch2 /recursive
В следующем примере все наборы изменений объединяются с набором изменений 137 в branch2.
c:\projects>tf merge /version:C137 branch1 branch2 /recursive
В следующем примере выводится список наборов изменений в branch1, которые не были объединены в branch2.
c:\projects>tf merge /candidate branch1 branch2 /recursive
В следующем примере выводится список наборов изменений в branch2, которые еще не были объединены в branch1.
c:\projects>tf merge /candidate branch2 branch1 /recursive
В следующем примере отменяется набор изменений 137 в качестве кандидата для объединения в branch2.
c:\projects>tf merge /discard /version:C137~C137 branch1 branch2 /recursive
В следующем примере все наборы изменений удаляются до набора изменений 137 в качестве кандидатов для объединения в branch2.
c:\projects>tf merge /discard /version:C137 branch1 branch2 /recursive