Mam repozytorium git ~/.janus/
z kilkoma podmodułami. Chcę dodać podmoduł ~/.janus/snipmate-snippets/snippets/
, ale po uruchomieniu git submodule add <[email protected]:...>
w snipmate-snippets
katalogu pojawia się następujący komunikat o błędzie:
You need to run this command from the toplevel of the working tree.
Pytanie brzmi: jak dodać submoduł do snipmate-snippets
katalogu?
git
git-submodules
Robert Audi
źródło
źródło
git submodule add -b <branch> <url> <relative_path_4m_root>
Odpowiedzi:
Wchodzisz
~/.janus
i biegasz:Jeśli potrzebujesz więcej informacji o submodułach (lub ogólnie git), ProGit jest bardzo przydatny.
źródło
'subprojects' already exists in the index
(użyłem podprojektów jako nazwy katalogu) . Zamiast tego pomogła odpowiedź VonC poniżej, tj. Zrobieniecd subprojects
, a następniegit submodule add <get@github …>
bez ścieżki.Zauważ, że zaczynając od git1.8.4 (lipiec 2013), nie musisz już wracać do katalogu głównego.
( Bouke Versteegh komentuje , że nie musisz używać
/.
, ponieważ wsnippets/.
:snippets
wystarczy)Zobacz zatwierdzenie 091a6eb0feed820a43663ca63dc2bc0bb247bbae :
Zależy od zatwierdzenia 12b9d32790b40bf3ea49134095619700191abf1f
źródło
/.
nie jest konieczne, git bez niego utworzy fragmenty katalogu.Relative path can only be used from the toplevel of the working tree
. Robięgit submodule add ../../../functest
Relative path can only be used from the toplevel of the working tree
”) nie jest tym z pierwotnego pytania („You need to run this command from the toplevel of the working tree
”)Miałem podobny problem, ale zamalowałem się w kącie za pomocą narzędzi GUI.
Miałem podprojekt z kilkoma plikami, które do tej pory kopiowałem, zamiast sprawdzać własne repozytorium git. Utworzyłem repozytorium w podfolderze, byłem w stanie zatwierdzić, wypchnąć itp. W porządku. Ale w repozytorium nadrzędnym podfolder nie był traktowany jako podmoduł, a jego pliki były nadal śledzone przez repozytorium nadrzędne - to nic dobrego.
Aby wyjść z tego bałaganu, musiałem powiedzieć Gitowi, aby przestał śledzić podfolder (bez usuwania plików):
Potem musiałem powiedzieć, że jest tam submoduł (którego nie możesz zrobić, jeśli cokolwiek jest obecnie śledzone przez git):
Aktualizacja
Idealny sposób poradzenia sobie z tym wymaga jeszcze kilku kroków. Najlepiej byłoby, gdyby istniejące repo zostało przeniesione do własnego katalogu, wolnego od nadrzędnych modułów git, zatwierdzone i wypchnięte, a następnie dodane jako podmoduł:
Spowoduje to sklonowanie repozytorium git jako submodułu - co obejmuje standardowe kroki klonowania, ale także kilka innych, bardziej niejasnych kroków konfiguracji, które git podejmuje w twoim imieniu, aby uruchomić ten podmoduł. Najważniejszą różnicą jest to, że umieszcza tam prosty plik .git zamiast katalogu .git, który zawiera ścieżkę do miejsca, w którym mieszka prawdziwy katalog git - zazwyczaj w katalogu głównym projektu nadrzędnego .git / modules / jslib.
Jeśli nie zrobisz tego w ten sposób, zadziałają dla ciebie dobrze, ale gdy tylko zaangażujesz i popchniesz rodzica, a inny deweloper pójdzie pociągnąć tego rodzica, po prostu utrudniłeś im życie. Bardzo trudno będzie im powielić strukturę, którą masz na swoim komputerze, o ile masz pełny katalog .git w podfolderze katalogu zawierającego własny katalog .git.
Podmoduł move, push, git add jest najczystszą opcją.
źródło
Dla tych z was, którzy podzielają moją dziwną zamiłowanie do ręcznej edycji plików konfiguracyjnych, dodanie (lub zmodyfikowanie) również załatwi sprawę.
.git / config (konfiguracja osobista)
.gitmodules ( zatwierdzona wspólna konfiguracja)
Zobacz to również - różnica między .gitmodules a określaniem submodułów w .git / config?
źródło
jednoskładnikowy skrypt bashowy, aby ułatwić odpowiedź Chrisa powyżej, ponieważ malowałem się również w kącie, używając aktualizacji Vundle do moich skryptów .vim.
DEST
jest ścieżką do katalogu zawierającego twoje submoduły. Zrób to po zrobieniugit rm -r $DEST
Twoje zdrowie
źródło