Почему Visual Studio фиксирует файлы в моем файле .gitignore?

Я использую Visual Studio 2013 Express, используя Git в проекте.

Я создал свой репозиторий и скопировал в него файлы проекта из другого каталога. Затем я проверил свои файлы .gitignore и .gitattributes. .gitignore был предварительно сконфигурирован и надеялся охватить все, что мне нужно было игнорировать для коммитов на этом этапе.

Я выбрал вкладку «Изменения» в Visual Studio на вкладке «Team Explorer» и увидел, что все мои файлы не отслеживаются, как и ожидалось. Затем я нажал «Добавить все». Я предполагал, что VS добавит в список «Включенные изменения» только файлы, не соответствующие тем, которые указаны в моем .gitignore. Вместо этого все файлы были добавлены в список «Включенные изменения».

Затем я подумал, что, возможно, файл .gitignore будет использоваться при фиксации и что будут зафиксированы только файлы, не соответствующие файлам в .gitignore. Поэтому я добавил сообщение о коммите и нажал "Commit".

Когда я выбираю «Просмотр истории» в раскрывающемся списке «Действия» на вкладке «Изменения», я вижу панель слева от моего представления «Team Explorer», которая показывает все сделанные мной коммиты. Есть только 1 коммит. Когда я дважды щелкаю эту фиксацию, на вкладке «Team Explorer» отображается Commit 8db34b1c, и все файлы в моем проекте перечислены там в виде дерева с [добавить] после их имени.

Например, App_Data/Movies.mdf и App_Data/Movies.ldf перечислены, хотя мой .gitignore включает строки

