Как заставить TFS 2010 обнаруживать изменения, внесенные в файлы вне Visual Studio?

118

Я использую Team Foundation Server 2010 с Visual Studio 2010.

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

Как это можно решить?

Асмо
источник
18
Subversion или Git (и, возможно, другие) сравнивают хэши файлов вместо API для проверки входа / выхода файла. Намного проще и менее рискованно!
Steve B
8
хуже того, TFS даже не замечает, что измененный файл нужно вернуть, поэтому вы часто можете забыть об этом ... пока ваш коллега не проверит его и не поймет, что ваш код не компилируется или не работает. Неудивительно, что люди говорят, что TFS - это «VSS на стероидах» - лучше, но все же есть многие проблемы VSS.
gbjbaanb
Это VSS на стероидах, точно так же, как стероиды разрушают ваше тело.
Ян Кемп,

Ответы:

48

Если у вас есть сетевое соединение с вашим сервером, когда вы работаете за пределами Visual Studio, вероятно, лучше всего пойти дальше и проверить файл перед его редактированием либо с помощью клиента командной строки tf, либо с помощью интеграции с оболочкой Windows Explorer, которая доступно в версии TFS Power Tools . (Кроме того, все большее количество других инструментов имеют интеграцию с TFS, которая делает это автоматическим, но если вы просто используете блокнот, это все равно нужно делать вручную.)

Конечно, часто бывает, что вы работаете и у вас нет доступного сетевого подключения, позволяющего извлекать файлы.

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

Если вы не знаете, какие файлы вы редактировали, вы можете обнаружить изменения, выполнив tfpt onlineкоманду (также являющуюся частью выпуска Power Tools). Это позволит найти файлы, которые были изменены локально, и извлечь эти файлы с сервера.

Эдвард Томсон
источник
Visual Studio, похоже, не обнаруживает изменения файлов, просто проверяя их. Я просто попытался проверить папку, и ее содержимое появилось в ожидающих изменениях как правки. Затем я удалил папку в проводнике и обновил ожидающие изменения, но Visual Studio не сообщила, что файлы были удалены в ожидающих изменениях. Кроме того, файлы все еще присутствовали в обозревателе решений.
Кайл Делани
160

В TFS для этого есть команда «Согласовать»:

  1. Откройте проводник управления версиями
  2. Щелкните правой кнопкой мыши папку с изменениями и выберите Сравнить.
  3. Выберите файлы, которые вы хотите согласовать (нажмите CTRL+, Aчтобы выбрать все файлы)
  4. Нажмите на кнопку Согласовать.
  5. Установите параметры в диалоговом окне « Согласование различий в папках». Убедитесь, что для файлов, для которых нет ожидающих изменений , установлено значение " Извлечь".
  6. Нажмите ОК
  7. Если у вас есть локальные изменения, будет показано диалоговое окно Check Out . Установите предпочтительный тип блокировки
  8. Нажмите Check Out

Согласование различий в папках

См. Также: Согласование различий между папками

MHU
источник
13
Это лучший ответ, так как он не требует командной строки или рискованного «Отменить отложенные изменения».
NickH
4
Спас мой день! Я точно следовал вашим шагам, и все сработало именно так, как ожидалось. :-)
Гилад Барнер
4
Работал как описано. Должен быть лучший ответ.
Николас
К сожалению, когда я делаю это для всего моего проекта, я получаю сообщение об ошибке . Указанный путь, имя файла или оба слишком длинные. Полное имя должно быть меньше 260 символов, а имя каталога должно быть меньше 248 символов. Выбор отдельных папок не подходит для меня, потому что я не могу вспомнить все каталоги файлов, которые я изменил. Любая идея?
kraftwer1
2
Отлично работает в обновлении 3 VS 2015, большое спасибо. Должен быть лучший ответ, никаких хитрых команд, чтобы заставить его работать
Николас Леуччи
35

Это сработало для меня, используя TFS Power Tools:

tfpt online /adds /deletes /diff /noprompt /recursive directory-name

(где имя-каталога - это путь к обновляемому каталогу, в противном случае он обнаружит изменения во всем репозитории TFS)

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

