Файлы, перечисленные как ожидающие изменения при выполнении слияний, которые не изменились?
У нас это случалось больше, чем несколько раз, когда мы думали, что это было больше, чем случайность на данный момент. Когда мы объединяемся после того, как мы завершили работу с нашей веткой, изменений будет намного больше, чем должно быть. Таким образом, большинство файлов, отображаемых как ожидающие изменения, никогда не менялись (в большинстве случаев ни в ветви, ни в базе). Когда я сравниваю их (я использую вне всякого сравнения), нет никаких различий. Я не просмотрел все файлы, которые не изменились, но в большинстве случаев кажется, что они помечены как [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
новые файлы). Просто нажмите Отменить изменения только с выбранными, а затем наслаждайтесь красотой незагроможденного набора изменений.
Попробуй это:
- выбрать все ожидающие файлы
- в контекстном меню нажмите "Отменить..."
- в диалоговом окне "Отменить ожидающие изменения" сортируйте файлы по столбцу "Изменить"
- отмените выбор всех файлов, кроме "объединить", используя shift+click
- нажмите кнопку "Отменить изменения"
Из моего опыта это происходит, когда TFS не имеет отношения между файлом A в ветви A и файлом B в ветви B.
При объединении ветвей TFS всегда создает отношения между файлами, когда они уже отсутствуют. Следовательно, он хочет зарегистрироваться как "объединить", чтобы запомнить эти отношения.
Я склонен отменять эти изменения "слияния", когда мне не нужны отношения (например, для воспитания детей).