# SQL Server files
App_Data/*.mdf
App_Data/*.ldf

Я не понимаю, как здесь используется файл .gitignore или что означают разделы «Включенные изменения», «Исключенные изменения» или «Неотслеживаемые файлы».

Объяснение вышеуказанного поведения и разделов будет оценено по достоинству.

Редактировать--

Я удалил свой каталог .git, создал новый репозиторий, снова скопировал файлы моего проекта, а затем сделал скриншоты того, что вижу.

Вот изображения моего файла .gitignore и моей вкладки «Изменения».

введите здесь описание изображениявведите здесь описание изображения

Там есть этот вопрос SO и этот вопрос msdn, который показывает, что у других людей тоже возникают проблемы. Я попытался удалить файл .xml, добавленный VS, в моем каталоге .git (как указано в вопросе msdn), но это не решило проблему для меня.

Изменить 2 --

Это моя текущая структура каталогов:

/MvcMovie/
    |--.git/
    |
    |---MvcMovie/
    |       |--App_Data/
    |       |     |--Movies.mdf
    |       |     |--Movies.ldf
    |       |     
    |       |--App_Start/
    |       |--etc...
    |
    |--packages/
    |--.gitignore
    |--.gitattributes
    |--MvcMovie.sln
    |MvcMovie.v12.suo

person seangwright    schedule 09.03.2014    source источник
comment
Ваш репозиторий git (обозначенный файлом .git) находится в каталоге MvcMovie или выше каталога MvcMovie?   -  person mockinterface    schedule 10.03.2014
comment
Мой репозиторий git находится в верхнем каталоге MvcMovie.   -  person seangwright    schedule 11.03.2014


Ответы (5)


@dustinmoris прав в своем ответе, но исправление не так очевидно, как может показаться из-за процедуры. Итак, позвольте мне подробно рассказать вам о процессе, чтобы убедиться, что файлы в вашем файле .gitignore соблюдаются Visual Studio.

<сильный>1. Создайте свое решение и добавьте его в систему управления версиями Создание решения Visual Studio 2013

Я создал образец XAML-решения MVVM Light, и вы видите, что все неотслеживаемые в настоящее время файлы, которые в идеале должны быть добавлены к следующему коммиту отображается маленький зеленый плюс рядом с их значками.

Список каталогов решений

Проблема в том, что файл MvvmLight.Win81_TemporaryKey.pfx указан для добавления, хотя все файлы типа .pfx явно вызываются для игнорирования в моем .gitignore.

gitignore

Это станет еще более очевидным, если я выберу решение на панели Team Explorer, а затем нажму кнопку Changes. Я вижу список всех файлов, ожидающих включения в следующую фиксацию.

Изменения Team Explorer

Этот список содержит все файлы в Решении, а не только подмножество, указанное в файле .gitignore.

<сильный>2. Закройте Visual Studio и удалите файл ms-persist.xml

Он находится в скрытом каталоге, поэтому его трудно найти. Он должен находиться по следующему пути

Каталог решений\.git\ms-persist.xml

ms-persist.xml файл

<сильный>3. Повторно откройте решение и зафиксируйте файлы

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

Список каталогов решений после удаления ms-persist.xml

Перейдите к панели Team Explorer и нажмите кнопку Changes. Опять же, вы увидите, что проект все еще отслеживается системой управления версиями, а также список всех файлов, которые будут добавлены при следующем коммите. Что еще более важно, вы заметите, что на этот раз ваш список .gitignore был правильно выполнен, и все файлы, указанные как игнорируемые, больше не указаны как ожидающие изменения, которые будут добавлены к следующему коммиту. Как вы можете видеть ниже, файл MvvmLight.Win81_TemporaryKey.pfx больше не запланирован для следующего коммита!

Исправленные изменения фиксации

Надеюсь, это поможет кому-то. После всех этих хлопот вот мой честный совет:

Изучите и используйте интерфейс командной строки, поскольку он предоставляет полный спектр функций, предлагаемых git, и имеет одинаковый интерфейс на всех платформах.

person Joel B    schedule 02.03.2015
comment
Версия TLDR, удалите .git\ms-persist.xml и перезапустите Visual Studio. Спасибо, это помогло. - person Jürgen Steinblock; 15.10.2015
comment
Хороший ответ; особенно последняя фраза. Я пришел к такому же выводу после борьбы со слишком большим количеством так называемых пользовательских интерфейсов с их бесконечными причудами. - person Alfie; 01.03.2016
comment
Я сам видел это, когда применение упомянутого исправления не прижилось - файлы были повторно добавлены после выполнения чистой перестройки. Глядя на .gitignore, я обнаружил, что у него есть UNIX EOL. Переключение на Windows EOL помогло. - person Trond Aarskog; 27.03.2016

Если кто-то когда-нибудь задавался вопросом, как это исправить. Вот решение: перейдите в папку .git (может быть скрытой) и откройте ms-persist.xml, и вы увидите отслеживаемые файлы, исключенные элементы и т. д.

Просто вручную исправьте то, что испортил VS, и перезапустите IDE, и все снова будет хорошо!

Не удаляйте всю папку .git, как это часто упоминается в других темах SO!

Благодаря сообщению в блоге Эрика Нельсона: https://ericnelson.wordpress.com/2014/06/21/is-visual-studio-2013-ignoring-your-gitignore-file/

person dustinmoris    schedule 20.02.2015

AppData/*.mdf и AppData/*.ldf относятся к файлам .mdf и .ldf, которые существуют в каталоге AppData, который находится в корне вашего репозитория git.

Ваш каталог AppData фактически существует под каталогом MvcMovie. Можете добавить:

MvcMovie/AppData/*.mdf
MvcMovie/AppData/*.ldf`

к вашему .gitignore, чтобы игнорировать эти конкретные файлы, или, если вы хотите игнорировать каталоги .mdf и .ldf во всех папках AppData в вашем репозитории:

**/AppData/*.mdf
**/Appdata/*.ldf
person Edward Thomson    schedule 10.03.2014
comment
Учитывая, как Visual Studio настраивает файл .gitignore, как мне создавать свои репозитории и/или проекты, чтобы мне не приходилось настраивать .gitignore для каждого нового проекта. Например, есть строка !packages/*/build/, которая, похоже, нацелена на папку с моими пакетами, но находится на том же уровне каталога, что и папка проекта, и файл .gitignore, что означает (если я правильно понимаю) Строка App_Data/*.mdf не будет применяться, как сейчас. - person seangwright; 11.03.2014

Если вы измените спецификации файла базы данных SQL в .gitignore на:

# SQL Server files
*.mdf
*.ldf

Разве это не игнорировало бы все файлы базы данных SQL во всем дереве папок решения, независимо от того, в какой подпапке они были найдены?

person Cindy K.    schedule 30.10.2014

  1. В Team Explorer перейдите к своему решению, а затем к представлению изменений.
  2. Выберите глупые файлы, которые вы хотите исключить.
  3. Щелкните правой кнопкой мыши и выберите Игнорировать это расширение. Team Explorer — игнорировать это расширение
  4. Вы увидите, что в .gitignore были внесены изменения, которые вы теперь можете зафиксировать.

.gitignore

*.ldf
*.mdf

Или вы можете использовать Игнорировать этот локальный элемент, чтобы игнорировать только этот конкретный элемент, если вы не хотите полностью игнорировать расширение.

person Jess    schedule 22.05.2015