TFS: Як можна скасувати замовлення немодифікованих файлів у пакетному файлі


172

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

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

Чи є команда (або серія команд) для скасування оформлення всіх немодифікованих файлів, не спонукаючи користувача?


Зверніть увагу , що вручну скасовуючи всі зміни з очікуванням вибору «Ні для всіх» при запиті про файлах , які були змінені не буде коректно працювати, так як він буде скасувати ADDзміни без запиту (див відповіді Рея ).
Еласканатор

Відповіді:


202

Погляньте на команду Скасувати незмінену команду Power Foundation Server Power Power Tools серпня 2011 року

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

Дякую Метту Флоренцію за оновлення посилання.

Дякую Рей Вега за фактичний синтаксис .


1
Це слід відредагувати / об'єднати, щоб містити інформацію про використання як частину вмісту відповіді.
mcw

4
Ви дуже хочете прочитати цю публікацію: aaubry.net/undo-checkout-on-unchanged-files-tfs.html
Байрон Вітлок

17
хм, щось, що майже кожен робить кілька разів на день: "Давайте покладемо його в окремий інсталятор під назвою" Електроінструменти "... зітхнути
vidstige

1
@Mike Chaliy ви могли б подумати. Я зараз випробовую TFS і шукав, як це зробити, і закінчився тут.
vidstige

3
Це не працює, якщо ваші зміни об'єднані. Здається, tfpt uu завжди вважає злиття реальною зміною, навіть якщо немає змін у файлі, і немає можливості відвернути цю поведінку. Це нормально як поведінка за замовчуванням, але іноді це не те, що ви хочете.
користувач1164178

124

Встановіть інструменти живлення інструментів Team Foundation Server та виконайте наступне з командного рядка, використовуючи tfpt.exe в корені каталогу робочої області вашого проекту:

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

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


12
Це має бути прийнятою відповіддю, в ній є всі відповідні деталі (як доведено вищою оцінкою).
rikoe

7
Класно. Крім того, чому б не додати це як постійний "зовнішній інструмент" до Visual Studio. Візьмемо це як приклад: blog.kurtschindler.net/post/… Команда: [ваш редакторський каталог] \ TFPT.EXE Аргументи: uu. / noget / recursive Початковий каталог: $ (SolutionDir)
rohancragg

12
Питання визначає виконання цієї операції без підказки , але, здається, жодна з відповідей не вирішує цього питання. Якщо вам це потрібно, додатковий / безпровідний варіант - це варіант, який ви шукаєте. У документації до PowerTools цього відсутнє! Він перераховує цю опцію для декількох команд, але не цю (UU). Остерігайся!
Джонні Кауффман

1
@ user20358 або cdдо того, де знаходиться ваш робочий каталог (наприклад, мій був c:\myProject), або явно включіть його після цього uu(замінивши його періодом .)
Ray

Чи має цей перемикач сили, як / Y чи / force? Мене завжди запитують, чи справді я хочу скасувати це, і я хотів би, щоб це було автоматизовано. Покладіть / Y туди, але це говорить мені, що для параметра Y потрібне значення.
Білка білки

118

Дякую @mike & @ray,

Я хочу зробити це легше.

У VS в меню Інструменти натисніть "Зовнішні інструменти".

Зовнішні інструменти

Натисніть кнопку Додати.

Введіть назву.

Команда: tfpt.exe

Аргументи: uu. / невідповідний / рекурсивний

Початковий каталог: [ви можете вибрати кнопку зі стрілкою].

Скасувати без змін у розчині

Скасувати без змін у проекті

У меню Інструменти додано дві нові команди.

Використовуйте їх у разі потреби.

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

Офір


3
Дуже круто. Ви можете піти ще на крок і додати ярлик. Зверніть увагу, наскільки далеко внизу додана ваша команда (наприклад, це може бути четверта). Потім перейдіть до Інструменти -> Опції -> Навколишнє середовище -> Клавіатура -> та введіть у текстовому полі "Показати команди, що містять" "Інструменти. Зовнішнє" та призначте ярлик. Наприклад, я вибрав Tools.ExternalCommand4, оскільки моя щойно додана команда скасування була четвертою вниз. Потім я призначив клавіші швидкого доступу Ctrl + Alt + U, Ctrl + Alt + U
Маріо

