Как я могу исключить определенный файл из системы управления версиями TFS

89

У нас есть несколько файлов конфигурации (app.DEV.config, app.TEST.config и т. Д.) И событие перед сборкой, которое копирует правильный файл конфигурации в app.config. Очевидно, что конкретные файлы конфигурации находятся в системе управления версиями, но на данный момент это App.Config, а этого быть не должно.

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

Я использую VS 2005 и 2005 Team Explorer.

Ральф Шиллингтон
источник

Ответы:

39

В MS Power Tools существует политика регистрации (политика запрещенных шаблонов), которая позволяет сравнивать имена файлов с регулярным выражением. См .: Инструменты Microsoft Team Foundation Server Power Tools

Хотя политики регистрации не являются полностью надежными, они ближе всего к TFS для обеспечения соблюдения определенных пользователем правил, подобных тем, что вы ищете.

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

Джейсон Уильямс
источник
1
К сожалению, описываемая вами функция исключения для всего командного проекта не существует в TFS. (если это не более поздняя сборка 2010 года, чем моя) Диалоговое окно «Типы файлов системы управления версиями» контролирует, какие типы файлов нельзя объединять, то есть заблокированы исключительно.
Ричард Берг
У меня VSTS2005 / 2008 на работе, но я пишу это дома, поэтому мой ответ был из моей довольно плохой памяти - извините! Только что понял, что вам нужна политика проверки «запрещенных шаблонов» TFS Power Tools. Это позволяет сопоставлять имена файлов с помощью регулярного выражения и блокировать проверку нежелательных имен файлов: msdn.microsoft.com/en-us/teamsystem/bb980963.aspx#checkin
Джейсон Уильямс,
Хороший звонок, я забыл об этой политике. Я отредактирую ваш пост, чтобы он стал заметнее.
Ричард Берг,
Как одну ветку раскрыть ??? Я спрятал ветку по ошибке, и я не могу ее раскрыть VS2012
rolivares
95

В TFS2012 это просто, создать файл .tfignore

http://msdn.microsoft.com/en-us/library/tfs/ms245454%28v=vs.110%29.aspx#tfignore

######################################
# Ignore .cpp files in the ProjA sub-folder and all its subfolders
ProjA\*.cpp
# 
# Ignore .txt files in this folder 
\*.txt
#
# Ignore .xml files in this folder and all its sub-folders
*.xml
#
# Ignore all files in the Temp sub-folder
\Temp
#
# Do not ignore .dll files in this folder nor in any of its sub-folders
!*.dll

# EDIT https://msdn.microsoft.com/en-us/library/ms245454(v=vs.110).aspx#tfignore
# A filespec is recursive unless prefixed by the \ character.
artfulhacker
источник
как бы вы сделали рекурсивную папку с игнорированием пакетов, но включили бы packages / repositories.config?
Maslow
@Maslow, если он у вас есть, не стесняйтесь редактировать мой ответ. кажется довольно распространенной настройкой, и мы должны использовать ее в примере
artfulhacker
файл .tfignore в корне коллекции проектов автоматически применяется вниз по иерархии, даже если у них нет сопоставленной / загруженной папки?
Maslow
2
Это поддерживается только с локальными рабочими пространствами. msdn.microsoft.com/library/vstudio/…
Sumo
45

Выберите файл App.config в обозревателе решений и выберите «Файл» -> «Контроль версий» -> «Исключить App.config из системы контроля версий».

PjL
источник
1
именно то, что мне нужно, чтобы не хранить мои уменьшенные файлы.
Valamas
13
Меня беспокоит, что этой опции нет в обычном контекстном меню
Эрик Херлитц,
6
У меня нет такой возможности. : '- (
Ян Агард
2
Его также нет в Visual Studio 2013 Ultimate :(
Ytrog
4
Он присутствует (в меню «Файл»> «Управление версиями»> «Дополнительно»> «Исключить App.config из системы управления версиями») в моей Visual Studio Premium 2013 (версия 12.0.3023.00, обновление 3).
Martin Bäckström
22

Есть вариант, который сложно найти:

1. Выберите файл или несколько файлов в обозревателе решений.

2. Перейдите в Файл -> Управление версиями -> Дополнительно.

Путь к исключению

и вот это

Вот исключение

Имейте в виду: если вы щелкните правой кнопкой мыши файл в обозревателе решений, вы обнаружите только «самые важные параметры», а не все :)

Феликс Кейл
источник
13

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

