Получить 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*.*
действительно работал.