Скопируйте файлы из tfs versioncontrol в каталог с помощью PowerShell

Кто-нибудь знает, можно ли скопировать файлы из системы управления версиями TFS (2013 Update 2) в определенную папку на вашем компьютере?

Допустим, у меня есть путь к серверу $/BuildTemplate2013/BuildProcessSource, и я хочу, чтобы все файлы из этого каталога были скопированы/загружены в C:\destinationDir с помощью PowerShell. Это возможно? У меня установлены инструменты TFS 2013 Update 2 Power, но я не могу найти для этого команду...


person LockTar    schedule 19.05.2014    source источник


Ответы (3)


Я создал сценарий PowerShell, который подключается к серверу TFS с помощью сборок TFS. Затем я перебираю файлы на сервере (по определенному пути) и загружаю их рекурсивно.

# The deploy directory for all the msi, zip etc.
$AutoDeployDir = "Your TFS Directory Server Path"
$deployDirectory = $($Env:TF_BUILD_DROPLOCATION + "\Deploy\" + $Env:TF_BUILD_BUILDNUMBER)

# Add TFS 2013 dlls so we can download some files
Add-Type -AssemblyName 'Microsoft.TeamFoundation.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
Add-Type -AssemblyName 'Microsoft.TeamFoundation.VersionControl.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
$tfsCollectionUrl = 'http://YourServer:8080/tfs/YourCollection' 
$tfsCollection = New-Object -TypeName Microsoft.TeamFoundation.Client.TfsTeamProjectCollection -ArgumentList $tfsCollectionUrl
$tfsVersionControl = $tfsCollection.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer])

# Register PowerShell commands
Add-PSSnapin Microsoft.TeamFoundation.PowerShell

# Get all directories and files in the AutoDeploy directory
$items = Get-TfsChildItem $AutoDeployDir -Recurse

# Download each item to a specific destination
foreach ($item in $items) {
    # Serverpath of the item
    Write-Host "TFS item to download:" $($item.ServerItem) -ForegroundColor Blue

    $destinationPath = $item.ServerItem.Replace($AutoDeployDir, $deployDirectory)
    Write-Host "Download to" $([IO.Path]::GetFullPath($destinationPath)) -ForegroundColor Blue

    if ($item.ItemType -eq "Folder") {
        New-Item $([IO.Path]::GetFullPath($destinationPath)) -ItemType Directory -Force
    }
    else {
        # Download the file (not folder) to destination directory
        $tfsVersionControl.DownloadFile($item.ServerItem, $([IO.Path]::GetFullPath($destinationPath)))
    }
}
person LockTar    schedule 21.05.2014
comment
Мне пришлось добавить -Server $tfsCollection после $items = Get-TfsChildItem $AutoDeployDir -Recurse, чтобы это заработало, и тогда это сработало как чемпион. - person Dan; 05.08.2014
comment
Может потому, что у нас только одна Коллекция в этой компании, это причина, по которой она мне не понадобилась? Я сделал это для TFS2013 - person LockTar; 06.08.2014
comment
Ах, я в 2010 году - независимо, спасибо за скрипт, он сэкономил мне много времени. Я просто хотел упомянуть об этом, если у кого-то еще была аналогичная проблема. - person Dan; 06.08.2014
comment
Я пытаюсь использовать ваш скрипт и клонирую репозиторий из example.visualstudio.com/DefaultCollection. , Что я должен поместить в AutoDeployDir. мой URL-адрес клона: example.visualstudio.com/DefaultCollection/playground/_git/ . Я пробовал полный путь, использовал $/playground и другие комбинации до конечной папки, но список элементов всегда пуст - person Moiz Ahmed; 29.05.2017
comment
@RalphJansen - Круто. Я вижу, что сейчас он использует учетные данные из appdata/cache для TFS. Есть ли у вас какие-либо идеи, с помощью каких библиотек мы можем передавать определенные учетные данные в самом скрипте вместо использования учетных данных из локального кеша? - person Meet101; 25.07.2017

Параметр PowerShell не выбран по умолчанию при установке TFS Power Tools.

Выберите вариант установки инструментов TFS powershell.

введите здесь описание изображения

Затем вы можете использовать командлет Update-TfsWorkspace для получения последних файлов. Пожалуйста, убедитесь, что у вас уже создана рабочая область для каталога, в который вам нужно получить последние файлы. Затем выполните следующее

cd <Your Directory Path>

Update-TfsWorkspace

При выполнении команды let убедитесь, что рабочее пространство создано для пользователя, который будет запускать powershell.

Просто выполните его на

person Hamid Shahid    schedule 19.05.2014
comment
Но как я могу указать конкретный каталог на моем диске, например C:\destinationDir? Я вызываю этот скрипт из моего шаблона процесса сборки, и мне нужно изменить некоторые файлы. - person LockTar; 20.05.2014
comment
Один из способов сделать это — выполнить команды PowerShell из каталога, из которого вы хотите его скопировать. Вам нужно будет уже настроить сопоставление рабочей области, чтобы эта папка могла это сделать. - person Hamid Shahid; 20.05.2014
comment
Эта команда только выводит содержимое сервера. Это эквивалент tf dir. На самом деле он не извлекает файлы в локальную файловую систему. - person Keith Hill; 20.05.2014
comment
Ты прав. Извинения!! Вам нужно запустить командлет Update-TfsWorkspace. Просто запустите его без каких-либо параметров в каталоге, в котором уже настроено рабочее пространство. Я обновлю свой ответ. - person Hamid Shahid; 20.05.2014
comment
Спасибо за информацию, но я создал скрипт немного по-другому, потому что не хотел использовать рабочее пространство. - person LockTar; 21.05.2014

Команда, которую вы ищете, называется tf.exe get и поставляется с клиентскими инструментами TFS, например Visual Studio или автономным инструментом Team Explorer. Для использования tf.exe get вам потребуется настроить сопоставление рабочей области и рабочей папки.

Если вы предпочитаете использовать TF Power Tools, используйте команду Update-TfsWorkspace для получения файлов. Я считаю, что вам все равно понадобится рабочее пространство, определенное с помощью сопоставления рабочей папки.

Update-TfsWorkspace -Item $/TeamProject/Path/Path2/Item -Recurse
person Keith Hill    schedule 19.05.2014