Wymuś dodawanie pomimo pliku .gitignore


413

Czy istnieje sposób na wymuszenie gitdodania pliku pomimo .gitignorepliku?


4
Lepszym pytaniem może być - dlaczego chcesz to zrobić? Jeśli chcesz śledzić plik, anuluj go (poprzedź jego wzorzec w .gitignorepliku !np !dont/ignore/this/file.).
Ohad Schneider,

6
@OhadSchneider Jest to przydatne, jeśli wymuszasz zatwierdzenie plików kompilacji do innej gałęzi. Robi to kilka projektów, takich jak StrongLoop dla bezpiecznych wdrożeń
Deminetix,

5
@OhadSchneider Dla nas jest to więcej, ponieważ większość programistów instaluje git z Visual Studio 2015, który dodaje globalny gitignore do folderu użytkownika. Wyklucza to pliki takie jak * .dll i * .exe. Jest to świetne dla naszych nowych projektów, które używają tylko pakietów nuget, które są pobierane podczas kompilacji, ale w przypadku niewielkiej liczby starszych projektów nadal używamy bibliotek dll, które są ręcznie przywoływane w rozwiązaniu. W przypadku tych projektów chcielibyśmy ręcznie dołączyć je, zamiast informować każdego programistę, aby komentował pliki * .dll i * .exe w globalnym gitignore.
Nullius

4
@Nullius Czy nie możesz ich po prostu zignorować na wyższym poziomie .gitignore(powiedzmy, dodaj .gitignorew tym samym folderze co dll, jeden powyżej lub coś takiego)?
Ohad Schneider

Odpowiedzi:


569

Zobacz man git-add:

   -f, --force
       Allow adding otherwise ignored files.

Więc uruchom to

git add --force my/ignore/file.foo

11
Uhm, który nie działa, w stanie git plik nadal nie jest wyświetlany
Mark

5
Cóż, przetestowałem to, aby upewnić się, że naprawdę działa i działa. Czy możesz opisać swoje środowisko (system operacyjny, wersja git ...)? Oto, co właściwie zrobiłem: echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works(nie mogę wkleić nowego wiersza w komentarzu, wykonaj polecenia 1 na 1
Daniel Böhmer,

4
To samo mi się przydarzyło, wcześniej uruchomiłem git update-index - asume-niezmieniony na moich plikach. Musiałem cofnąć to z --no-assume-niezmienione i zadziałało
Jako

4
Działa to tylko dla mnie przy użyciu symboli wieloznacznych, używania git 1.9.5 w systemie Windows, nawet po wypróbowaniu opcji --no - assume-niezmieniona. „git add - f <nazwa_pliku>” nic nie robi, ale „git add -f *” działa. Działa także TortoiseGit.
mhenry1384,

@ mhenry1384 Przyczyną tego, że działa on dla symboli wieloznacznych tylko w systemie Windows, może wynikać ze sposobu użycia separatora ścieżek. Dla mnie ukośnik „/” działa, ale ukośnik odwrotny „\” nie. Fakt, że cmd / PowerShell konwertuje „/” na „\” dla nas, ułatwia uruchomienie.
ohw

19

Pomimo działającego rozwiązania Daniela Böhmera, Ohad Schneider zaproponował lepsze rozwiązanie w komentarzu:

Jeśli plik jest zwykle ignorowany, a użytkownik zmuszony jest go dodać - może zostać przypadkowo zignorowany w przyszłości (na przykład po usunięciu pliku, wówczas zatwierdzenie zostanie wykonane i plik zostanie ponownie utworzony).

Powinieneś po prostu zignorować go w pliku .gitignore w ten sposób: Unignore podkatalogi ignorowanych katalogów w Git


4
To jest poprawne. Użyłem opcji --force dla małych plików danych, a następnie przestawiłem trochę strukturę folderów i zablokowałem wszystkie pliki śledzone przy użyciu siły. JEDNAK: w .gitignoreużyciu !specific-file-name.txtbez hierarchii folderów, w ten sposób śledzenie będzie śledzić plik wokół repozytorium.
Merlin

Zależy to od scenariusza, np. Kiedy chcesz wykluczyć „1.txt” we wszystkich folderach, a kiedyś „folder1 / *. Txt”
AS

14
To nie jest „lepsze” rozwiązanie. To rozwiązanie innego problemu.
aij

2

Innym sposobem osiągnięcia tego jest tymczasowa edycja pliku gitignore, dodanie pliku, a następnie przywrócenie gitignore z powrotem. Czuję się trochę zuchwały


10
Zgadzam się, nie to chcesz robić.
Merlin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.