Почему TFS не получает последние версии?


177

Почему? Почему ПОЧЕМУ TFS не работает постоянно?

Вы бы подумали, что эта функция была бы тщательно протестирована.

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

Моя локальная установка испорчена или вы тоже так делаете?


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

Это должен быть комментарий.
Jimenemex

Ответы:


118

TFS переопределила, что делает «Get Latest». С точки зрения TFS, Получить последние означает получить последнюю версию файлов, но игнорировать те, которые, по мнению сервера, уже находятся в вашей рабочей области. Что для меня и для всех остальных на планете неправильно.

Смотрите эту ссылку: http://blogs.microsoft.co.il/blogs/srlteam/archive/2009/04/13/how-get-latest-version-really-works.aspx

Единственный способ заставить его делать то, что вы хотите, - это получить определенную версию, а затем установить оба флажка «Перезаписать ...».


7
Это не правильно. TFS «get last» работает точно так, как рекламируется, если TFS знает об изменениях в файлах. Get Latest только «облажается», когда люди выходят и изменяют данные за пределами IDE без предварительной проверки. Затем TFS считает, что у вас есть последний источник на диске, и не получает его.
Робатик

18
@Robaticus Как TFS «получить последние» рекламируется на самом деле. как и раньше говорил Крис Лайвли, он и все на планете понимают, что «получай последнюю версию», получай последнюю версию, а это не то, что сделал бы tfs. Вам не нужно редактировать исходный код вне TFS, чтобы испортить его. У меня есть 2 рабочие станции и работают взаимозаменяемо, и я просто не могу получить синхронизацию источника. получение последней версии - это уже хлопоты с tfs, и я не могу себе представить, что бы хотелось объединить.
Саяфул Низам Яхья

2
@publicENEMY, я имел обыкновение работать с tfs на двух машинах, и это действительно проблема с синхронизацией исходного кода. Для этого вам могут понадобиться два пользователя tfs ...
kroiz

11
Тьфу! Это боль. Visual Studio может легко запутаться, и иногда это проще всего исправить в файловой системе. Другие системы контроля версий, такие как Subversion, имеют ловушки для оконного проводника, и интеграция с VS, и лучшая работа по мониторингу изменений. Я скучаю по SVN!
Дэн Чарпстер

3
Я согласен с автором. Я прочитал «Получить последнюю версию» как «Получить последнюю версию с сервера» (откуда еще я могу получить ее?). В VS2010 я сделал Get Latest Version и сказал, что у меня последняя версия, но если я сделаю сравнение, в нем перечислены различия между локальной и последней версией сервера. Я согласен с тем, что не перезаписываю локальную работу, но она должна, по крайней мере, сравнивать временные метки и не вводить меня в заблуждение «У вас последняя версия» Когда я удалил локальную версию, Get Latest Version работал как положено.
Суонни

42

Иногда Get specific version даже установка обоих флажков не даст вам последний файл. Вы, вероятно, внесли изменения в файл и хотите отменить эти изменения, повторно получив последнюю версию. Ну ... вот для чего, Undo pending changesа не для цели Get specific version.

Если сомневаешься:

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

И это мой любимый, который я только что обнаружил:

  • следите в Outputокне за сообщениями, такими как это:

    Предупреждение. Невозможно обновить R: \ TFS-PROJECTS \ www.example.com \ ExampleMVC \ Example MVC \ Example MVC.csproj, так как у вас есть ожидающее редактирование.

Это критическое сообщение появляется в окне вывода. Других уведомлений нет! Ничего в ожидающих изменениях и никакое другое диалоговое сообщение, сообщающее, что файл, который вы только что явно запросили, не был получен! И да - вы решаете это, просто запустив Undo pending changesи получив файл.


Спасибо, ваш ответ ( Undo pending changes) работал на меня.
RAM

Просто не забудьте отменить только те изменения в файле, который вы действительно хотите заменить, а не все, над чем вы работаете
Simon_Weaver

@Simon_Weaver Спасибо, что это решило мою проблему, есть смысл, почему это все еще очень раздражает.
нультрон

12

TFS, как и некоторые другие поставщики системы управления версиями, такие как Perforce, делают это, поскольку система знает, какая последняя версия была у вас успешно получена, поэтому последние изменения превращаются в «получить изменения после x». Если вы играете по его правилам и действительно проверяете вещи перед их редактированием, вы не путаете вопросы, а «get last» действительно делает то, что говорит.

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


