2011-01-17 3 views
8

Я пытаюсь изменить скрипты сборки с помощью SourceSafe на TFS без использования MsBuild (пока).Можете ли вы сделать TFS без рабочего пространства?

Одна из проблем заключается в том, что каталог рабочей области переименовывается и архивируется сценариями, что делает TFS полагающим, что ему не нужны никакие файлы. Даже с флагом /force он просто получает каталоги, не получая исходные файлы.

настоящее время я использую

TF.exe get "Product/Main/Project1" /force /recursive /noprompt 

Чтобы сохранить мне управление рабочими пространствами в скриптах или с помощью промежуточных каталогов, кто-нибудь знает команды, которые могут получить каталоги и код без необходимости рабочее пространство?

ответ

13

Невозможно запустить tf get без рабочего пространства. Причина в том, что серверу необходимо знать соответствие между путями сервера и локальными путями.

Если вы работаете с большим количеством файлов, это не очень хорошая идея:

  1. Создать & Удалять новое рабочее пространство каждый раз, когда
  2. Или создать новую рабочую область (и затем никогда удалить)

причина этого заключается в том, что каждый раз, когда вы делаете Get, сервер отслеживает, какие файлы, в которых версии были загружены на какое рабочее пространство. Если вы никогда не очистите эти рабочие пространства, таблица, в которой хранится эта информация, будет расти со временем.

Кроме того, если вы создаете &, удаляя рабочее пространство все время, сервер должен записать все эти строки, а затем удалить их, когда вы закончите. Это не нужно.

Вы действительно должны попробовать и повторно использовать одно и то же рабочее пространство каждый раз. Если вы это сделаете, сервер очень эффективен только при отправке файлов, которые были изменены с момента их последней загрузки.Даже если ваша сборка перемещается из одной ветки в другую, вы можете использовать tf get /remap, что иногда более эффективно, если ветви имеют общие файлы.

Хотя это не решит вашу проблему, возможно скопировать файлы и загрузить файлы без места в рабочем месте.

Чтобы получить список файлов:

tf dir $/Product/Main/Project1 /R 

Чтобы скачать файл:

tf view $/Product/Main/Project1/file.cs 

С творческой пакетный файл, вы можете струна эти два вместе с командой FOR. Однако я бы порекомендовал сначала попытаться решить проблему с рабочей областью, так как это предназначалось для использования TFS.

+0

Хорошо, кажется, что путь наименьшего сопротивления - проверить код на стабильное рабочее пространство, а затем скопировать код оттуда в рабочие каталоги скрипта сборки. –

+0

Вы задумывались над тем, чтобы сделать предложение визуальной студии alm stackexchange? http://area51.stackexchange.com/proposals/15894/visual-studio-alm?referrer=VS9uwfDzMKasH8mQCaDCxQ2 –

+0

Это решение является более чистым, поскольку оно включает в себя только получение (никаких операций перемещения файла не требуется): http://stackoverflow.com/questions/10624031/how-to-perform-a-tfs-get-to-a-supply-or-current-directory-path-ignoring-works –

0

Я не знаю, почему ваши скрипты каждый раз удаляют каталоги рабочей области. Но чтобы ответить на ваш вопрос, я не думаю, что вы можете получить исходный код из TFS без рабочего пространства. Возможно, вы можете попытаться создать пробел каждый раз перед вами, чтобы получить. Команда

tf.exe workspace /new 
+0

Рабочее пространство было очищено для обеспечения того, чтобы случайно не использовались файлы с кешем. Не стоит копировать все в другой рабочий каталог, который, однако, очищается. –

3

Рабочая область представляет собой отображение между местоположением хранилища источника и места файловой системы, так что ни вы не можете уйти с не использованием рабочего пространства. Но вы можете легко настроить и снести рабочее пространство, когда вам нужно.

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

<Target Name="GetDatabaseSources"> 
    <!-- clean out the folder before doing the fresh get of the database sources --> 
    <Folder.CleanFolder Path="$(DatabaseBuildBaseLocation)" Force="true"/> 

    <!-- create a workspace for the database source of the product --> 
    <CallTarget Targets="CreateDatabaseSourceWorkspace" /> 
    <!-- get the database sources for the product --> 
    <Get TeamFoundationServerUrl="$(TeamFoundationServerUrl)" Workspace="$(DatabaseSourceWorkspaceName)" Recursive="true" Version="$(DatabaseSourceVersion)" Force="true" /> 
    <!-- delete the workspace --> 
    <Exec Command="$(Tf) workspace /delete $(DatabaseSourceWorkspaceName) /server:$(TeamFoundationServerUrl) /noprompt " ContinueOnError="true" /> 
</Target> 

<!-- creates and maps a temporary workspace for the database source of the product --> 
<Target Name="CreateDatabaseSourceWorkspace"> 
    <Exec Command="$(Tf) workspace /delete $(DatabaseSourceWorkspaceName) /server:$(TeamFoundationServerUrl) /noprompt " ContinueOnError="true" /> 
    <Exec Command="$(Tf) workspace /new $(DatabaseSourceWorkspaceName) /server:$(TeamFoundationServerUrl) /noprompt" /> 
    <Exec Command="$(Tf) workfold /unmap /workspace:$(DatabaseSourceWorkspaceName) $/" /> 
    <Exec Command="$(Tf) workfold /map /workspace:$(DatabaseSourceWorkspaceName) /server:$(TeamFoundationServerUrl) $(DatabaseSourceLocation) &quot;$(DatabaseBuildBaseLocation)&quot;" /> 
</Target> 

TFS ваш исходный репозиторий, но не явно указать, что ваши скрипты сборки были разработаны для. Вы действительно должны перенести их в сценарий сборки TFS, тогда вы можете упростить свою сборку, например, вам не придется беспокоиться о том, чтобы отображать рабочие пространства или получать свежий исходный код, потому что TFS делает это для вас, все, о чем вам нужно беспокоиться, - это любые пользовательские шаги сборки и, возможно, архивирование результатов сборки.

0

Вы можете сделать это легко с помощью SourceSafe: получить любую версию в любом конкретном каталоге, который вам нужен. И это очень часто было очень удобно. Часто бывают случаи, когда хочется этого. Позор (если) TFS не поддерживает его, это недостающая функциональность, imho.

3

Neno Loje создано: a small utility that does exactly what you need. Для загрузки он также может удалить любые привязки источника управления из файла решения и проекта, если вам это нужно.

+0

Удивительный инструмент!) –

1

C# имеет библиотеку VersionControlServer, и вы можете использовать вызов VersionControlServer.GetItems для извлечения TFS Item. Если ItemType - это File, тогда вызывайте DownloadFile для извлечения файла.

+0

Это не то, что делает «GetItems». 'GetItems' получает информацию о' Item's в TFS. Он не загружает их в файловую систему. –

+0

Извините, я пропустил информацию. Вы можете использовать GetItems для получения информации о файловой системе, тогда вы можете зациклировать информацию о товаре и вызвать DownloadFile. – Shiv

Смежные вопросы