„Jesteś na gałęzi, która jeszcze się nie narodziła” podczas dodawania podmodułu git

118

Próbuję dodać kilka podmodułów do mojego .vim/bundleskatalogu, a kiedy próbuję dodać to konkretne repozytorium, Git daje mi dziwny błąd, którego nigdy wcześniej nie widziałem:

$ git submodule add -f git://github.com/derekwyatt/vim-scala.git .vim/bundle/vim-scala
fatal: You are on a branch yet to be born
Unable to checkout submodule '.vim/bundle/vim-scala'

Każdy pomysł, co może to spowodować?

Jeśli sklonuję to samo repozytorium do katalogu testowego (nie za pomocą polecenia submodułu), działa dobrze i tworzy oczekiwane pliki.

matowe b
źródło

Odpowiedzi:

212

Aby naprawić ten błąd, należy usunąć folder z tą samą ścieżką do modułu podrzędnego w .git/modules/katalogu. Ten błąd może wystąpić, gdy adres URL był nieprawidłowy dla modułu podrzędnego po raz pierwszy podczas dodawania modułu podrzędnego.

lisachenko
źródło
2
Dzięki, to załatwiło sprawę. Na początku było trochę nieoczywiste, że skoro klonowałem do .vim/bundle/vim-scalaścieżki do usunięcia, było.git/modules/.vim/bundle/vim-scala
mat b.
2
Jeśli korzystasz z systemu Windows, pamiętaj, że katalog w .git / modules może się nie pojawić, chyba żedir /AH
paxos1977
13
Po usunięciu tego .git/modules/path/to/submodulekatalogu i próbie ponownego dodania modułu podrzędnego pojawia się błąd Następująca ścieżka jest ignorowana przez jeden z plików .gitignore: ścieżka / do / podmoduł .
Drew Noakes
1
@Drew Noakes usuwa .vim / bundle / vim-scala utworzone po pierwszym uruchomieniu modułu podrzędnego git add
Piotr Król
W systemie Windows możesz również użyć opcji Eksploratora Windows (w tym samym miejscu, w którym chcesz zobaczyć rozszerzenia plików), aby zobaczyć ukryte foldery w GUI i je usunąć.
user83358
13

Trzeba dodać submodule wewnątrz istniejącego repo, że repo musi być w stanie dodać & popełnić link submodule, a modułem repo sobie musi mieć popełnić sprawdzić.

Teraz samo repozytorium podmodułów musi być w porządku, jeśli możesz utworzyć zwykły klon w innym miejscu. Jednak wygląda na to, że submodule addnarzeka, jeśli repozytorium jest puste, a klon nie. Ten facet sugeruje, że można to naprawić, po prostu ponownie uruchamiając to samo submodule addpolecenie.

Jeśli repozytorium wewnętrzne nie jest puste, sprawdź repozytorium, które ma zawierać podmoduł. Przejdź do tego samego katalogu, w którym uruchomiłeś git submodule addi uruchom git status, i git branchsprawdź, czy Twoje repozytorium zawierające co najmniej jedną gałąź zostało utworzone i nie jest w dziwnym stanie.

Bezużyteczny
źródło
Sprawdziłem wszystkie te rzeczy. Kiedy sprawdzam żądane repozytorium do innego katalogu, ma wiele plików i mastergałąź. Repozytorium, do którego próbuję dodać to jako moduł podrzędny, znajduje się w mastergałęzi, nie ma oczywistych problemów (status zwraca niektóre zmodyfikowane pliki, ale to wszystko), a najdziwniejsze jest to, że mogę dodać inne moduły podrzędne w porządku do tego repozytorium .
mat b
Również dziwne: po fatalostrzeżeniu z mojego OP, git zostawia pusty katalog w .vim/bundle/vim-scala. Zauważyłem również, że chociaż .gitmodulesjest nietknięty, dodał kilka wierszy odnoszących się do tego repozytorium github.com do .git/config, ale po ich usunięciu nadal otrzymuję ten sam fatalkomunikat o błędzie.
mat b
7
+1 Argh! This guy suggests this is fixable by just running the same submodule add command again.. Walczyłem z tym problemem, próbując znaleźć rozsądną odpowiedź, a to w końcu go rozwiązało. To było dla git 1.8.0 pod MSYS podczas tworzenia modułu podrzędnego z BitBucket, więc jeśli jesteś w takiej samej sytuacji, spróbuj najpierw.
Aaron Newton
U mnie też działało dwukrotne dodawanie. Ale nie rozumiem dlaczego. Jakieś wyjaśnienie?
Elise
Tutaj też dodajemy dwa razy. Chciałbym jednak zrozumieć, dlaczego
Vinicius Dantas
12

Ten błąd może wystąpić, jeśli dodajesz moduł podrzędny, który nie ma mastergałęzi. Jeśli chcesz użyć innej gałęzi podczas dodawania modułu podrzędnego ( developna przykład), możesz użyć następującego polecenia:

git submodule add -b <branch> <repository>
k4nar
źródło
1
W moim przypadku repozytorium było nowo utworzone i dlatego nie miało żadnych plików i gałęzi (było puste), więc git submodule add -b master <repo.git> <folder>pomogło
vladkras
To był mój problem, mój submoduł miał tylko 2 gałęzie, żadna z nich nie masterdziała dla mnie.
Guerneen4
0

Jak wspomniał @ drew-noakes, może to być spowodowane próbą dodania modułu podrzędnego przy użyciu nazwy katalogu wymienionej w pliku .gitignore .

John McFarlane
źródło