11

Трудно ответить на утверждение без примеров того, как оно не работает, но важно понимать, что TFVC (в режиме «Рабочая область сервера», который был механизмом до TFS 2012) не проверяет состояние вашей локальной файловой системы . TFVC Server Workspaces - это система типа «checkout-edit-checkin», в которой это задуманно, намеренное решение, принятое для значительного уменьшения количества файловых операций ввода-вывода, необходимых для определения состояния вашего рабочего пространства. Вместо этого информация о рабочей области сохраняется на сервере.

Это позволяет TFVC Server Workspaces очень эффективно масштабироваться до очень больших кодовых баз. Если вы используете кодовую базу в несколько гигабайт (например, Visual Studio или дерево исходных кодов Windows), тогда вашему клиенту не нужно сканировать вашу локальную файловую систему, чтобы найти файлы, которые могли измениться, потому что у вас есть контракт с TFS. будет явно проверять файл, когда вы хотите его редактировать.

Предполагается, что вы не помечаете файл как доступный только для записи и изменяете его без предварительной явной проверки. Если вы пойдете по этому пути, то сервер не будет знать, что вы внесли изменения в ваш файл, и выполнение операции «Получить последнюю версию» не обновит локальное рабочее пространство, поскольку вы не сообщили серверу, что сделали меняется.

Если вы делаете подрывать этот механизм , то вы можете использовать tfpt reconcileкоманду , чтобы изучить локальное рабочее пространство для изменений , которые вы сделали на месте.

Если вы обнаружите, что используете «Get Specific Version» и выбираете опции «force» и «overwrite», то вполне вероятно, что вы привыкли обходить все принудительные меры, которые TFS реализовал, чтобы не причинить вам вреда, и вы должны, вероятно, рассмотреть локальные рабочие области TFVC.

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

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

Локальные рабочие пространства TFVC по умолчанию используются в TFS 2012, и если они не включены для вас, вам следует обратиться к администратору сервера. (Организации с очень большими кодовыми базами или строгими требованиями аудита могут отключить локальные рабочие области TFVC.)

В превосходной книге Эрика Синка « Управление версиями на примере» описаны различия между системами checkout-edit-checkin и edit-merge-commit и тем, когда одна из них более подходящая, чем другая.

Книга Professional Team Foundation Server 2013 также содержит отличную информацию о различиях между рабочими пространствами TFVC Server и локальными рабочими пространствами TFVC. Документация MSDN и блоги также предоставляют подробную информацию:


Отличный, информативный ответ, но я не уверен, что «пометка файла как только для записи» отвечает ОП. Я знаю, что использую Visual Studio (сейчас 2013), чтобы внести все свои изменения в файлы * .cs в проекте MVC .NET, и когда я запускаю свой ноутбук, «Получить последнюю версию» часто заставляет меня зависнуть до такой степени, что я Я почти груз культивирую "Advanced >>> Get Specific >>> Latest >>> Overwrite" сейчас. Там нет вне-VS редактирования или регистрации. VS находит файлы, которые я отредактировал, и правильно помещает их в ожидающие изменения. Я проверяю их с VS. Я не вижу ничего, что могло бы "навредить себе", но получить последнюю версию не работает надежно. ??
Ерф

@ruffin Вы говорите, что последние повешения ? Это был не тот вопрос, который я истолковал. Это когда-нибудь закончится? Другие операции медленные или просто Get? Get w / Overwrite когда-либо медленный или просто обычный Get Latest?
Эдвард Томсон

Нет, не висит. Я могу получить последнюю версию, и она работает (и работает достаточно быстро), но файлы не меняются. Если я это сделаю Получить конкретный >>> Последние >>> Перезаписать, как и предложения @NotMe , файлы "догоняют". Вероятно, красная сельдь: также иногда случается с Shelfsets. Да, мои рабочие пути верны, или Get Specific не сработает, я не верю.
Ерф

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

6

