Poniżej ciągła linia dla mojego pierwotnego pytania.
Mam folder w moim katalogu lokalnym, który nie jest śledzony. Kiedy biegam git status
, otrzymuję:
Changed but not updated:
modified: vendor/plugins/open_flash_chart_2 (modified content, untracked content)
Kiedy piszę, git add vendor/plugins/open_flash_chart_2
a potem próbuję git status
ponownie, nadal jest napisane „nieśledzone”. Co się dzieje?
Oto proste podsumowanie mojego ostatniego pół godziny:
Odkryłem, że moje repozytorium Github nie śledzi mojej
vendor/plugins/open_flash_chart_2
wtyczki. W szczególności nie ma zawartości i pokazuje zieloną strzałkę na ikonie folderu.Wypróbowany
git submodule init
No submodule mapping found in .gitmodules for path 'vendor/plugins/open_flash_chart_2'
Wypróbowany
git submodule add git://github.com/korin/open_flash_chart_2_plugin.git vendor/plugins/open_flash_chart_2
vendor/plugins/open_flash_chart_2 already exists in the index
git status
modified: vendor/plugins/open_flash_chart_2 (untracked content)
Poszukiwany dla dowolnego pliku wymienionego
.gitmodules
w moim katalogu repozytorium / lokalnym, ale nie mogłem go znaleźć.
Co muszę zrobić, aby moje moduły podrzędne działały, aby git mógł prawidłowo rozpocząć śledzenie?
Może to być niezwiązane (dołączam to na wypadek, gdyby to pomogło), ale za każdym razem, gdy piszę, git commit -a
a nie jak zwykle git commit -m "my comments"
, generuje błąd:
E325: ATTENTION
Found a swap file by the name ".git\.COMMIT-EDITMSG.swp"
dated: Thu Nov 11 19:45:05 2010
file name: c:/san/project/.git/COMMIT_EDITMSG
modified: YES
user name: San host name: San-PC
process ID: 4268
While opening file ".git\COMMIT_EDITMSG"
dated: Thu Nov 11 20:56:09 2010
NEWER than swap file!
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Swap file ".git\.COMMIT_EDITMSG.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
Jestem kompletnym nowicjuszem w Github i pomimo prób przejrzenia dokumentacji, jestem trochę zaskoczony tymi konkretnymi problemami. Dziękuję Ci.
źródło
git submodule add
,git submodule update --init
.tracking
tag wydaje się być wykorzystywane do śledzenia strony internetowej „gość” tematów, tak że nie będzie mieć zastosowania.Odpowiedzi:
Dodano
vendor/plugins/open_flash_chart_2
wpis „gitlink”, ale nigdy nie zdefiniowałeś go jako podmodułu. Skutecznie używasz wewnętrznej funkcji używanej przez git submodule (wpisy gitlink), ale nie używasz samej funkcji submodułu.Prawdopodobnie zrobiłeś coś takiego:
To ostatnie polecenie jest problemem. Katalog
vendor/plugins/open_flash_chart_2
zaczyna się jako niezależne repozytorium Git. Zwykle takie repozytoria podrzędne są ignorowane, ale jeśli powiesz git add, aby jawnie je dodał, utworzy wpis gitlink, który wskazuje na zatwierdzenie HEAD repozytorium podrzędnego, zamiast dodawać zawartość katalogu. Byłoby miło, gdyby git add odmówił tworzenia takich „półmodułów”.Normalne katalogi są reprezentowane jako obiekty drzewa w Git; obiekty drzewa nadają nazwy i uprawnienia do obiektów, które zawierają (zwykle inne obiekty drzewa i obiekty blob - odpowiednio katalogi i pliki). Podmoduły są reprezentowane jako wpisy „gitlink”; Wpisy gitlink zawierają tylko nazwę obiektu (hash) zatwierdzenia HEAD podmodułu. „Repozytorium źródłowe” zatwierdzenia gitlink jest określone w
.gitmodules
pliku (i.git/config
pliku po zainicjowaniu modułu podrzędnego ).To, co masz, to wpis wskazujący na określone zatwierdzenie, bez rejestrowania repozytorium źródłowego dla tego zatwierdzenia. Możesz to naprawić, zmieniając gitlink we właściwy moduł podrzędny lub usuwając gitlink i zastępując go „normalną” zawartością (zwykłe pliki i katalogi).
Zmień go w odpowiedni moduł podrzędny
Jedynym bitem, którego brakuje, aby poprawnie zdefiniować
vendor/plugins/open_flash_chart_2
jako moduł podrzędny, jest.gitmodules
plik. Zwykle (jeśli nie dodałeś go jeszcze jako wpis samego gitlink), po prostu użyjeszgit submodule add
:Jak ustaliłeś, to nie zadziała, jeśli ścieżka już istnieje w indeksie. Rozwiązaniem jest tymczasowe usunięcie wpisu gitlink z indeksu, a następnie dodanie submodułu:
Spowoduje to wykorzystanie istniejącego repozytorium podrzędnego (tj. Nie spowoduje ponownego sklonowania repozytorium źródłowego) i przygotuje
.gitmodules
plik, który wygląda następująco:Spowoduje to również utworzenie podobnego wpisu w głównym repozytorium
.git/config
(bezpath
ustawienia).Zatwierdź to, a będziesz miał odpowiedni moduł podrzędny. Po sklonowaniu repozytorium (lub wypchnięciu do GitHub i sklonowaniu stamtąd) powinno być możliwe ponowne zainicjowanie modułu podrzędnego za pośrednictwem
git submodule update --init
.Zastąp go zwykłą treścią
Następny krok zakłada, że twoje repozytorium podrzędne w
vendor/plugins/open_flash_chart_2
nie ma żadnej lokalnej historii, którą chcesz zachować (tj. Wszystko, na czym Ci zależy, to bieżące drzewo robocze repozytorium podrzędnego, a nie historia).Jeśli masz historię lokalną w repozytorium podrzędnym, na którym Ci zależy, powinieneś wykonać kopię zapasową
.git
katalogu repozytorium podrzędnego przed usunięciem go w drugim poleceniu poniżej. ( Weź również pod uwagę poniższy przykład poddrzewa git, który zachowuje historię HEAD repozytorium podrzędnego).Tym razem podczas dodawania katalogu nie jest to repozytorium podrzędne, więc pliki zostaną dodane normalnie. Niestety, ponieważ usunęliśmy
.git
katalog, nie ma super łatwego sposobu na aktualizację repozytorium źródłowego.Zamiast tego możesz rozważyć użycie scalania poddrzewa . Pozwoli ci to łatwo pobrać zmiany z repozytorium źródłowego, zachowując „płaskie” pliki w repozytorium (bez modułów podrzędnych). Trzecia partia- git poddrzewa komenda jest ładny otoki wokół funkcjonalności subtree seryjnej.
Później:
Poddrzewo git ma również
--squash
opcję, która pozwala uniknąć włączania historii repozytorium źródłowego do historii, ale nadal umożliwia pobieranie zmian.źródło
rm -rf vendor/plugins/open_flash_chart_2/.git
i jest napisane, że „rm” nie jest rozpoznawane. Potem spróbowałemgit rm -rf vendor/plugins/open_flash_chart_2/.git
i powiedziałfatal: pathspec 'vendor/plugins/open_flash_chart_2/.git' did not match any files
(ale mogę się tam dostać w Eksploratorze Windows!)..git
i ponownie dodać pliki „na płasko” (pierwsza opcja „Zwykła zawartość”).subtree
nie należy mylić z scalaniem poddrzewa. To nie jest opakowanie. Autor tak mówi: Pgit readtree --prefix=path
I poddrzewo łączy się:git merge
z-s subtree
lub-Xsubtree=path
). Ma też fajne dodatki „na wierzchu”:--squash
tryb,split
poleceniepush
orazpull
pomocniki i .Po prostu miałem ten sam problem. Przyczyną było to, że istniał podfolder zawierający folder „.git”. Usunięcie go sprawiło, że był szczęśliwy.
źródło
.git
folderAdres URL odniesienia https://danielmiessler.com/blog/git-modified-untracked/#gs.W0C7X6U
źródło
Aby wskazać, co musiałem wykopać z czatu Chrisa Johansena z OP (link z odpowiedzi do odpowiedzi):
git add vendor/plugins/open_flash_chart_2
# doda gitlink, zawartość pozostanie nieśledzonagit add vendor/plugins/open_flash_chart_2/
# ZWRÓĆ UWAGĘ NA SLASH !!!!Druga forma doda go bez gitlinka, a zawartość będzie można śledzić. Katalog .git jest wygodnie i automatycznie ignorowany. Dziękuję Chris!
źródło
Cały czas używam sztuczki zaproponowanej przez Petera Ladę, nazwanej „fałszywymi podmodułami”:
http://debuggable.com/posts/git-fake-submodules:4b563ee4-f3cc-4061-967e-0e48cbdd56cb
Jest to bardzo przydatne w kilku scenariuszach (używam go do przechowywania całej mojej konfiguracji Emacsa w repozytorium, w tym aktualnego HEAD wszystkich repozytoriów git wewnątrz katalogów pakietów elpa / el-get, więc mogę łatwo cofnąć / przekazać do znanego wersja działająca, gdy jakaś aktualizacja coś zepsuje).
źródło
http://progit.org/book/ch6-6.html
Myślę, że powinieneś to przeczytać, aby dowiedzieć się trochę o module podrzędnym. Jest dobrze napisany i przeczytanie go nie zajmuje dużo czasu.
źródło
Miałem ten sam problem z dużym projektem z wieloma podmodułami. Na podstawie odpowiedzi Chrisa Johnsena tutaj i VonC tutaj buduję krótki skrypt bash, który iteruje przez wszystkie istniejące wpisy gitlink i dodaje je jako odpowiednie podmoduły.
To naprawiło to dla mnie, mam nadzieję, że to pomoże.
źródło
To zadziałało dobrze dla mnie:
git update-index --skip-workktree
Jeśli to nie działa ze ścieżką, wypróbuj nazwę pliku. Daj mi znać, jeśli to też zadziałało.
PA!
źródło
Miałem ten sam problem, ale nie został on rozwiązany w tej dyskusji.
Trafiłem też w problem z submodułem, jak opisano przy otwieraniu wątku.
Patrząc na różnicę, rozpoznałem -dirty dołączony do hasha: ponowne przeczytanie dokumentów rozwiązało problem za mnie. http://web.mit.edu/jhawk/mnt/spo/git/git-doc/user-manual.html Zajrzyj do sekcji „Pułapki związane z modułami podrzędnymi”
Powodem było to, że w module podrzędnym nastąpiły zmiany lub nieśledzona zawartość. Najpierw musiałem dostać się do katalogu podmodułów, wykonać polecenie „git add” + „git commit”, aby cała zawartość była śledzona w module podrzędnym.
Teraz ta nowa HEAD z modułu podrzędnego może zostać przypisana do modułu głównego.
źródło
Niedawno napotkałem ten problem podczas pracy nad projektem kontraktowym (uznanym za tajny). System, w którym musiałem uruchamiać kod, nie miał dostępu do internetu, oczywiście ze względów bezpieczeństwa, więc instalowanie zależności z wykorzystaniem composera i npm stawało się ogromnym problemem.
Po długich naradach z moim kolegą zdecydowaliśmy się po prostu go wyskoczyć i skopiować i wkleić nasze zależności, zamiast wykonywać instalację kompozytora lub instalację npm.
To spowodowało, że NIE dodawaliśmy dostawców i npm_modules w gitignore. Wtedy właśnie napotkałem ten problem.
Przeszukałem to trochę w Google i znalazłem ten pomocny wątek na SO. Nie będąc zbyt profesjonalnym w Git i będąc trochę odurzonym podczas pracy nad tym, po prostu szukałem wszystkich podmodułów w folderze dostawców
To dało mi jakieś 4-5 zależności, które się na nich pojawiły. Usunąłem wszystkie te foldery .git i voila, zadziałało. Wiem, że to hack, i tak nie jest zbyt geekowy. O bogowie, proszę, wybaczcie mi! Następnym razem obiecuję przeczytać o gitlinkach i być posłusznym O potężnemu Linusowi Tovalds.
źródło
Na to pytanie udzielono już odpowiedzi, ale pomyślałem, że dodam do mieszanki to, czego dowiedziałem się, gdy otrzymałem te wiadomości.
Mam repozytorium,
playground
które zawiera kilka aplikacji piaskownicy. Dodałem dwie nowe aplikacje z samouczka doplayground
katalogu, klonując repozytorium samouczka. W rezultacie rzeczy git nowych aplikacji wskazywały na repozytorium samouczka, a nie na moje repozytorium. Rozwiązaniem było usunięcie.git
katalogu z każdego z katalogów tych aplikacji, katalogówmv
aplikacji pozaplayground
katalogiem, a następniemv
przywrócenie ich i uruchomieniegit add .
. Potem zadziałało.źródło
Rozwiązałem ten problem, usuwając plik .git z mojego podfolderu.
źródło
Najpierw przejdź do katalogu : vendor / plugins / open_flash_chart_2 i DELETE
NASTĘPNIE :
WYNIK
źródło