TFS-SDK: слияние не работает - PullRequest
       43

TFS-SDK: слияние не работает

4 голосов
/ 22 февраля 2012

В рамках более широкой реализации я пытаюсь реализовать операцию слияния моих веток / папок управления исходным кодом с помощью TFS-SDK. Я работаю против установки TFS2010.
У меня есть следующее:

using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.VersionControl.Client;
using Microsoft.TeamFoundation.VersionControl.Common;

namespace MergeBranchesFolders
{
    class Program
    {
        static void Main()
        {
            TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFSSERVER/Collection"));
            var versionControl = teamProjectCollection.GetService<VersionControlServer>();

            const string fromPath = "$/TeamProject/SourceDir";
            const string toPath = "$/TeamProject/TargetDir";

            Workspace myWorkspace = versionControl.GetWorkspace("WorkspaceName", "WorkspaceOwner");
            GetStatus getStatus = myWorkspace.Merge(fromPath, toPath, VersionSpec.Latest, VersionSpec.Latest,
                                                    LockLevel.None, RecursionType.Full, MergeOptionsEx.None);
        }
    }
}

Я убежден, что получил правильный доступ к myWorkspace, но getStatus выглядит так:

enter image description here
Это говорит о том, что ничего не произошло.

И все же, если я попытаюсь объединиться в IDE, я получу несколько кандидатов на объединение.
Те же кандидаты на слияние также видны, если я сделаю:

var mergeCandidates = versionControl.GetMergeCandidates(fromPath, toPath,RecursionType.Full).ToList();

Я потерпел неудачу с обоими fromPath / toPath, являющимися ветвями и папками - даже с одним файлом.
Единственный ресурс, который я мог найти, был этот , который не помог ...

Ответы [ 2 ]

5 голосов
/ 23 февраля 2012

Блог Шая Райтена на помощь!

Не удалось:

GetStatus getStatus = myWorkspace.Merge(fromPath, toPath, VersionSpec.Latest, VersionSpec.Latest,
                                                    LockLevel.None, RecursionType.Full, MergeOptionsEx.None);

Это удалось:

GetStatus getStatus = myWorkspace.Merge(fromPath, toPath, null, null, LockLevel.None, RecursionType.Full, MergeOptionsEx.None);
4 голосов
/ 26 марта 2014

Несмотря на то, что ссылка на блог Шая Райтена оказалась полезной, причина изменения была не очень понятна в ответе выше, а также не очень четко в блоге Шая (или в документации Microsoft в этом отношении). Ключ здесь в значении fromVersion и toVersion. Похоже, автор этого вопроса совершил ту же ошибку, что и я, неправильно поняв значение этих параметров. В моем случае я понял, что «от» и «до» - это ссылки на источник (начальную точку) и цель (конечную точку) слияния соответственно. Хотя я не понимал, почему в этом случае нужно было бы указывать версию "to", так как для того, чтобы действительно выполнить осмысленное слияние, версия цели всегда должна быть Подсказкой. Таким образом, чтение описания параметра в качестве «начальной» и «конечной» версий не показалось мне противоречащим этой интерпретации.

Что я наконец понял, так это то, что в этом случае «from» и «to» являются обоими , относящимися к источнику слияния, где «from» относится к начальная точка для диапазона наборов изменений, а "to" относится к конечной точке для диапазона наборов изменений. Если вы пропустите параметр fromVersion, то вы говорите, что хотите включить все наборы изменений обратно в начало (или последнее записанное слияние), в противном случае вы говорите, что хотите включить только наборы изменений, начиная с указанная версия. Если вы опускаете «toVersion», вы говорите, что хотите включить все наборы изменений до версии Tip, в противном случае вы говорите, что хотите включить наборы изменений только до указанной версии.

Таким образом, в исходном коде с параметрами fromVersion и toVersion, указанными как VersionSpec.Latest, вы говорите, что хотите объединить все наборы изменений, происходящие между Последней версией и Последней версией, которая по определению не содержит изменений. Однако в измененном коде с нулевым значением, указанным для обоих параметров, вы включаете все доступные наборы изменений без ограничений.

...