GIT - нельзя игнорировать файл .suo


85

Я пытаюсь работать с Git с коллегой в приложении, написанном на C #.

Мы добавили запись «project1.suo» в файл .gitignore, но каждый раз, когда кому-то из нас нужно зафиксировать проект, Git, кажется, говорит нам также зафиксировать файл «project1.suo».

Мы испробовали много способов добавить файл в .gitignore, например:

*.suo
project1.suo
c:\project\project1.suo

Мы не можем решить эту проблему.


2
добавлен ли файл .gitignore в репо?
— Steve B

да есть в репозитории
— Laxedur

3
Я предполагаю, что файл был добавлен один раз, попробуйте явно использовать git rm для этого файла, зафиксируйте и посмотрите, предлагается ли он по-прежнему в качестве добавленного файла.
— Steve B

Можете ли вы сказать мне, как я могу использовать команду rm, потому что я пытался, но команда не нашла файл ...
— Лакседур

@SteveB .gitignore не нужно добавлять в репозиторий, чтобы он вступил в силу.
— Ikke

Ответы:


169

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

git rm --cached project1.suo
git commit -m "Delete suo file from repository"

Это удалит файл из репозитория, пока он все еще находится на вашем жестком диске.


если вы удалите файлы * .suo, конечно, он не будет отправлять эти файлы удаленно. Будет ли это проблемой для человека, который клонирует этот проект?
— Waqas

Если вы используете клиент Visual Studio, сделать это оттуда невозможно, вам нужно использовать командную оболочку cmd. Но если бы я использовал команду rm из оболочки, я бы увидел файл .suo с зачеркиванием, но если бы я зафиксировал изменение через VS UI, он бы снова появился. Вы должны выполнить обе указанные выше команды через командную строку.
— Майкл Блэкберн

1
@Waqas нет, Visual Studio просто создаст для них новый файл. Это когда важен .gitignore, исключая * .suo как часть репозитория. Когда они совершают фиксацию, извлеченный ими .gitignore не позволит им (или, по крайней мере, отговорить их) от проверки их собственного файла SUO.
— Майкл Блэкберн

3
Для некоторых новичков это может быть неочевидно. Это сработало как шарм. Чтобы выполнить эту команду, вы должны находиться внутри папки, в которой находится .suo. Первая команда, которую вам нужно запустить в cmd.exe, - это сменить каталог «CD <введите полный путь к корневой папке .suo>, затем нажмите Enter. По умолчанию вы можете не видеть папку .vs, где находится .suo, поэтому убедитесь, что show скрытые файлы включены в корне папки вашего репозитория. У моего файла не было имени проекта. только расширение. git rm --cached .suo git commit -m "Удалить файл suo из репозитория"
— moto_geek

если нужно игнорировать папку, и она уже находится в удаленном репо. используйте параметр -r в команде, git rm -r --cached <путь к папке>
— Somnath Kadam

3

Я всегда возвращаюсь к этому вопросу, чтобы использовать метод в ответе, но я нашел лучшее решение - игнорировать изменения в этом файле. Метод

git update-index --assume-unchanged project1.suo

или же

git update-index --assume-unchanged .vs/config/applicationhost.config

Чтобы отменить это, используйте --no-accept-unchanged


Я получаю сообщение «фатальный: невозможно пометить файл Web <directory> / <filetoexclude>»
— dancerjude

Обратите внимание, что это приведет к проблемам, когда кто-то обновит файл. Git попытается обновить файл, но заметит, что он изменился, и выдаст вам сообщение об ошибке. В любом случае --skip-worktreeлучше, чем --assume-unchanged, что следует использовать только по соображениям производительности.
— Икке,

-4

У меня такая же проблема. Решение Ikke помогает, но не забудьте удалить запись * .suo из вашего .gitignore, если она там есть. После исправления файла выполните

git add **/*.suo

1
.Suo НЕ следует удалять из .gitignore, чтобы соответствовать требованиям OP.
— Caltor
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.