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

Мы используем предложение Скотта Ханслемана для нескольких web.configs из его сообщения здесь. Проблема в том, что нам нужно проверить файл Web.Config. Если мы удалим его из проекта, то при публикации web.config не будет помещен. Поэтому нам нужно удалить привязки системы управления версиями только из файла web.config, но оставить ее в проекте, а остальная часть проекта по-прежнему находится в системе управления версиями.

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

Спасибо.


person Josh    schedule 04.09.2009    source источник


Ответы (3)


Добавив новый файл в обозреватель решений, вы получите маленький знак плюса, указывающий, что он должен быть добавлен в систему управления версиями. Затем щелкните правой кнопкой мыши и выберите «Отменить ожидающие изменения». Это отменит добавление, но оставит файл в вашем проекте.

Если это не сработает, я предлагаю один из следующих методов:

  • Используйте задачу Attrib из проекта MSBuild Community Tasks, чтобы удалить флаг только для чтения.
  • Используйте задачу Exec в MSBuild для вызова tf.exe и извлеките файл.
person Tim Booker    schedule 04.09.2009
comment
Итак, мне нужно удалить файл, зарегистрировать его, добавить новый web.config, а затем отменить? - person Josh; 04.09.2009
comment
Да, я бы предложил сначала удалить файл из системы контроля версий. - person Tim Booker; 04.09.2009
comment
На самом деле, не имеет значения, находится ли файл в системе контроля версий, потому что для создания файла выполняется сценарий. Файлы, которые размещаются сценарием, по-прежнему будут иметь полную версию. - person Tim Booker; 07.09.2009

Вы должны оставить файл в системе контроля версий. В противном случае вы столкнетесь с несколькими проблемами:

  • изменения не будут версироваться. 'Нуф сказал.
  • он не может быть разветвлен или объединен, хотя web.config является одним из файлов, которые, скорее всего, будут различаться между параллельными средами разработки / тестирования / производства
  • изменения, которые вы вносите локально, не будут распространяться среди коллег без ручных обходных путей
  • разработчики, настраивающие среду впервые, вообще не получат файл
  • Командные сборки не будут содержать файл, как и ваши развертывания. (конечно, вы не развертываете прямо с рабочего стола ?!)

Обратите внимание, что состояние отдельных файлов полностью хранится на сервере TFS. ('tf properties' сбрасывает эти метаданные, если вам интересно) Только проекты и решения имеют привязки, фактически записанные в файл. И даже это фиктивные записи, которые говорят VS: «Не беспокойтесь обо мне, просто спросите TFSProvider, он узнает, кто я и где я должен быть». Хотя в системе проектов VS есть много других причуд, доставляющих мне бесконечную головную боль, в данном случае это ваш друг. Не обходите это.

Лучшие варианты:

  1. Отредактируйте свой сценарий сборки, чтобы переключить атрибут только для чтения до / после модификации. Если вы используете скрипт copyifnewer.bat из связанного сообщения в блоге, он должен быть буквально одной дополнительной строкой. Даже если вы хотите, чтобы в make-файле MSBuild все было полностью декларативным, с помощью сторонних задач .

  2. Используйте File -> Source Control -> Exclude. После применения этого параметра файл остается под контролем источника, но больше не будет подвергаться автоматическим проверкам / проверкам со стороны активного решения. Другими словами, вы можете редактировать файл локально, сколько душе угодно, не затрагивая никого другого, но если вы хотите зафиксировать (или отложить) свои изменения, вам нужно будет сделать это из Source Control Explorer или командной строки.

Вариант №1 имеет то преимущество, что позволяет быстро исправить существующую настройку. Обратной стороной является поддержка нескольких копий web.config. * По той же причине, почему копирование / вставка кода - это плохо: если вы измените один, вам придется изменить все остальные - или, что еще хуже, забыть и позволить им рассинхронизироваться до тех пор, пока странные ошибки заставляют вернуться к решению проблемы. Это можно улучшить, изменив процесс так, чтобы был только один «главный» файл web.config, а дополнительные копии содержали только различия (через механизм текстовых различий, преобразования XSLT, программные манипуляции в Powershell и т. Д.). Конечно, это больше работы.