1
Чи не могли б ми мати оновлену версію цього? Якщо знайдено tf.exe, але що таке команда uu? мені підказує Нерозпізнана команда: uu. Дякую за допомогу
Shay

1
@Shay: працює для мене у VS2015 із встановленими останніми електроінструментами TFS.
Ігор Малін

27
  1. Клацніть правою кнопкою миші на своєму проекті
  2. Виберіть скасувати замовлення, а потім просто натисніть кнопку "ОК" або все, що підтвердження залишилося ...
  3. Потім, під час скасування оформлення замовлення для кожного файлу, в якому є реальні зміни, підказка попросить підтвердити реєстрацію цього файлу ... просто натисніть "Ні для всіх"

Visual studio дізнається, чи є у перевіреному файлі зміни чи ні.

УВАГА: Цей метод також видаляє нові файли, тобто файли, які ще не зареєстровані в TFS. Якщо ви хочете зберегти ці файли, тоді просто виключіть їх із набору файлів, які ви "скасовуєте".


14
Be aware that this method also removes added files that are not yet checked in from TFS.... так, це досить негайний дискваліфікатор.
shortstuffsushi

1
Він працює для злиття шахтних безосновних гілок. Дякую. Зазвичай у цьому випадку VS позначає Усі файли в розчині як змінені.
KoViMa

2
це пекло, коли nuget робити замовлення на 10000 файлів, які не потрібно оновлювати.
Євген Найда

13

Оновіть це запитання відповіддю лише під час роботи з TFS2017 та VS2017 / VS2019 .

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

Розширення Visual Studio 2017/2019

Деякі дії, такі як скасування незмінних файлів, переміщені до

розширення для VS2017

розширення для VS2019

Розташування кнопки "Скасувати без змін":

скасувати незмінене розташування кнопок

Відома помилка

Вам потрібно відкрити «Провідник керування джерелами» (і залишити його відкритим), щоб в меню Дії у вікні очікувань змін відобразилось повідомлення «Скасувати без змін». повідомляється тут .

Розширення інтеграції оболонки Windows

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

Інтеграція оболонки Windows не працює точно так само, як раніше, але найважливіші дії працювали для мене.


У запитанні я помітив, що вони хочуть його
скриптувати

1
Я не можу знайти параметр "Скасувати незмінний" у VS2017 після встановлення зв'язаного розширення. Я щось пропустив?
Erzékiel

Я не дуже його використовував. Коли я використовував його для тестування свого клієнта, мені довелося трохи натиснути в Провідник Team і переконатися, що змінилися, щоб скасувати. Цілком можливо, що він з’являється лише тоді, коли у вас є лише очікувані зміни, накладені на черговий комітет, що з'являється ця опція. (або змінюється лише одна гілка) ...
Schwarzie2478

2
@ Erzékiel Опція з'являється лише тоді, коли Провідник рішень відкритий і готовий.
MatrixRonny

1
Це розширення працює іноді , і його присутність буде пов'язано , має TFS Source Control Explorer , відкритим і не оглядачі рішень (як деякі помилково вказував) - не переплутати два різних вікна управління. Однак; коли я кажу іноді, це тому, що воно приходить і йде. Зараз у мене цього немає, я робив місяць тому. Його крихітний трохи баггі, і я боюся, що інші розширення є винуватцем, таких як Resharper тощо.
Крістіан

8

Якщо ви просто знову перевірите всі файли, які ви перевірили, TFS досить розумний, щоб зрозуміти, які зміни змінюються, і включити їх лише у набір змін, записаний на сервері.

TFS робить це, порівнюючи хеші MD5 вмісту файлів до і після реєстрації.

