Подтвердить что ты не робот

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

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

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

Мы запускаем TFS 2012 w\Update1
Все используют Visual Studio 2012 w\Update 1.

4b9b3361

Ответ 1

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

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

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

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

$/TeamProject/Main

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

$/TeamProject/Dev

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

$/TeamProject/Development/Dev

ОК теперь за кулисами перемещение - это переименование и удаление, ветвь старого dev все еще существует в $/TeamProject/Dev (вы можете увидеть это, перейдя в "инструменты", "параметры", "управление источником", "команда Foundation Server", а затем проверьте настройку, в которой говорится: "Показать удаленные элементы в Source Control"

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

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

Этот блог содержит более подробную информацию

Ответ 2

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

Ответ 3

Попробуйте следующее:

  • выберите все незавершенные файлы
  • в контекстном меню нажмите "Отменить..."
  • в диалоговых файлах диалога "Отменить ожидающие изменения" с помощью столбца "Изменить"
  • отменить выбор всех файлов, кроме 'merge', используя shift + click
  • нажмите кнопку "Отменить изменения"

Ответ 4

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

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

Пример

Ответ 5

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

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

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