Подтвердить что ты не робот

Почему visual studio записывает файлы в мой файл .gitignore?

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

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

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

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

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

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

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

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

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

Правка -

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

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

enter image description hereenter image description here

Здесь этот вопрос 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
4b9b3361

Ответ 1

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

1. Создайте свое решение и добавьте его в исходное управление. Visual Studio 2013 Solution Creation

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

Solution directory listing

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

gitignore

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

Team Explorer Changes

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

2. Закройте Visual Studio и удалите файл ms-persist.xml

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

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

ms-persist.xml file

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

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

Solution directory listing after deleting ms-persist.xml

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

Corrected commit changes

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

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

**/AppData/*.mdf
**/Appdata/*.ldf

Ответ 4

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

# SQL Server files
*.mdf
*.ldf

Не будет ли игнорировать все файлы базы данных SQL во всем дереве папок решения, вне зависимости от того, какую вложенную папку он нашел?

Ответ 5

  • В Team Explorer перейдите в свое решение, а затем в представление изменений.
  • Выберите глупые файлы, которые вы хотите исключить.
  • Щелкните правой кнопкой мыши и выберите Игнорировать это расширение. Team Explorer - Ignore this extension
  • Вы увидите, что были внесены изменения в .gitignore, которые вы теперь можете совершить.

.gitignore

*.ldf
*.mdf

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