Team Foundation Server (TFS) отслеживает свою локальную копию в скрытом каталоге с именем $ TF. Когда вы запускаете «Получить последнюю версию», TFS просматривает эту папку и видит, у меня последняя копия или нет. Если это произойдет, он не будет загружать последнюю копию. Неважно, если у вас есть оригинальный файл или нет. На самом деле вы могли удалить всю папку (как в моем случае), и TFS не будет извлекать последнюю копию, потому что она не просматривает фактический файл, а скрытый каталог, в котором записываются изменения. Недостаток этого дизайна в том, что все, что сделано вне системы, не будет записано в TFS. Например, вы можете зайти в проводник Windows, удалить папку или файл, и TFS не распознает его. Это будет полностью слепым. По крайней мере, я ожидаю, что Windows не позволит вам удалить этот файл, но это так!

Один из способов принудительного использования последней копии - удалить скрытую папку $ TF вручную. Для этого перейдите в командную строку и перейдите в корневую папку, в которую был извлечен проект, и введите эту команду

rd/s $tf                    // remove $TF folder and everything inside it

Если вы хотите просто проверить скрытую папку, вы можете сделать это с помощью

dir /ah                    // display hidden files and folders

Примечание: если вы это сделаете, tf будет думать, что у вас нет локальной копии, даже если она есть в файлах, и он снова синхронизирует все.

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


Это работало для меня, когда больше ничего не делал. Я попытался получить конкретную версию и установил оба флажка для принудительной загрузки, но это не получит файлы. Я думаю, что-то было повреждено. Но это решение сработало.
Франсиско д'Анкония

3

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


3

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

Я могу сделать Get Latest, я могу видеть в списке истории проекта, что были коммиты после того, как я последний раз делал Get Latest, я не касался файлов на диске каким-либо образом, но после того, как функция «Get Latest» имеет завершено, когда я проверяю вкладку TFS, некоторые файлы все еще говорят, что они не самая последняя версия.

Очевидно, что TFS может определить, что у меня есть старые файлы локально, так как в списке сказано так. Тем не менее, Get Latest не удается это сделать, получить последнюю версию. Если я сделаю то, что вы сделали, используйте версию Get Specific и отметьте два флажка внизу диалогового окна, тогда файлы будут восстановлены.

Мы изменили наши серверы сборки, чтобы вместо них всегда использовать функцию типа Get Specific version, поэтому эта часть теперь работает, но так как наш сервер сборки (TeamCity) также полагается на проверку наличия изменений в файлах, чтобы начать сборку иногда он переходит в режим «ничего не изменилось, здесь ничего не видно, двигайтесь дальше» и ничего не предпринимает, пока мы принудительно не запустим конфигурацию сборки.

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

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

Кроме того, я не вижу, как TFS может «знать», изменились ли файлы на диске или нет, фактически не просматривая содержимое. Если одна часть TFS может видеть, что файлы действительно не являются последней версией, тогда версия Get Latest должна абсолютно точно иметь самую последнюю версию. Это в связи с комментариями к другим ответам здесь.


TFS зависит от номера версии файла, чтобы узнать, есть ли у вас «последняя» версия или нет. Этот номер полностью сохраняется в TFS и обновляется только тогда, когда кто-то выполняет регистрацию. Поэтому, когда вы «Получить последнюю версию», TFS проверяет свою базу данных, чтобы увидеть, какая последняя версия была отправлена ​​вам. Если это число равно текущей версии, то оно считает, что у вас последняя версия; независимо от того, что на самом деле находится в вашей локальной файловой системе. Идея заключалась в том, чтобы ограничить сетевой трафик. К сожалению, эта модель работает только в том случае, если все изменения происходят в приложении, которое знает TFS.
NotMe

Кроме того, я согласен, что есть хотя бы одна ошибка с версией 2005/08. Я видел точные проблемы, которые вы описали на нескольких машинах; именно это заставляет меня использовать версию Get Specific неукоснительно.
NotMe

В некоторых случаях редактирование происходило полностью в Visual Studio на одном компьютере, на другом компьютере, единственная цель которого - получить последнюю версию + build, никаких локальных изменений не производится, никогда. И все же ему удается облажаться. Я не впечатлен TFS Source Control по меньшей мере. Надеюсь, в 2010 году будет меньше таких проблем.
Лассе В. Карлсен

3

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

попробуйте переименовать свою машину и создать новую рабочую область как новую машину.


2

У меня была та же проблема с Visual Studio 2012. Независимо от того, что я сделал, он не получил код из системы контроля версий TFS.

В моем случае причиной было сопоставление папки + подпапки из источника управления отдельно, но с тем же деревом в моем локальном HD.

Решением было удаление сопоставления подпапок с помощью окна «Управление рабочими пространствами».