Адам Баткин
источник
Спасибо за подсказку @Adam Batkin. Сработало как шарм, и теперь я исправился! +1
iOnline247
9
Остерегайтесь, эта командная строка также будет включать нежелательные файлы: * .user, BIN \, obj и т. Д.
Стив Б.
1
Ура, я искал способ командной строки, чтобы я мог автоматизировать обновление TFS компании из моего локального репозитория Git!
Марк К. Коуэн,
2
@SteveB есть /exclude:fld_name/*,filenameпереключатель, который можно использовать для исключения нежелательных файлов .. это меня сильно остановило
Кресимир Пендич
1
Я бегаю вот так, tfpt online /deletes /noprompt /recursive directory-nameи мне нужно "изменить" тысячу файлов, так что нужно отменить. Но я их ни разу не трогал, просто удалил папку.
Дмитрий Лахода 03
16
*1- make changes outside of Visual Studio
2- go to Visual Studio and open Source Control Explorer
3- right click on the folder > "Check Out for Edit" > "Check Out"
4- right click on the same folder > "Undo Pending Changes..." > "Undo changes" > "No to All"*

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

Рекомендую перед операцией создать ветку. Он изолирует вам время операции.

Примечание. Этот метод также выполняет идентичную очистку файлов, которые TFS всегда отмечает как измененные.

hugbe8
источник
3
Это действительно должен быть комментарий к сообщению alga , а не новый ответ. В любом случае, я бы по-прежнему не рекомендовал делать это по той же причине, по которой я рекомендовал этого не делать, когда alga предлагала это выше.
Эдвард Томсон
Совершенно молодец! Именно то, что я искал (после того, как наша компания переместила наш сервер TFS, и TFS / VS2010 были сбиты с толку). Теперь я только что проверил мои отредактированные файлы. Спасибо!
Майк Гледхилл
Это работает, но MS должна предоставить лучшие способы сделать это. Командная строка и хаки не нужны для хорошего продукта (особенно если он встроен в VS). SVN и Mercurial делают это для развлечения ...
user2173353 08
Вместо пункта 4 вы можете использовать tfpt uu stackoverflow.com/a/544285/10245
Тим Абелл
Это просто отменяет то, что вы сделали. Это не сообщает Visual Studio о том, что вы сделали.
Kyle Delaney
7

Попробуй это. Это своего рода обходной путь, но он работает:

  1. вносить изменения вне Visual Studio
  2. перейдите в Visual Studio и откройте обозреватель управления исходным кодом
  3. щелкните правой кнопкой мыши папку> «Отменить для редактирования» > «Оформить»
  4. щелкните правой кнопкой мыши ту же папку> «Отменить ожидающие изменения ...» > «Отменить изменения» > « Нет для всех »

Вот и все. Теперь изменения видны.

Александр Г
источник
3
Я бы действительно не рекомендовал это делать - меня больше всего беспокоит то, что я наткнусь на это и случайно отменю все мои законные изменения. Кроме того, вы проверяете все файлы, которые, в зависимости от конфигурации вашего клиента и сервера, вероятно, заблокируют некоторые или, возможно, все файлы и могут получить последнюю версию при проверке, что, безусловно, может раздражать.
Эдвард Томсон
1
Это просто отменяет то, что вы сделали. Это не сообщает Visual Studio о том, что вы сделали.
Kyle Delaney
И если вы создали или добавили новые элементы в этом сеансе: Gone baby, gone!
Кристиан
4

Есть еще одно решение, позволяющее заставить TFS определять файлы, которые были изменены вне Visual Studio:

  1. Открыть решение офлайн
  2. В обозревателе решений выберите файл решения и нажмите кнопку «Перейти в Интернет» ( Значок кнопки GoOnline).

После этого TFS автоматически просканирует решение на предмет изменений.

Первый шаг может быть достигнут несколькими способами. Вот некоторые:

  • Используйте расширение GoOffline - очень просто и эффективно.
  • Если при открытии решения вас попросят ввести учетные данные TFS (без автоматической авторизации домена), не вводите учетные данные. Решение откроется в автономном режиме, и вы войдете в систему после нажатия кнопки Go Online.
  • (крайнее решение) Отключите сетевой кабель; Откройте решение; Подключите сетевой кабель.
Кристиан Лупашку
источник
3

Visual Sourcesafe работает так же, и способ, которым я получаю VSS или TFS, чтобы заметить изменение, - это проверять файл один раз в Visual Studio.

чекрейза
источник
1

Откройте систему управления исходным кодом и перейдите в папку TFS. Щелкните папку правой кнопкой мыши и выберите «Сравнить».

Обратите внимание, что ваши отредактированные файлы отмечены красным.

Я считаю, что это лучше, чем то, tfpt onlineчто также дает вам файлы, которые не предназначены только для чтения и не редактируются.

user2572682
источник
1

У меня была эта проблема в прошлом, когда мой Интернет был отключен, и я работал в автономном режиме, и большинство моих изменений не отображалось в Team Explorer.

Выполните следующие действия: Во-первых, в обозревателе решений выберите папку, которую вы хотите повторно согласовать (для меня это была вся моя папка решения), и выберите Сравнить ... введите описание изображения здесь Нажмите в поле « Изменить фильтр» и в тексте фильтра - поле, вы можете ввести:

*.cs;!obj\;!bin\;!packages\;

В этом примере он будет включать в поиск только файлы C # и исключать из папок: bin, obj и packages.

Обратите внимание, что столбец Pending Change содержит информацию о том, помечен ли файл как редактирование, добавление и т. Д. Или ничего ...

  • Чтобы пометить как редактируемый (когда у локального элемента есть соответствующий серверный элемент), выберите файл и выберите « Проверить для редактирования ...»
  • Чтобы пометить как добавленный (если у локального элемента нет серверного элемента), выберите файл и выберите Добавить файлы.

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

+ В решении нажмите кнопку подключения (если отображается) с надписью Go Online .

Jaider
источник
0

Я обнаружил, что в Visual Studio 2015 при открытом проекте Visual Studio обнаружила для себя, что файлы были изменены извне, и автоматически проверила их без каких-либо действий. При проверке проекта обычным способом внешние модификации сохраняются.

Грэм Лэйт
источник
0

В моем случае сработало следующее (по крайней мере, один раз, когда я это пробовал):

  1. Перейдите на панель ожидающих изменений
  2. Выберите « Параметры просмотра» в разделе «Включенные» или «Исключенные изменения».
  3. Переключение между Показать все и Показать изменения решения
  4. При желании переключитесь обратно

Обновить изменения TFS

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

snumpy
источник