Це все припускаючи, що ваш процес генерації - це суто оновлення одного і того ж набору файлів, тобто у вас ніколи не буде випадку, коли файл, сформований у попередньому поколінні, не потрібен у наступному поколінні (тобто ви хочете відкласти видалення для цього файлу) або що файли змінюють ім'я.

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

Удачі,

Мартін.


6
Дякуємо за це, однак ми не хочемо перевіряти модифіковані файли на той час. Змінені не повинні бути зареєстровані, поки функція не буде виконана, але немодифіковані повинні бути видалені, щоб розробник міг переглянути зміни.
Роберт Вагнер

@RobertWagner Якщо у вас є складована конструкція, ви можете скасувати (якщо вона не припиняє виявлення ідентичного файлу), коли ви отримаєте сповіщення про спливаюче вікно про те, що зміни потрібно створити спочатку.
Еласканатор

6

Слідкуйте за тим, щоб скасувати TFS не поверне значення "Дата зміна" файлової системи. Це дуже неприємно, особливо якщо ви використовуєте такі засоби, як роботокопія, для синхронізації віддалених машин. Навіть після того, як ви скасуєте реєстрацію, якщо ви зберегли файл, оновивши значення "Дата зміни", це оновлене значення залишиться навіть після скасування замовлення.


1
Або використовувати роботокопію або VCS, використовуючи суміш, завжди буде виникати невідповідності. Набагато краще було б заповнити кожну машину з VCS безпосередньо.
Річард

4

Є кілька моментів щодо варіанти uu для tfpt (рекомендується в більшості інших відповідей), які спочатку були мені не зрозумілі. По-перше, це довідка з командного рядка, до якої можна отримати доступtfpt uu /?

Скасовує зайві очікування змін. Якщо стан елемента із змін, що очікує, такий же, як і на сервері, то зміну скасовується.

Використання: tfpt uu [/ changeset: changesetnum] [/ рекурсивний] [/ noget] [filespec ...]

  • / changeset Порівняйте робочу область зі статтями пункту у вказаній версії Changeset замість останньої версії
  • filespec ... Перевірте лише перелічені файлові специфікації на наявність зайвих змін
  • / рекурсивна Перевірка зазначених файлових специфікацій з повною рекурсією
  • / noget Не запускайте get перед перевіркою

Параметр / changeset не може використовуватися з filepecs або / рекурсивно.

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

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

Отже, тут слід зазначити кілька речей щодо команди зверху ...

  • Це залежить від робочого каталогу.
  • Він не обробляє всю робочу область.

Я виявив, що наступна команда найкраще працює для мене - вона обробить всю робочу область.

tfpt uu /noget

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


3

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

  1. Клацніть правою кнопкою миші на своєму проекті
  2. виберіть скасувати замовлення, а потім просто натисніть кнопку "ОК" або все, що підтвердження залишилося ...
  3. тоді, під час скасування оформлення замовлення для кожного файлу, в якому є РЕАЛЬНІ зміни, підказка попросить підтвердити реєстрацію цього файлу ... просто натисніть "Ні для всіх"
  4. Visual studio дізнається, чи є у перевіреному файлі зміни чи ні. Майте на увазі, що цей метод також видаляє додані файли, які ще не зареєстровані в TFS ...

....... існує проблема з таким підходом у тому, що натискання "Ні всім" зберігає кілька файлів, які не змінені. Здається, він робить щось на зразок Скасування немодифікованих файлів, поки не потрапить у перший фактично модифікований файл, а потім ігнорує решту немодифікованих файлів, якщо це має сенс. Цей ефект я бачив лише раз у раз.

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


будь ласка, повідомляйте, що це не може бути достатньо підкреслено. Щойно додані файли до проекту також видаляються при такому підході. Про це йдеться і в серралі інших відповідей.
Крістіан

-20

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

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


1
Ми можемо перевірити окремі файли, але блокування не дозволить розробнику перевірити їх.
Роберт Вагнер,

5
Збирався відмовитися від голосування, але "На роботі ми всі ненавидимо TFS". зберегли його.
Джеймс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.