1

Большинство проблем, с которыми я столкнулся, когда разработчики жалуются на то, что Get Latest не выполняет то, что ожидали, связаны с тем, что они выполняют Get Latest не из Source Control Explorer, а из Solution Explorer. Обозреватель решений получает только те файлы, которые являются частью решения, и игнорирует все, что может потребоваться файлам в решении и, следовательно, является частью системы контроля версий, в то время как Обозреватель контроля версий сравнивает ваше локальное рабочее пространство с хранилищем на сервере, чтобы определить, какие файлы нужны.


Я попробовал это из Team Explorer, все тот же результат. В моем случае я удалил папку и хотел снова получить последнюю копию, но не повезло.
Хаммад Хан

1
Я не согласен с этим ответом. Если у вас есть общие проекты, используемые разными решениями, вы должны сделать это в Solution Explorer, в противном случае он просто выполнит Get по этому конкретному пути TFS
Riegardt Steyn

Зачем добавлять опцию из Solution Explorer, если вы не должны ее использовать? Когда я нажал «Показать все файлы», файл был там, но не был включен в мой проект. Странно, так как я даже не был тем, кто добавил это.
mokumaxCraig

1

Когда я сталкиваюсь с этой проблемой, не получая последнюю версию и несовпадение версий, я сначала делаю «Получить определенную версию», устанавливаю ее на changeset и вставляю 1. Это затем удалит все файлы из вашей локальной рабочей области (для этого проекта, папки, файл, и т.д.), и он также будет иметь обновление TFS, чтобы он знал, что теперь у вас нет загрузки версии. Затем вы можете сделать «Получить последние» и альт, у вас будет на самом деле последний


1

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


1

Это сработало для меня:
1. Выйдите из Visual Studio
2. Откройте командное окно и перейдите к папке: «% localappdata% \ Local \ Microsoft \ Team Foundation \»
3. Перейдите к подпапкам для каждой версии и удалите подпапку «кеш» и его содержимое
4. Перезапустите Visual Studio и подключитесь к TFS.
5. Протестируйте Получить последнюю версию.


0

просто хочу добавить TFS MSBuild не поддерживает специальные символы на папках то есть "@"

В прошлом я сталкивался с тем, что одна из папок нашего проекта называлась External @ Project1.

мы создали определение сборки TFS для запуска пользовательского файла msbuild, тогда папка рабочей области не получает никакого содержимого из папки External @ Project1 во время получения рабочей области последней версии. Кажется, что tfs get терпит неудачу, но не показывает никакой ошибки.

после проб и ошибок и переименования папки в _Project1. Вуаля, мы получили файлы в папке (_Project1).


TFS или нет, вы никогда не должны использовать специальные символы в именах папок проекта!
Ригардт Стейн

@ не особенный. И ни%, и т. Д., И т. Д. Это просто лень со стороны Microsoft, которая заставляет такие символы трактоваться иначе, чем «нормальные» символы.
Кевин Уайтфут

0

Инструмент: Электроинструменты TFS

Источник: http://dennymichael.net/2013/03/19/tfs-scorch/

Команда: tfpt scorch / recursive / удаляет C: \ LocationOfWorkspaceOrFolder

Откроется диалоговое окно, в котором вас попросят удалить или загрузить список файлов. Выберите или отмените выбор файлов соответственно и нажмите ок. Внешний вид в сетке (CheckBox, FileName, FileAction, FilePath)

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

Надеюсь, кто-то найдет это полезным. Я нашел этот пост после удаления нескольких папок в разных местах. Не помню, какие папки я удалил, исключил обычную опцию Force Get / Replace, которую я бы использовал.


0

В моем случае, получить конкретную версию, даже не установив флажки и отменить все ожидающие изменения.

Проверил рабочие места. Изменить текущее рабочее пространство. Проверьте все пути. Путь решения был неверным и указывал на удаленную папку.

Исправил путь и получить последний работал нормально.


0

Нажмите правой кнопкой мыши: « Дополнительно»> «Получить конкретную версию» . Выберите «Последняя версия» и теперь, что важно, отметьте две проверки: введите описание изображения здесь

Проверки:
перезаписать записываемые файлы, которые не проверены

Перезаписать все файлы, даже если локальная версия соответствует указанной версии


Пожалуйста, опишите пункты, которые необходимо проверить, а не размещать скриншот.
Чак Адамс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.