Почему 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 here]()
![enter 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
Ответы
Ответ 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
Или вы можете использовать Игнорировать этот локальный элемент, чтобы игнорировать этот конкретный элемент, только если вы не хотите полностью игнорировать расширение.