Получить TFS, чтобы игнорировать папку моих пакетов

Я пытаюсь заставить TFS (2013) игнорировать мою папку packages. Я страстно не хочу, чтобы этот источник контролировался, поскольку я использую NuGet, и это здорово!

Я пробовал клоакинг (кажется, не работает), я пробовал добавлять файлы .tfignore - ничто не игнорируется. Почему команда TFS просто не добавляет возможность постоянно игнорировать папку или файл, как это делают многие клиенты Subversion?!

Ответ 1

Здесь сделка: мы должны сказать, что NuGet и TFS игнорируют пакеты, потому что NuGet пытается использовать связанные с источником элементы, которые он абсолютно не должен делать (плохая форма, Microsoft!). Поэтому вам нужно сделать две вещи.

Сначала добавьте файл с именем .tfignore в папку решения (обратите внимание на отсутствие s после tf). Он должен быть следующим:

\packages

Это указывает TFS игнорировать папку с вашими пакетами. Теперь вы могли бы подумать, что это также игнорирует файл repositories.config. Но это не так. Зачем? Кто знает, способы Microsoft странные и таинственные. На самом деле, я думаю, что это часть материала NuGet, о котором я расскажу ниже, но если это когда-нибудь будет исправлено в будущем, и вы хотите сохранить файл repositories.config вместо того, чтобы позволить VS регенерировать его, вы должны иметь возможность использовать это:

\packages
!\packages\repositories.config

Итак, теперь благодаря нашему файлу .tfignore TFS игнорирует ваши пакеты. Все в порядке, не так ли? WRONG, потому что NuGet работает с вашим исходным кодом и добавляет пакеты к вашим ожидающим изменениям. Итак, теперь пусть NuGet сообщит об этом.

Создайте папку с именем .nuget в корне вашей папки решений. 1 Теперь создайте файл с именем NuGet.config и поместите его в эту новую папку 2. Он должен выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

И теперь ваши пакеты должны оставаться вне контроля источника. Не забудьте добавить файлы NuGet.config и .tfignore в исходный элемент управления, чтобы они никогда не терялись.

РЕДАКТИРОВАТЬ: Если у вас возникли проблемы, вы можете удалить папку с пакетами, проверить это изменение и затем выполнить описанные выше шаги.

ТАКЖЕ ИЗМЕНИТЬ: Похоже, что этого не произойдет с более новыми версиями Nuget. Так что, возможно, если вы переключитесь на VS/TFS 2017, эта проблема прояснится, не пройдя через вышеописанные обручи.

<суб > 1. Добавьте папку с помощью Source Control Explorer; щелкните правой кнопкой мыши решение- > Добавить папку → . nuget
<Суб > 2. Когда я понял это, используя VS 2013, я обнаружил, что NuGet.config должен был войти в папку .nuget. Даже если у вас уже есть файл NuGet.config в корневой папке вашего решения (потому что, скажем, у вашей компании есть внутренний фид нуджетов). Однако некоторые из комментариев указали, что он отлично работает в корне решения в VS 2015. Лично я переключился на использование TFS в режиме git, поэтому я не могу проверить. Кроме того, если у вас есть настраиваемый канал, убедитесь, что у вас есть как пользовательский канал, так и nuget.org как ключи в файле Nuget.config, или иногда TFS будет произвольно решать, что он не может восстановить пакеты.

Ответ 2

Альтернативное решение вышеизложенного следующее.

  • Добавить папку пакетов в TFS (без каких-либо файлов или подпапок)
  • Щелкните правой кнопкой мыши папку пакетов
  • Щелкните левой кнопкой мыши Advanced
  • Нажмите "Плащ"

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

Вы можете больше узнать об этом подходе в статье блога Предотвратить добавление установленных пакетов NuGet в исходный код.

Ответ 3

для людей, сообщающих, что параметр .tfignore не работал с настройкой nuget.config, это может представлять интерес - эти шаги, наконец, сработали для меня:

  • Удалить все в папке с папками
  • Убедитесь, что TFS не имеет каких-либо изменений в этой папке в ожидании
  • Закрыть VS
  • Повторно открыть VS и перезагрузить решение - с помощью восстановления Nuget для повторного заполнения пакетов Примечание. Изменения в источнике источника TFS не принимаются.

