Файлы, перечисленные как ожидающие изменения при выполнении слияний, которые не изменились?

У нас это случалось больше, чем несколько раз, когда мы думали, что это было больше, чем случайность на данный момент. Когда мы объединяемся после того, как мы завершили работу с нашей веткой, изменений будет намного больше, чем должно быть. Таким образом, большинство файлов, отображаемых как ожидающие изменения, никогда не менялись (в большинстве случаев ни в ветви, ни в базе). Когда я сравниваю их (я использую вне всякого сравнения), нет никаких различий. Я не просмотрел все файлы, которые не изменились, но в большинстве случаев кажется, что они помечены как [merge] и файлы, которые фактически изменились, помечены как [merge,edit],

В одном случае мы, вероятно, изменили около 100 файлов, а ожидающие изменения показали более 22 000 изменений. Мы попытались проверить их в один момент, думая, что tfs будет достаточно умен, чтобы знать, какие файлы изменились, а какие нет. Но это проверено во всех файлах. Кто-нибудь знает, что происходит и как это исправить?

Мы работаем TFS 2012 с обновлением 1
Все используют Visual Studio 2012 с обновлением 1.

5 ответов

Решение

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

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

Из-за того, что TFS 201x работает за кулисами, изменение корневой папки ветви эффективно превращает ее в другой объект. Когда вы попытаетесь снова объединить ветку, TFS выполнит необоснованное объединение, что фактически означает, что кажется, что все файлы в ветке изменились (даже если они этого не сделали). Это новое поведение, более старые версии TFS (2005 / 2008)) не страдать от этой проблемы.

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

$/TeamProject/Main

Затем вы создаете ветку из "Main" под названием "Dev"

$/TeamProject/Dev

Вы можете объединить столько, сколько захотите, и не должно быть никаких проблем. Затем вы решаете, что структура папок может стать немного запутанной, когда у вас есть несколько ветвей разработчика, поэтому вы создаете папку с именем "Development" в корне командного проекта и перемещаете ветку dev в эту папку.

$/TeamProject/Development/Dev

Хорошо, теперь за кулисами ход переименовывает и удаляет, старая ветка dev все еще существует в $/TeamProject/Dev (Вы можете увидеть это, перейдя в "Инструменты", "Параметры", "Управление исходным кодом", "Team Foundation Server", а затем проверьте параметр "Показывать удаленные элементы в Source Control").

Папка называется $/TeamProject/Development/Dev это действительно новая вещь! Поэтому он не имеет отношения слияния с "Main". Забавно, хотя IDE покажет отношения, но на самом деле их не существует. При первом слиянии $/TeamProject/Development/Devв $/TeamProject/Main TFS выполнит подлое безосновательное слияние, чтобы установить отношения ветвления.

То же самое происходит, если вы переименуете ветку (старая ветка будет удалена, а под ветвями будет создана новая ветка)

Этот блог более подробно

Для тех, у кого есть такая же проблема, обойти это отменить ожидающие изменения. Когда вы получите диалог подтверждения, выберите "Нет всем". Только ваши ожидающие изменения должны быть оставлены.

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

Итак, мой метод: перед тем, как перейти к диалоговому окну подтверждения, вам предоставляется окно для выбора файлов, которые нужно отменить. Это окно имеет сортируемые столбцы. Вы можете отсортировать по Change столбец и выберите только файлы с merge статус (это неизмененные файлы; merge, edit редактируются файлы и merge, branch новые файлы). Просто нажмите Отменить изменения только с выбранными, а затем наслаждайтесь красотой незагроможденного набора изменений.

пример

Попробуй это:

  1. выбрать все ожидающие файлы
  2. в контекстном меню нажмите "Отменить..."
  3. в диалоговом окне "Отменить ожидающие изменения" сортируйте файлы по столбцу "Изменить"
  4. отмените выбор всех файлов, кроме "объединить", используя shift+click
  5. нажмите кнопку "Отменить изменения"

Из моего опыта это происходит, когда TFS не имеет отношения между файлом A в ветви A и файлом B в ветви B.

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

Я склонен отменять эти изменения "слияния", когда мне не нужны отношения (например, для воспитания детей).

Другие вопросы по тегам