Nie, nie musisz dodawać swojego podmodułu do swojego .gitignore
: to, co rodzic zobaczy z Twojego modułu podrzędnego, to gitlink ( specjalny wpismode 160000
).
To znaczy: każda zmiana dokonana bezpośrednio w module podrzędnym musi zakończyć się zatwierdzeniem w katalogu nadrzędnym.
W ten sposób katalog nadrzędny zapisze poprawne zatwierdzenie stanu podmodułu: tym zatwierdzeniem jest wspomniany powyżej „gitlink”;
Możesz przeczytać więcej o tej polityce w „ Git submodule update (true nature of submodules) ”.
Główną ideą podmodułów jest podejście oparte na komponentach , w którym odwołujesz się do innych repozytoriów przy określonych zatwierdzeniach. Ale jeśli zmienisz cokolwiek w tych podmodułach, musisz zaktualizować te odwołania również w repozytorium nadrzędnym.
Zauważ, że z Git 2.13 (Q2 2017), nie ignorując gitlink, nadal możesz zignorować podmoduł za pomocą:
git config submodule.<name>.active false
Zobacz więcej w „ Ignoruj nowe zatwierdzenia dla modułu podrzędnego git ”.
Uwaga: w przypadku Git 2.15.x / 2.16 (Q1 2018) ignorowanie modułu podrzędnego jest bardziej precyzyjne.
„ git status --ignored --untracked
” nie zatrzymał się na drzewie roboczym oddzielnego projektu, który jest osadzony w ignorowanym katalogu i zawiera listę plików w tym innym projekcie, zamiast po prostu pokazywać sam katalog jako zignorowany.
Zobacz commit fadb482 (25 października 2017) autorstwa Johannesa Schindelina ( dscho
) .
(Scalone przez Junio C Hamano - gitster
- w zatwierdzeniu da7996a , 6 listopada 2017 r.)
status
: nie daj się zmylić podmodułami w wykluczonych katalogach
Skrupulatnie przekazujemy exclude
flagę do treat_directory()
funkcji, abyśmy mogli wskazać, że pliki w niej zawarte są wykluczane, a nie nieśledzone podczas rekurencji.
Ale jeszcze nie traktowaliśmy podmodułów w ten sam sposób.
Z tego powodu, git status --ignored --untracked
jeśli podmoduł
submodule
w gitignored tracked/
pokaże moduł podrzędny w sekcji „ Untracked files
”, np.
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
tracked/submodule/
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/initial.t
Zamiast tego chcielibyśmy, aby pokazywał moduł podrzędny w sekcji „ Ignored files
”:
On branch master
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/
.gitmodules
pliku. Prawdą jest, że ten jeden plik (the.gitmodules
) może zawierać poświadczenia, ale jeśli jest używany tylko do klonowania publicznych repozytoriów, nie musi ich uwzględniać. Ponadto można je i tak przechowywać w pamięci podręcznej, nawet w systemie Windows, za pomocą pomocników poświadczeń, takich jak „Git Credential Manager for Windows” ( github.com/Microsoft/Git-Credential-Manager-for-Windows/… ). Tak więc posiadanie referencji.gitmodules
nie jest zgubne.Z jakiegoś powodu submodule.module-name.active nie działał dla mnie.
Dlatego użyłem submodule.module-name.ignore
https://git-scm.com/docs/gitmodules - tutaj znajdziesz opis możliwych wartości parametru
Działa dla mnie dla (nowych zatwierdzeń) i (zmodyfikowanej treści) wiadomości.
źródło
Aby dodać do zaakceptowanej odpowiedzi, stwierdziłem, że dodanie folderu podmodułu Git do .gitignore w rzeczywistości powoduje problemy - szczególnie podczas próby utworzenia nowego klonu projektu. W szczególności uruchomienie zwykłych poleceń klonowania podmodułu spowodowało, że folder podmodułu był pusty:
Tylko próbując ponownie uruchomić
na podstawie wyników było jasne, na czym polega problem:
Zamiast dodawać
-f
, usunąłem folder podmodułów Git z .gitignore i ponownie uruchomiłem polecenia klonowania submodułów - które teraz pomyślnie utworzyły folder. Myślę, że może być błąd w tym, że jedno z poleceń klonu submodułu respektuje .gitignore, ale nie ostrzega, że odpowiednio pomija podmoduł.źródło