Как игнорировать файлы / каталоги в TFS, чтобы они не попадали в центральный репозиторий?

254

Можно ли настроить файлы / папки, которые будут игнорироваться для каждого проекта в системе контроля версий TFS?

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

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

Я хочу предотвратить это.

Дейв
источник
1
Для локальных рабочих пространств вы можете использовать .tfignore -Files, как указывает Ричард Бэнкс. Чтобы настроить этот файл с помощью Context-Menue в team-Explorerer, см. Мой ответ. Для Server-Workspaces я предоставил ссылку в комментариях.
gReX

Ответы:

88

Для VS2015 и VS2017

Работает с TFS (локально) или VSO (Visual Studio Online - предложение, размещенное на Azure)

Документация NuGet содержит инструкции о том, как этого добиться, и я только что успешно следовал им в Visual Studio 2015 и Visual Studio 2017 против VSTS (TFS, размещенной в Azure). Все полностью обновлено по состоянию на ноябрь 2016 г. Август 2018 г.

Я рекомендую вам следовать инструкциям NuGet, но просто чтобы напомнить, что я сделал:

  1. Убедитесь, что ваша packagesпапка не привязана к TFS. Если это так, вытащи это оттуда.
  2. Все остальное, что мы создаем ниже, попадает в ту же папку, в которой находится ваш .slnфайл, если не указано иное (инструкции NuGet не совсем ясны по этому поводу).
  3. Создать .nugetпапку. Вы можете использовать Windows Explorer, чтобы присвоить ему имя, .nuget.чтобы он успешно сохранялся как .nuget(он автоматически удаляет последний период), но прямая попытка присвоить ему имя .nugetможет не сработать (вы можете получить сообщение об ошибке или изменить имя в зависимости от вашей версии Windows. ). Или назовите каталог nuget и откройте родительский каталог в командной строке. тип. ren nuget .nuget
  4. Внутри этой папки создайте NuGet.configфайл, добавьте следующее содержимое и сохраните его:

NuGet.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <solution>
        <add key="disableSourceControlIntegration" value="true" />
    </solution>
</configuration>
  1. Вернитесь в свою .slnпапку и создайте новый текстовый файл и назовите его .tfignore(если вы используете Windows Explorer, используйте тот же прием, что и выше, и назовите его .tfignore.)
  2. Поместите в этот файл следующее содержимое:

.tfignore:

# Ignore the NuGet packages folder in the root of the repository.
# If needed, prefix 'packages' with additional folder names if it's 
# not in the same folder as .tfignore.
packages

