TFS: как отменить извлечение неизмененных файлов в командном файле - PullRequest
167 голосов
/ 13 февраля 2009

Мы используем пакетный файл для генерации кода, и он автоматически проверяет сгенерированные файлы с Team Foundation Server (TFS), чтобы он мог восстановить их. Большинство этих файлов не изменяются, но генератор не знает об этом заранее.

Команда "tfs undo" отменяет извлечение, но выдает запрос, если некоторые из них были изменены (что мы не хотим делать). Мы также не хотим сразу проверять сгенерированные файлы.

Существует ли команда (или серия команд) для отмены извлечения всех неизмененных файлов без запроса пользователя?

Ответы [ 10 ]

197 голосов
/ 13 февраля 2009

Посмотрите на команду Отменить без изменений Team Foundation Server Power Tools Август 2011

c:\myProject> tfpt uu . /noget /recursive

Спасибо Мэтту Флоренсу за обновление ссылки.

Спасибо Рэю Веге за фактический синтаксис .

123 голосов
/ 28 мая 2010

Установите Team Foundation Server Power Tools и выполните следующую команду из командной строки, используя tfpt.exe в корне каталога рабочей области вашего проекта:

c:\myProject> tfpt uu . /noget /recursive

Включая /noget настоятельно рекомендуется, поскольку он предотвращает принудительное «получение последней» всех файлов вашего проекта, что в зависимости от общего количества может занять очень много времени.

117 голосов
/ 06 сентября 2012

Спасибо, @mike & @ ray,

Я хочу сделать это проще.

В VS, в меню Сервис выберите «Внешние инструменты».

External Tools

Нажмите Добавить.

Введите название.

Команда: tfpt.exe

Аргументы: уу. / noget / recursive

Начальный каталог: [вы можете выбрать из кнопки со стрелкой].

Undo unchanged in solution

Undo unchanged in project

В меню «Инструменты» добавлены две новые команды.

Используйте их при необходимости.

Наслаждайтесь,

Офир

26 голосов
/ 31 июля 2015
  1. Щелкните правой кнопкой мыши по вашему проекту
  2. Выберите отменить оформление заказа, затем просто нажмите "ОК" или еще какое-нибудь подтверждение ...
  3. Затем, при отмене извлечения, для каждого файла, в котором есть РЕАЛЬНЫЕ изменения, появится запрос на подтверждение извлечения для этого файла ... просто нажмите «Нет для всех»

Visual Studio будет знать, есть ли у извлеченного файла изменения или нет.

ПРЕДУПРЕЖДЕНИЕ: Этот метод также удаляет новые файлы, то есть файлы, которые еще не зарегистрированы в TFS. Если вы хотите сохранить эти файлы, просто исключите их из набора файлов, которые вы «отменяете».

8 голосов
/ 13 февраля 2009

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

TFS делает это путем сравнения MD5-хэшей содержимого файлов до и после регистрации.

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

Если вашему процессу потенциально может потребоваться удаление файлов, лучше всего посмотреть на команду Team Foundation Power Tools ( tfpt ) и использовать онлайн-команду tfpt, которая только проверять файлы, которые были изменены, и будут достаточно умны, чтобы ожидать удаления для файлов, которые больше не нужны или изменили имя и ожидающие добавления.

Удачи,

Martin.

7 голосов
/ 16 октября 2018

Обновлен этот вопрос с ответом при работе только с TFS2017 и VS2017 .

Электроинструментов не существует для TFS 2017, и старые не могут хорошо работать вместе с ним, но, очевидно, большая часть функциональности была перенесена на сам VS2017 или плагины (см. Ниже).

Расширение Visual Studio 2017

Некоторые действия, такие как отмена неизмененных файлов, перемещены в расширение для VS2017

Расположение кнопки «Отменить без изменений»:

undo unchanged button location

Known bug

You have to open the 'Source Control Explorer' (and leave it open) so that the 'Undo Unchanged' is displayed in the Action menu of the Pending Changes view. сообщается здесь .

Расширение интеграции оболочки Windows

Кроме того, вы по-прежнему можете настроить интеграцию оболочки Windows с помощью отдельного установщика , который больше не связан с TFS Power Tools.

