TFS 2008, удалите файл из системы управления версиями, но оставьте его в проекте
Автор вопроса: JoshОтветов: 3
Мы используем предложение Скотта Ханслемана для нескольких web.configs из его сообщения здесь. Проблема в том, что нам нужно проверить файл Web.Config. Если мы удалим его из проекта, то при публикации web.config не будет помещен. Поэтому нам нужно удалить привязки системы управления версиями только из файла web.config, но оставить ее в проекте, а остальная часть проекта по-прежнему находится в системе управления версиями.
Проблема в том, что система контроля версий делает файл только для чтения, пока вы его не проверите. Нам нужно иметь возможность перезаписывать его событиями предварительной сборки, желательно без необходимости проверять его. Есть ли способ удалить привязки только из этого файла и оставить его как часть проекта?
Добавив новый файл в обозреватель решений, вы получите маленький знак плюса, указывающий, что он должен быть добавлен в систему управления версиями. Затем щелкните правой кнопкой мыши и выберите "Отменить ожидающие изменения". Это отменит добавление, но оставит файл в вашем проекте.
Если это не сработает, я предлагаю один из следующих методов:
Используйте задачу Attrib из проекта MSBuild Community Tasks, чтобы удалить флаг только для чтения.
Используйте задачу Exec в MSBuild для вызова tf.exe и извлеките файл.
Ответ 2 · рейтинг 3 · Richard Berg
Вы должны оставить файл в системе контроля версий. В противном случае вы столкнетесь с несколькими проблемами:
изменения не будут версироваться. 'Нуф сказал.
он не может быть разветвлен или объединен, хотя web.config является одним из файлов, которые, скорее всего, будут различаться между параллельными средами разработки / тестирования / производства
изменения, которые вы вносите локально, не будут распространяться среди коллег без ручных обходных путей
разработчики, настраивающие среду впервые, вообще не получат файл
Командные сборки не будут содержать файл, как и ваши развертывания. (конечно, вы не развертываете прямо с рабочего стола ?!)
Обратите внимание, что состояние отдельных файлов полностью хранится на сервере TFS. ('tf properties' сбрасывает эти метаданные, если вам интересно) Только проекты и решения имеют привязки, фактически записанные в файл. И даже это фиктивные записи, которые говорят VS: "Не беспокойтесь обо мне, просто спросите TFSProvider, он узнает, кто я и где я должен быть". Хотя в системе проектов VS есть много других причуд, доставляющих мне бесконечную головную боль, в данном случае это ваш друг. Не обходите это.
Лучшие варианты:
Отредактируйте свой сценарий сборки, чтобы переключить атрибут только для чтения до / после модификации. Если вы используете скрипт copyifnewer.bat из связанного сообщения в блоге, он должен быть буквально одной дополнительной строкой. Даже если вы хотите, чтобы в make-файле MSBuild все было полностью декларативным, с помощью сторонних задач а>.
Используйте File -> Source Control -> Exclude. После применения этого параметра файл остается под контролем источника, но больше не будет подвергаться автоматическим проверкам / проверкам со стороны активного решения. Другими словами, вы можете редактировать файл локально, сколько душе угодно, не затрагивая никого другого, но если вы хотите зафиксировать (или отложить) свои изменения, вам нужно будет сделать это из Source Control Explorer или командной строки.
Вариант №1 имеет то преимущество, что позволяет быстро исправить существующую настройку. Обратной стороной является поддержка нескольких копий web.config. * По той же причине, почему копирование / вставка кода - это плохо: если вы измените один, вам придется изменить все остальные - или, что еще хуже, забыть и позволить им рассинхронизироваться до тех пор, пока странные ошибки заставляют вернуться к решению проблемы. Это можно улучшить, изменив процесс так, чтобы был только один "главный" файл web.config, а дополнительные копии содержали только различия (через механизм текстовых различий, преобразования XSLT, программные манипуляции в Powershell и т. Д.). Конечно, это больше работы.
Вариант №2 позволяет избежать проблем №1 с очень небольшими накладными расходами. (сам процесс разработки не изменился; разница лишь в том, как ведет себя пользовательский интерфейс Visual Studio). Это преимущество имеет решающее значение, если вы вообще часто вносите изменения в web.config. Обратной стороной является отсутствие встроенного способа отслеживания вариаций в "главном" файле. Если единственные различия очень просты, например, пара строк подключения, вам может показаться, что проще всего придерживаться одного "мастера" и позволить людям вносить специальные изменения на своих машинах разработчиков. Для этого есть даже инструменты, например Проекты веб-развертывания (легко) и Средство развертывания IIS ( сложный). В любом случае ваше фактическое развертывание, конечно же, должно быть автоматизировано и с контролем исходного кода! Если требуются более сложные настройки, чем позволяют эти инструменты, вам, вероятно, понадобится гибридный подход "мастер + преобразование", описанный ранее.
Ответ 3 · Michael Welcome
Недавно я столкнулся с проблемой и не смог найти хорошего решения. Путем проб и ошибок я смог понять это сам.
Это работает в Visual Studio 2015. Я попытался последовать приведенному выше ответу, но в 2015 году нет опции "Исключить из системы управления версиями", которую я мог бы найти. У него есть интеграция системы управления версиями / проекта, где, если вы удалите файл из системы управления версиями или проекта, он будет автоматически удален из обоих мест. Эта интеграция применяется, когда у вас открыто решение, содержащее проект.
Проблема в том, что при использовании web.template.config web.config действительно является результатом сборки и не должен находиться в системе управления версиями. Однако полное удаление файла и его удаление из проекта вызывает проблемы, поскольку в этом случае файл не является частью шагов сборки / публикации.
Так что работа оказывается простой:
Закройте раствор. Файл -> Закрыть решение.
В окне проводника системы управления версиями удалите файл.
Отметьте в Change.
Откройте свое решение, и вы увидите, что файл конфигурации остается в проекте.
Вы можете увидеть предупреждение со значком треугольника / восклицательного знака, показывающее, что файл конфигурации не найден.
Перестройте проект и щелкните файл.
Теперь файл должен отображаться без предупреждения.
Рядом с ним не должно быть значка замка. Это означает, что он не находится под контролем версий.
Я сделал еще несколько проверок и обнаружил функцию "Исключить из системы управления версиями". Ключевым моментом является то, что вам нужно выбрать элемент в окне обозревателя решений перед выбором элемента меню:
Выберите файл Web.config в "Обозревателе решений".
В меню выберите Файл -> Управление версиями -> Дополнительно -> Исключить Web.config из системы управления версиями.
Теперь вы получите значок красного круга / белой линии.
Это работает, если файл УЖЕ НЕ находится в системе управления версиями.
Если файл УЖЕ находится в системе управления версиями, вам необходимо выполнить описанную выше процедуру, чтобы удалить его из системы управления версиями, не удаляя также его из проекта.