Почему TFS не получает последние версии? - PullRequest
170 голосов
/ 29 июня 2010

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

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

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

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

Ответы [ 17 ]

116 голосов
/ 29 июня 2010

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

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

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

41 голосов
/ 16 декабря 2010

Иногда 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 и получив файл.

12 голосов
/ 29 июня 2010

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

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

11 голосов
/ 28 апреля 2015

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

Это позволяет рабочим областям TFVC-сервера масштабироваться до очень больших кодовых баз очень эффективно. Если вы используете кодовую базу в несколько гигабайт (например, 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-сервера и локальными рабочими пространствами TFVC. Документация MSDN и блоги также предоставляют подробную информацию:

6 голосов
/ 17 апреля 2013

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 голосов
/ 29 января 2015

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

3 голосов
/ 29 июня 2010

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

3 голосов
/ 21 ноября 2012

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

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

3 голосов
/ 29 июня 2010

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

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

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

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

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

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

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

2 голосов
/ 10 июля 2014

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

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

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

...