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