TFS: Как вы можете отменить проверку немодифицированных файлов в пакетном файле

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

В VS в меню "Сервис" нажмите "Внешние инструменты".

External Tools

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

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

Команда: tfpt.exe

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

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

Undo unchanged in solution

Undo unchanged in project

В меню "Сервис" добавлены две новые команды.

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

Enjoy,

Офир

Ответ 4

  • Щелкните правой кнопкой мыши на своем проекте
  • Выберите отменную проверку, затем просто нажмите "ОК" или все, что осталось от подтверждения...
  • Затем, при отмене проверки, для каждого файла, который имеет РЕАЛЬНЫЕ изменения в нем, приглашение попросит вас подтвердить проверку этого файла... просто нажмите "Нет для всех"

Visual studio узнает, имеет ли файл с проверкой изменения или нет.

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

Ответ 5

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

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

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

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

Удачи,

Martin.

Ответ 6

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

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

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

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

расширение для VS2017

расширение для VS2019

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

undo unchanged button location

Известная ошибка

Вы должны открыть "Source Control Explorer" (и оставить его открытым), чтобы "Undo Unchanged" отображалось в меню "Action" в представлении "Pending Changes". сообщили здесь.

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

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

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

Ответ 7

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

Ответ 8

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

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

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

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

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

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

tfpt uu . /noget /recursive
  • tfpt uu указывает, что мы хотим использовать команду Undo Unchanged.
  • . указывает (я думаю), что текущий рабочий каталог должен использоваться как спецификатор.
  • /noget гарантирует, что "получить последнюю версию" не вызывается перед тем, как отменить неизменные файлы.
  • /recursive гарантирует, что будет рассмотрен не только файл спецификаций, но и все рекурсивные дочерние папки и файлы. Это, похоже, зависит от файла - если нет, то обрабатывается вся рабочая область.

Итак, здесь есть несколько вещей, касающихся команды сверху...

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

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

tfpt uu /noget

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

Ответ 9

Я вижу подход Ray LionFang выше. Не могу прокомментировать, так как у меня нет репутации. Хотя мне нравится этот подход, так как никаких изменений, требуемых для инструментов и т.д., Не требуется.

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

....... есть проблема с этим подходом в том, что нажатие "Нет для всех" сохраняет несколько файлов, которые не изменяются. Кажется, что-то вроде Undoing unmodified files, пока оно не попадет в первый файл, который фактически изменен, а затем игнорирует остальные немодифицированные файлы, если это имеет смысл. Я видел этот эффект только время от времени.

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

Ответ 10

ЭТО РАБОТАЕТ ВЕЛИКОЕ Щелкните правой кнопкой мыши на своем проекте Выберите отменную проверку, затем просто нажмите "ОК" или любое другое подтверждение осталось... Затем, при отмене проверки, для каждого файла, который имеет РЕАЛЬНЫЕ изменения в нем, приглашение попросит вас подтвердить проверку этого файла... просто нажмите "Нет для всех", Visual studio узнает, имеет ли файл с проверкой изменения или нет.

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

Ответ 11

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

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