Ответ 4

Для работы нужно использовать локальные рабочие области для .tfignore. Файл .tfignore должен находиться в папке, содержащей файлы или папки, которые вы хотите игнорировать.

Итак, если структура вашего решения выглядит так:

\Project
   \Packages
   \OtherStuff
   foo.cs

Вы поместите свой файл .tfignore в \Project:

\Project
   \Packages
   \OtherStuff
   foo.cs
   .tfignore

Содержимое .tfignore в вашем случае будет:

\packages

Вот вам документация: http://msdn.microsoft.com/library/vstudio/ms245454 (v = vs .110).aspx # tfignore

Ответ 5

Добавьте файл nuget.config в папку .nuget в вашем решении. Добавьте в файл nuget.config следующее:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
</configuration>

DisableSourceControlIntegration - вот что делает трюк для TFS Version Control.

Ответ 6

Вы можете навсегда установить этот раз в своем AppData\Roaming для всех решений (старых и новых)!

В вашем %AppData%\NuGet\NuGet.Config файле добавьте следующее перед тегом </configuration> XML...

<config>
  <add key="repositoryPath" value="C:\NuGetPackages" />
</config>
<solution>
  <add key="disableSourceControlIntegration" value="true" />
</solution>

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

Теперь вам больше не придется беспокоиться об этом. Папка вашего решения больше не будет содержать пакетов; все решения будут по умолчанию использовать ваше собственное расположение пакетов.

ПРИМЕЧАНИЕ. - Это работает для каждого пользователя.

Ответ 7

Установите решение для восстановления при сборке, будет проверяться папка пакета и файл пакетов, но пакеты не будут.

Ответ 8

Если вы используете Git с TFS, вам нужно добавить файл ".gitignore". Вы можете сделать это в "командном проекте | Настройки |" добавить файл игнорирования ". Затем откройте файл и раскомментируйте встроенный оператор ignore для пакетов Nuget.

Если вы используете TFVC и у вас настроены локальные рабочие области, вы можете использовать файл .tfignore, который соответствует идентичному формату файлу Git. Я думаю, вам нужно "packages/".

Ответ 9

Это не работало для меня совершенно на визуальной студии онлайн и VS2013.

  • Решение правой кнопкой мыши > Включить восстановление пакета NuGet. Это добавит файл Nuget.config в решение

enter image description here

  • Добавьте .tfignore. Обычно я делаю это, добавляя текстовый файл в корень решения, позволяя ему обнаружить это, а затем исключить, щелкнув "обнаруженный add" > щелкнуть правой кнопкой мыши.

enter image description here

  • Добавьте пакеты в .tfignore и скажите ему, чтобы он включал repositories.config

enter image description here

Из других комментариев кажется, что ваше перемещение может измениться в этот момент. Это то, что я делаю:

  • Проверьте все, включая любые пакеты.

  • Удалите все пакеты в вашем решении, а затем проверьте это изменение (это приведет к удалению пакетов из TFS)

  • Откройте решение и выполните сборку, которая добавит пакеты в проект, но TFS не подберет их.

Ответ 10

Решение, которое сработало для меня, заключалось в создании как .tfignore , так и следующей настройки в Nuget.Config:

<configuration>
  ...
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>  
  ...
</configuration>

My.tfignore содержит следующую строку:

\packages

[Я использую обновление Visual Studio 2015 2]

Это не идеально и в настоящее время регистрируется как открытая проблема в github/nuget:

Упростить опускание пакетов из TFVС# 493

Ответ 11

Terje answer не работает все время для меня, иногда он будет работать некоторое время, но тогда он будет откладывать нагрузку "добавляет" для меня сначала.

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

Например:

Type      Server                Local
============================================
Active    $/Work/Main           C:\Code\Main
Cloaked   $/Work/Main/Packages

Ответ 12

У меня была такая же проблема. /packages должен работать, но не для меня. packages*.* действительно работал.