Инструмент командной строки TF: сравнивайте локальные файлы исходного кода с отложенными файлами TFS - PullRequest
5 голосов
/ 23 марта 2012

У меня на жестком диске есть полное имя папки, в которой находятся мои локальные файлы проекта.Теперь мне нужно получить последние соответствующие файлы этого проекта с сервера TFS.

Моя цель - получить обе версии и сравнить их (используя C #).

Какой лучший способ получитьэти файлы с помощью инструмента командной строки TF от Microsoft?

1 Ответ

4 голосов
/ 23 марта 2012

То, что вы пытаетесь сделать , может быть уже встроено в tf.exe как команда folderdiff.Это покажет вам различия между вашим локальным исходным деревом и последней версией на сервере.Например:

tf folderdiff C:\MyTFSWorkspace\ /recursive

Эта функция также существует в клиентах TFS как в Visual Studio, так и в Eclipse.Просто перейдите к пути в Source Control Explorer и выберите «Сравнить с ...». Тем не менее, есть определенные причины, по которым это было бы полезно иметь за пределами

Если это не совсем то, что выпосле этого я бы предложил не пытаться написать tf.exe, а вместо этого использовать TFS SDK для непосредственного общения с сервером.* get * * * * * * * * * * * * * * * * * * * * *

* * * * * * * *1018* * * * * * * * * * tf.exe *1016* *1016* * *1016* *1016* * * * * * * * * 10 * * * * * *1013* * *1016* * * * * * * * * * может быть просто для загрузки файла во временную папку для сравнения.TFS SDK является мощным и довольно простым.Вы должны быть в состоянии соединиться с сервером и загрузить временные файлы довольно легко.Этот фрагмент кода не протестирован и предполагает, что у вас есть сопоставление рабочей области на folderPath, которое вы хотите сравнить с последней версией на сервере.

/* Some temporary directory to download the latest versions to, for comparing. */
String tempDir = @"C:\Temp\TFSLatestVersion";

/* Load the workspace information from the local workspace cache */
WorkspaceInfo workspaceInfo = Workstation.Current.GetLocalWorkspaceInfo(folderPath);

/* Connect to the server */
TfsTeamProjectCollection projectCollection = new TfsTeamProjectCollection(WorkspaceInfo.ServerUri);
VersionControlServer vc = projectCollection.GetService<VersionControlServer>();

/* "Realize" the cached workspace - open the workspace based on the cached information */
Workspace workspace = vc.GetWorkspace(workspaceInfo);

/* Get the server path for the corresponding local items */
String folderServerPath = workspace.GetServerItemForLocalItem(folderPath);

/* Query all items that exist under the server path */
ItemSet items = vc.QueryItems(new ItemSpec(folderServerPath, RecursionType.Full),
    VersionSpec.Latest,
    DeletedState.NonDeleted,
    ItemType.Any,
    true);

foreach(Item item in items.Items)
{
    /* Figure out the item path relative to the folder we're looking at */
    String relativePath = item.ServerItem.Substring(folderServerPath.Length);

    /* Append the relative path to our folder's local path */
    String downloadPath = Path.Combine(folderPath, relativePath);

    /* Create the directory if necessary */
    String downloadParent = Directory.GetParent(downloadPath).FullName;
    if(! Directory.Exists(downloadParent))
    {
        Directory.CreateDirectory(downloadParent);
    }

    /* Download the item to the local folder */
    item.DownloadFile(downloadPath);
}

/* Launch your compare tool between folderPath and tempDir */
...