Имейте в виду, что любой другой человек теперь увидит отсутствующий файл в проекте, когда получит последнюю версию.

Сет
источник
7

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

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

joshua.ewer
источник
если бы только был способ скрыть папку для всех рабочих пространств ... не вижу эквивалентных настроек безопасности.
felickz
Вы не можете замаскировать на уровне файлов; только папка.
dudeNumber4
@ dudeNumber4 Я считаю, что эта функция была отключена в более поздних версиях TFS, задолго до того, как был написан первоначальный ответ. Вы можете попробовать этот хак: social.msdn.microsoft.com/Forums/vstudio/en-US/…
joshua.ewer
5

Это сработало для меня:

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

Источник: = "> Как мне исключить определенные файлы из системы контроля версий TFS

Huilaaja
источник
2

Visual Studio 2013 (и 2012)

Эта функция доступна, если выбрать файл (ы) и перейти к:

File > Source Control > Advanced > Exclude ... from Source Control
Эван Мулавски
источник
В 2012 году исключений нет.
ExpatEgghead
Я не вижу этого и в 2013 году
VictorySaber
2

Этот вопрос был задан некоторое время назад, но он относится к той же проблеме, что и я.

Проблема:

  • Мы хотим проверить наш код.
  • Затем мы хотим построить наш проект.
    • Во время нашей сборки мы зависим от Build Events для перемещения файлов, чтобы у нас были необходимые файлы для завершения процесса сборки.
  • Когда наше событие сборки пытается скопировать файлы, мы получаем ошибку «Доступ запрещен».

Причина:

  • Подключаемый модуль Team Foundation Server Visual Studio изменяет атрибут «Только чтение» в наших файлах на ТОЛЬКО ДЛЯ ЧТЕНИЯ, когда мы возвращаем наши файлы.

Пример события сборки:

  • скопируйте "$ (TargetDir) SomeFile.ext" "$ (ProjectDir)"

Выше нам просто нужно переместить файл из нашего целевого пути сборки (папки bin \ debug или bin \ release) в нашу папку проекта. В моей ситуации это было сделано для того, чтобы я мог включить файлы, созданные для проекта, в свой установщик. Мой установщик не получал их как часть вывода проекта.

Исправление: (чуть не ударил себя по лицу, когда понял это)

Новое событие сборки:

  • attrib -R "$ (ProjectDir) SomeFile.ext"
  • скопируйте "$ (TargetDir) SomeFile.ext" "$ (ProjectDir)"
  • attrib + R "$ (ProjectDir) SomeFile.ext"

Мы все развлекаемся с Build Events, верно? Выше я просто делаю 2 вещи, я удаляю атрибут только для чтения, теперь файлы не только для чтения. Скопируйте мой файл, как я изначально хотел. Затем замените атрибут только для чтения (я полагаю, необязательно), чтобы Visual Studio и Team Foundations остались довольны.

И да ... Я все еще бью себя по этому поводу.

Роб К.
источник
0

У меня аналогичная проблема, мой App.config содержал разумные данные (например, имя пользователя), которые не должны синхронизироваться с TFS.

В статье Рекомендации по развертыванию паролей и других конфиденциальных данных в ASP.NET и Службе приложений Azure описывается хороший подход к предотвращению этой проблемы:

Используйте атрибут «file» элемента «appSettings» для ссылки на файл конфигурации, который не добавлен в систему управления версиями.

thuld
источник
0

Если у вас более старая версия, чем TFS2012, и поэтому вы не можете создать .tfignoreфайл или использовать эту File > Source Control > Advanced > Exclude …опцию, вы можете попробовать следующее:

  • Сделайте копию целевого файла в проводнике Windows.
  • Отменить ожидающие изменения (если есть) в целевом файле в Team Explorer / Visual Studio.
  • Удалите целевой файл в проводнике Windows.
  • Переместите копию целевого файла в местоположение удаленного целевого файла и переименуйте его, чтобы он имел то же имя, что и удаленный целевой файл.

Теперь кажется, что TFS игнорирует изменения в целевом файле. Если вам нужно отредактировать файл снова, не используйте Visual Studio, так как TFS затем вернет файл в список файлов с ожидающими изменениями.

Защитник один
источник
0

Вы можете просто выбрать файл в проводнике управления исходным кодом и щелкнуть по нему правой кнопкой мыши, выбрать оттуда опцию «Переименовать» и добавить «.exclude» в конце имени файла.

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

imsummysingh
источник