Вариант №2 позволяет избежать проблем №1 с очень небольшими накладными расходами. (сам процесс разработки не изменился; разница лишь в том, как ведет себя пользовательский интерфейс Visual Studio). Это преимущество имеет решающее значение, если вы вообще часто вносите изменения в web.config. Обратной стороной является отсутствие встроенного способа отслеживания вариаций в «главном» файле. Если единственные различия очень просты, например, пара строк подключения, вам может показаться, что проще всего придерживаться одного «мастера» и позволить людям вносить специальные изменения на своих машинах разработчиков. Для этого есть даже инструменты, например Проекты веб-развертывания (легко) и Средство развертывания IIS ( сложный). В любом случае ваше фактическое развертывание, конечно же, должно быть автоматизировано и с контролем исходного кода! Если требуются более сложные настройки, чем позволяют эти инструменты, вам, вероятно, понадобится гибридный подход «мастер + преобразование», описанный ранее.

person Richard Berg    schedule 04.09.2009
comment
Я понимаю вашу точку зрения, Ричард, но web.config - это просто копия 1 из 4 других файлов в проекте, которые уже находятся под контролем источника. Файл просто выгружается для каждой среды в зависимости от конфигурации сборки. В TFS нет необходимости, потому что это просто копия того, что уже защищено системой контроля версий, и головная боль. Спасибо за ваш вклад! - person Josh; 15.09.2009
comment
Нет проблем. Я бы все равно посмотрел на вариант №2 - это одна из тех малоизвестных функций VS, которые, как только вы ее узнаете, вы найдете бесценными - даже если не специально для web.config. - person Richard Berg; 16.09.2009
comment
Exclude не работает, потому что, когда я публикую, web.config не отправляется. Он должен быть частью проекта, но не в системе управления версиями, чтобы я мог его перезаписать. - person Josh; 10.11.2009
comment
Он исключает его из системы контроля версий, а не из проекта. Файл - ›Контроль версий -› Исключить. Затем рядом с файлом будет помещен символ «минус», означающий, что он больше не находится в системе управления версиями, но по-прежнему является частью проекта. У меня есть куча файлов JS, которые я сжимаю в файл -min в проекте, и это единственный способ заставить его работать, не проверяя все время файлы min. А поскольку сценарии сборки и первичные файлы находятся в исходном коде, любой должен иметь возможность построить. и получите файлы min. - person Mike; 08.11.2010
comment
Да, и если вы не проверяли их до исключения, вам нужно снять флажок только для чтения на самих файлах. - person Mike; 08.11.2010

Недавно я столкнулся с проблемой и не смог найти хорошего решения. Путем проб и ошибок я смог понять это сам.

Это работает в Visual Studio 2015. Я попытался последовать приведенному выше ответу, но в 2015 году нет опции «Исключить из системы управления версиями», которую я мог бы найти. У него есть интеграция системы управления версиями / проекта, где, если вы удалите файл из системы управления версиями или проекта, он будет автоматически удален из обоих мест. Эта интеграция применяется, когда у вас открыто решение, содержащее проект.

Проблема в том, что при использовании web.template.config web.config действительно является результатом сборки и не должен находиться в системе управления версиями. Однако полное удаление файла и его удаление из проекта вызывает проблемы, поскольку в этом случае файл не является частью шагов сборки / публикации.

Так что работа оказывается простой:

  1. Закройте раствор. Файл -> Закрыть решение.
  2. В окне проводника системы управления версиями удалите файл.
  3. Отметьте в Change.
  4. Откройте свое решение, и вы увидите, что файл конфигурации остается в проекте.
  5. Вы можете увидеть предупреждение со значком треугольника / восклицательного знака, показывающее, что файл конфигурации не найден.
  6. Перестройте проект и щелкните файл.
  7. Теперь файл должен отображаться без предупреждения.
  8. Рядом с ним не должно быть значка замка. Это означает, что он не находится под контролем версий.

Я сделал еще несколько проверок и обнаружил функцию «Исключить из системы управления версиями». Ключевым моментом является то, что вам нужно выбрать элемент в окне обозревателя решений перед выбором элемента меню:

  1. Выберите файл Web.config в «Обозревателе решений».
  2. В меню выберите Файл -> Управление версиями -> Дополнительно -> Исключить Web.config из системы управления версиями.
  3. Теперь вы получите значок красного круга / белой линии.
  4. Это работает, если файл УЖЕ НЕ находится в системе управления версиями.
  5. Если файл УЖЕ находится в системе управления версиями, вам необходимо выполнить описанную выше процедуру, чтобы удалить его из системы управления версиями, не удаляя также его из проекта.
person Michael Welcome    schedule 17.12.2018