# include package target files which may be required for msbuild,
# again prefixing the folder name as needed.
!packages/*.targets
  1. Сохраните все это, зафиксируйте его в TFS, затем закройте и снова откройте Visual Studio, и Team Explorer больше не должен определять папку пакетов как ожидающую регистрацию.
  2. Скопируйте / вставьте через Windows Explorer .tfignoreфайл и .nugetпапку во все мои различные решения и зафиксируйте их, и у меня больше нет packagesпапки, пытающейся проникнуть в мое хранилище с контролем исходного кода!

Дальнейшая настройка

Хотя это не мое, я нашел этот .tfignoreшаблон Sirkirby, чтобы быть полезным. Пример в моем ответе охватывает packagesпапку Nuget, но этот шаблон включает в себя некоторые другие вещи, а также предоставляет дополнительные примеры, которые могут быть полезны, если вы хотите настроить это дальше.

Jaxidian
источник
1
Вслед за этим на VS 2017 - TFS 2015. Работал как шарм. Все мои пакеты Nuget больше не отображаются как ожидающие изменения.
Джеймс Уолш младший
Мне просто нужно было открыть обнаруженные изменения и вручную добавить вновь созданные файлы в ожидающие изменения. За исключением того, что все работало нормально.
Мачадо
Это не сработало для меня. VS 2017 - TFS 2015. Не могу ничего проверить. При попытке получить следующую ошибку: "D: \ Src \ MiniCoreWebAPI \ packages \ Microsoft.IdentityModel.Protocols.5.2.1 \ lib \ net451 \ Microsoft.IdentityModel.Protocols .dll: Не удалось найти часть пути "
Род
У меня не было зарегистрированной папки с пакетами, но она уже была обнаружена как ожидающее изменение. После применения этих инструкций мне пришлось «Отменить ожидающие изменения» в папке пакетов, затем все было хорошо, когда я перестроил и NuGet восстановил пакеты.
CodeHxr
172

Если вы используете локальные рабочие пространства (TFS 2012+), теперь вы можете использовать этот .tfignoreфайл, чтобы исключить проверку локальных папок и файлов.

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

Полная информация о MSDN - http://msdn.microsoft.com/en-us/library/ms245454.aspx#tfignore

Для ленивых:

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

Следующие правила применяются к файлу .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
Ричард Бэнкс
источник
35
Я пытался сделать это. игнорируется только содержимое файла .tfignore :(
user1852503
15
@SerjSagan мой компьютер не позволил мне создать, .tfignoreпоэтому я создал .tfignore.и сам удалил последнюю точку ..
Питер
5
Проблема в том, что он игнорирует только ресурсы, которые были 1) явно удалены в окне Source Control Explorer перед регистрацией и 2) явно исключены в окне Pending Changes . Например, если вы собираетесь использовать ее, чтобы игнорировать папку пакетов и полагаться на восстановление пакетов NuGet, вам необходимо: 1) удалить папку пакетов в проводнике управления источниками, а затем 2) исключить ее в окне «Ожидающие изменения» после процесса восстановления пакета NuGet. , В противном случае он все равно будет регистрироваться в папке пакетов .
Дейлан
1
Если Windows не позволяет вам создать .tfignoreфайл из-за отсутствия правильного имени, вы можете создать его или переименовать через окно командной строки.
Зарепет
1
В VS2015 есть серьезная проблема с .tfignore. Люди очень недовольны , но, похоже, нет четкого изложения проблемы или четкой приверженности ее решению.
bbsimonbb
71

Это действительно кажется , немного громоздким , чтобы игнорировать файлы (и папки) в Team Foundation Server. Я нашел несколько способов сделать это (используя TFS / Team Explorer / Visual Studio 2008). Эти методы также работают с типом проекта ASP веб-сайта.

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

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

Вы даже можете добавить политику регистрации запрещенных шаблонов (в разделе «Команда» -> «Параметры командного проекта» -> «Управление исходным кодом» -> «Политика регистрации»), чтобы запретить другим членам команды ошибочно проверять определенные активы.

Дерек Моррисон
источник
7
У меня не было политики запрещенных шаблонов. Ответ на связанный вопрос показывает, где его получить. Это, очевидно, является частью TFS Power Tools .
Лейф Карлсен
1
Я сталкиваюсь с подобной проблемой, можете ли вы предоставить более подробную информацию о конкретной папке, чтобы ее не регистрировать с помощью Политики регистрации
Имран Ризви,
Ой, ты прав, Лейф. Это часть TFS Power Tools.
Дерек Моррисон
Имран, к сожалению, я сменил работу и больше не использую TFS и не имею доступа к моим прошлым проектам, поэтому я не уверен в синтаксисе синтаксиса политики проверки запрещенных шаблонов. Может быть, этот вопрос помогает? stackoverflow.com/questions/2741412/…
Дерек Моррисон
TFS 2010 После выбора файлов для включения вы можете исключить из этого списка. Не могу коснуться существующих файлов ...
JNF
47

Для TFS 2013 :

Запустите в VisualStudio Team Explorer , в диалоге PendingChanges отмените Изменения с состоянием [add], которое следует игнорировать.

Visual Studio снова обнаружит Add (s). Нажмите «Обнаружено: x add (s)» - в исключенных изменениях

В открывшемся диалоговом окне «Содействие изменениям в кадидате» Вы можете легко исключить файлы и папки с помощью контекстного меню. Варианты:

  • Игнорировать этот пункт
  • Игнорировать по расширению
  • Игнорировать по имени файла
  • Игнорировать по папке (да, папка, TFS 2013, обновление 4 / Visual Studio 2013 Premium, обновление 4)

Не забудьте зарегистрировать измененный файл .tfignore.

Для VS 2015/2017 :

Та же процедура: во вкладке «Исключенные изменения» в TeamExplorer \ Pending Changes нажмите Обнаружено: xxx add (s)

Вкладка «Исключенные изменения» в TeamExplorer \ Ожидающие изменения

Откроется диалоговое окно «Содействие изменениям кандидата», и в записях можно щелкнуть правой кнопкой мыши контекстное меню. Опечатка теперь исправлена ​​:-)

Grex
источник
Кажется, не могу найти этот вариант. Я на VS 2015 RC.
Шимми Вейцхандлер
это будет работать только если вы работаете с локальным рабочим, как описаны подробно, здесь: msdn.microsoft.com/library/vstudio/...
stvn
@Shimmy: Процедура в VS 2015 RC такая же, с той же опечаткой. Смотрите мой обновленный ответ. Но, как указывает stvn, .tfignore работает только с локальными рабочими пространствами. Для рабочих областей сервера вы должны отменить параметр Включить в ожидающие проверки, см. Ответ здесь: stackoverflow.com/questions/21887308/…
gReX
@Shimmy: Вы подключены к TFS-Server 2015? Убедитесь, что вы начинаете с Team Explorer в VS
gReX
@ qw1564 Я уверен, что когда вопрос был задан первым, это было невозможно. Но теперь, это ответ, который я бы выбрал. Спасибо за кредиты!
gReX
5

Я нашел идеальный способ игнорировать файлы в TFS, как это делает SVN.
Прежде всего, выберите файл, который вы хотите игнорировать (например, Web.config).
Теперь перейдите на вкладку меню и выберите:

Элемент управления «Источник файла»> «Дополнительно»> «Исключить файл web.config из элемента управления источником»

... и бум; Ваш файл навсегда исключен из системы контроля версий.

Бхарат
источник
1
это работает для меня на TFS 2010 для файлов, сгенерированных кодом. СПАСИБО!
BozoJoe
1
Это на самом деле работает, .tfignore не работает для меня.
Огромное
2
У меня нет этой опции в VS 2018
Адам
4

Я собираюсь предположить, что вы используете проекты веб-сайта. Они автоматически сканируют каталог своего проекта и отправляют все в систему контроля версий. Там нет никакого способа, чтобы остановить их.

Однако не отчаивайтесь. Проекты веб-приложений не демонстрируют этого странного и довольно неожиданного (imho: дебильного) поведения. WAP является дополнением для VS2005 и поставляется с VS2008.

В качестве альтернативы изменению ваших проектов на WAP вы можете рассмотреть возможность перемещения папки «Активы» из системы управления исходным кодом в библиотеку документов TFS. Делайте это только в том случае, если сам проект не использует файлы ресурсов напрямую.

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