GIT - nie można zignorować pliku .suo

85

Próbuję pracować z Gitem z kolegą, w aplikacji napisanej w C #.

Dodaliśmy wpis „project1.suo” do pliku .gitignore, ale za każdym razem, gdy ktoś z nas musi zatwierdzić projekt, wydaje się, że Git każe nam również zatwierdzić plik „project1.suo”.

Wypróbowaliśmy wiele metod dodawania pliku w formacie .gitignore w następujący sposób:

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

Nie możemy naprawić tego problemu.

Laxedur
źródło
2
czy sam plik .gitignore został dodany do repozytorium?
Steve B,
tak jest w repozytorium
Laxedur
3
Wydaje mi się, że plik został dodany raz, wypróbuj jawnie git rm na tym pliku, zatwierdź i zobacz, czy nadal jest sugerowany jako dodany plik.
Steve B
czy możesz mi powiedzieć, jak mogę użyć polecenia rm, ponieważ próbowałem, ale polecenie nie znalazło pliku ...
Laxedur
@SteveB .gitignore nie musi być dodawane do repozytorium, aby działało.
Ikke,

Odpowiedzi:

169

git nie ignoruje plików, które zostały dodane do repozytorium. Jeśli chcesz go zignorować, musisz usunąć plik z repozytorium:

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

Spowoduje to usunięcie pliku z repozytorium, gdy nadal znajduje się na dysku twardym.

Ikke
źródło
jeśli rmujesz pliki * .suo, z pewnością nie będzie to ich zdalne wysyłanie. Czy spowoduje to problem dla osoby, która klonuje ten projekt?
Waqas
Jeśli używasz klienta Visual Studio, z tego miejsca nie można tego zrobić, musisz użyć powłoki cmd. Ale gdybym użył polecenia rm z powłoki, zobaczyłbym plik .suo z przekreśleniem, ale gdybym wprowadził zmianę za pośrednictwem interfejsu VS UI, pojawiłby się ponownie. Musisz wykonać oba powyższe polecenia za pomocą wiersza poleceń.
Michael Blackburn
1
@Waqas nie, Visual Studio stworzy dla nich po prostu nowy plik. To wtedy ważny jest plik .gitignore wykluczający * .suo jako część repozytorium. Kiedy zatwierdzą, plik .gitignore, który wyewidencjonowali, uniemożliwi im (lub przynajmniej zniechęci) do wpisania ich własnego pliku SUO.
Michael Blackburn
3
To może nie być oczywiste dla niektórych nowych ludzi. To zadziałało jak urok. Aby wykonać to polecenie, musisz znajdować się w folderze, w którym znajduje się plik .suo. Pierwsze polecenie, które musisz uruchomić w cmd.exe, to zmień katalog "CD <wpisz pełną ścieżkę do głównego folderu .suo> następnie naciśnij enter .. Domyślnie możesz nie widzieć folderu .vs, w którym znajduje się .suo, więc upewnij się, że pokazujesz ukryte pliki są włączone w katalogu głównym twojego repozytorium. Mój plik nie miał nazwy projektu. Tylko rozszerzenie. git rm --cached .suo git commit -m "Usuń plik suo z repozytorium"
moto_geek
jeśli trzeba zignorować folder, który jest już w zdalnym repozytorium. użyj opcji -r w poleceniu, git rm -r --cached <ścieżka do folderu>
Somnath Kadam
3

Zawsze wracam do tego pytania, aby użyć metody w odpowiedzi, ale znalazłem lepsze rozwiązanie, które polega na zignorowaniu zmian w tym pliku. Metoda jest taka

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

lub

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

Aby cofnąć to użycie --no-zakładaj-niezmienione

Tareq
źródło
Otrzymuję wiadomość „fatal: Unable to mark file Web <directory> / <filetoexclude>”
dancerjude
Pamiętaj, że spowoduje to problemy, gdy ktoś zaktualizuje plik. Git spróbuje zaktualizować plik, ale zauważa, że ​​się zmienił i wyświetli komunikat o błędzie. W każdym razie --skip-worktreejest lepsze niż --assume-unchanged, które powinno być używane tylko ze względu na wydajność.
Ikke
-4

Miałem ten sam problem. Rozwiązanie firmy Ikke pomaga, ale nie zapomnij usunąć wpisu * .suo ze swojego .gitignore, jeśli tam jest. Po poprawieniu pliku zrób

git add **/*.suo
Tsvetelina Tsvetanska
źródło
1
.Suo NIE należy usuwać z .gitignore, aby spełnić wymagania OP.
Caltor