Поделиться через


Команда 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 mergeTFVC выполняет неявное бессерверное слияние между элементами с одинаковым относительным именем в двух ранее управляемых версиями деревьях. Например, может потребоваться объединить связанные ветви $SRC и $TGT. Обе ветви содержат несвязанный файл, который называется a.txt. При запуске tf mergeTFVC устанавливает связь между двумя файлами 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