Интеграция с оболочкой Windows не работает точно так же, как раньше с powertools, но самые важные действия сработали для меня.

5 голосов
/ 05 января 2012

Остерегайтесь того, что отмена TFS не вернет значение «Дата изменения» файловой системы. Это очень неприятно, особенно если вы используете такие инструменты, как robocopy, для синхронизации удаленных компьютеров. Даже после отмены извлечения, если вы сохранили файл, обновив значение «Дата изменения», это обновленное значение останется на месте даже после отмены извлечения.

4 голосов
/ 11 декабря 2015

Есть пара моментов, касающихся опции uu для tfpt (рекомендуется в большинстве других ответов), которые сначала мне не были понятны. Во-первых, это справка командной строки, доступ к которой можно получить с помощью команды tfpt uu /?

Отменяет избыточные ожидающие изменения. Если состояние элемента с ожидающие изменения такие же, как на сервере, то изменение отменяются.

Использование: tfpt uu [/ changeset: changesetnum] [/ recursive] [/ noget] [Имя_файла ...]

  • / changeset Сравнить рабочую область с состояниями элементов в версии набора изменений, указанной вместо последней версии
  • filespec ... Проверять только указанные спецификации файлов на предмет избыточных изменений
  • / recursive Проверьте указанные спецификации файлов с полной рекурсией
  • / noget Не запускать get перед проверкой

Параметр / changeset нельзя использовать с файловыми спецификациями или /recursive.

Теперь позвольте мне разбить команду, которая рекомендуется в других ответах.

tfpt uu . /noget /recursive
  • tfpt uu указывает, что мы хотим использовать команду «Отменить без изменений».
  • . указывает (я полагаю), что текущий рабочий каталог должен использоваться как спецификация файла.
  • /noget гарантирует, что 'get последней версии' не вызывается до удаления неизмененных файлов.
  • /recursive гарантирует, что будут учитываться не только спецификации файлов, но и все рекурсивные дочерние папки и файлы. Кажется, это зависит от спецификаций файлов - если ничего не указано, обрабатывается все рабочее пространство.

Таким образом, здесь есть пара моментов, которые нужно отметить относительно команды сверху ...

  • Это зависит от рабочего каталога.
  • Он не обрабатывает все рабочее пространство.

Я обнаружил, что следующая команда работает лучше всего для меня - она ​​будет обрабатывать все рабочее пространство.

tfpt uu /noget

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

3 голосов
/ 04 марта 2016

Я вижу подход Рэй ЛайонФанга выше. Не могу комментировать, так как у меня нет представителя. Хотя мне нравится такой подход, так как в Инструменты и т. Д. Не требуется никаких изменений ........

  1. Щелкните правой кнопкой мыши по вашему проекту
  2. выберите отменить оформление заказа, затем просто нажмите "ОК" или еще какое-нибудь подтверждение ...
  3. тогда при отмене checkout, для каждого файла, в котором есть РЕАЛЬНЫЕ изменения, появится запрос попросить вас подтвердить проверку для этого файла ... просто нажмите «Нет, чтобы Все "
  4. Visual Studio будет знать, есть ли изменения в извлеченном файле или никто. Имейте в виду, что этот метод также удаляет добавленные файлы, которые не являются пока проверено из TFS ...

....... есть проблема с этим подходом в том, что при нажатии «No To All» сохраняется несколько файлов, которые не были изменены. Кажется, что-то происходит, как отмена неизмененных файлов до тех пор, пока не попадет первый файл, который на самом деле был изменен, а затем проигнорирует оставшиеся неизмененные файлы, если это имеет смысл. Я видел этот эффект только время от времени.

Потенциальный обходной путь - следовать описанному выше процессу, но вместо нажатия «Нет для всех» нажмите «Нет» для каждого файла. Поскольку это может занять некоторое время в зависимости от количества файлов, с которыми вы работаете, обычно я удерживаю нажатой клавишу «ALT + N», и она просто ускоряет все файлы, удаляя ВСЕ неизмененные файлы.

0 голосов
/ 13 февраля 2009

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

На работе мы все ненавидим TFS.

...