Jak mogę określić gałąź / tag podczas dodawania submodułu Git?

756

Jak git submodule add -bdziała

Po dodaniu podmodułu z określoną gałęzią nowe sklonowane repozytorium (po git submodule update --init) będzie w określonym zatwierdzeniu, a nie sama gałąź ( git statusw podmodule widnieje „Obecnie nie w żadnej gałęzi”).

Nie mogę znaleźć żadnych informacji na temat .gitmoduleslub .git/configo oddziale modułem lub jakichkolwiek konkretnych popełnił, tak jak robi się to postać Git?

Czy można także podać tag zamiast gałęzi?

Używam wersji 1.6.5.2.

Ivan
źródło
3
Jeśli masz istniejący podmoduł, który jeszcze nie śledzi gałęzi , ale chcesz, aby teraz śledził gałąź ... zobacz moją odpowiedź poniżej
VonC

Odpowiedzi:

745

Uwaga: Git 1.8.2 dodał możliwość śledzenia gałęzi. Zobacz niektóre odpowiedzi poniżej.


Trochę mylące jest przyzwyczajenie się do tego, ale submoduły nie znajdują się na gałęzi. Są, jak mówisz, tylko wskaźnikiem do konkretnego zatwierdzenia repozytorium submodułu.

Oznacza to, że gdy ktoś inny sprawdzi twoje repozytorium lub ściągnie kod i wykona aktualizację podmodułu git, podmoduł jest sprawdzany do tego konkretnego zatwierdzenia.

Jest to świetne w przypadku submodułu, który nie zmienia się często, ponieważ wtedy wszyscy w projekcie mogą mieć ten moduł w tym samym zatwierdzeniu.

Jeśli chcesz przenieść submoduł do określonego znacznika:

cd submodule_directory
git checkout v1.0
cd ..
git add submodule_directory
git commit -m "moved submodule to v1.0"
git push

Następnie robi to inny programista, który chce zmienić katalog podmodułu na ten tag

git pull
git submodule update --init

git pullzmiany, na które wskazuje ich katalog podmodułów. git submodule updatefaktycznie łączy się z nowym kodem.

djacobs7
źródło
8
To bardzo dobre wytłumaczenie, dzięki! I oczywiście, po przeczytaniu twojej odpowiedzi, zdałem sobie sprawę, że zatwierdzenie jest zapisane w samym submodule (submodule / .git / HEAD).
Ivan
4
To nie wydaje się działać na git 1.7.4.4. cd my_submodule; git checkout [ref in submodule's repositorydaje fatal: reference is not a tree: .... To tak, jakby gitdziałało tylko w repozytorium nadrzędnym.
James A. Rosen
3
Dobrze jest używać submodułów git nawet w przypadku często aktualizowanych projektów. Jądro Linuksa używa go i nie jest tak źle
10
Czy git checkout v1.0oddział lub tag?
Bernhard Döbler
8
Rozważ znacznik jako czytelny dla człowieka alias zatwierdzenia. A zatwierdzenie to zestaw określonego stanu dla każdego pliku. Gałąź jest zasadniczo tym samym, z wyjątkiem tego, że możesz wprowadzać w niej zmiany.
deadbabykitten
656

Chciałbym tutaj dodać odpowiedź, która jest tak naprawdę konglomeratem innych odpowiedzi, ale myślę, że może być bardziej kompletna.

Wiesz, że masz submoduł Git, kiedy masz te dwie rzeczy.

  1. Twój .gitmoduleswpis jest taki:

    [submodule "SubmoduleTestRepo"]
        path = SubmoduleTestRepo
        url = https://github.com/jzaccone/SubmoduleTestRepo.git
    
  2. W repozytorium Git masz obiekt submodułowy (w tym przykładzie o nazwie SubmoduleTestRepo). GitHub pokazuje je jako obiekty „submodule”. Lub wykonaj git submodule statusz linii poleceń. Obiekty submodułu Git są specjalnymi rodzajami obiektów Git i przechowują informacje SHA dla określonego zatwierdzenia.

    Ilekroć to zrobisz git submodule update, zapełni twój podmoduł treścią z zatwierdzenia. Wie, gdzie znaleźć zatwierdzenie ze względu na informacje w .gitmodules.

    Teraz -bwystarczy dodać jedną linię do .gitmodulespliku. Tak więc, zgodnie z tym samym przykładem, wyglądałoby to tak:

    [submodule "SubmoduleTestRepo"]
        path = SubmoduleTestRepo
        url = https://github.com/jzaccone/SubmoduleTestRepo.git
        branch = master
    

    Uwaga: w nazwie obsługiwana jest tylko nazwa gałęzi .gitmodules, ale SHA i TAG nie są obsługiwane! (zamiast tego zatwierdzenie gałęzi dla każdego modułu można śledzić i aktualizować za pomocą „ git add .”, na przykład „i ” git add ./SubmoduleTestRepo, i nie trzeba za .gitmoduleskażdym razem zmieniać pliku)

    Obiekt submodułu nadal wskazuje na określony zatwierdzenie. Jedyną rzeczą, którą -bkupuje ta opcja, jest możliwość dodania --remoteflagi do aktualizacji zgodnie z odpowiedzią Vogelli:

    git submodule update --remote
    

    Zamiast zapełniać zawartość submodułu zatwierdzeniem wskazanym przez podmoduł, zastępuje zatwierdzenie najnowszym zatwierdzeniem w gałęzi master, a następnie zapełnia submoduł tym zatwierdzeniem. Można to zrobić w dwóch krokach przez odpowiedź djacobs7. Ponieważ zaktualizowałeś zatwierdzenie, na które wskazuje obiekt submodułu, musisz zatwierdzić zmieniony obiekt submodułu w swoim repozytorium Git.

    git submodule add -bnie jest jakimś magicznym sposobem na aktualizowanie wszystkiego w oddziale. Po prostu dodaje informacje o gałęzi w .gitmodulespliku i daje opcję aktualizacji obiektu submodułu do najnowszego zatwierdzenia określonej gałęzi przed wypełnieniem go.

Johnny Z
źródło
14
Ta odpowiedź powinna mieć więcej głosów pozytywnych. Czytałem wiele postów z ostatniego dnia i to wyjaśnia całe zamieszanie. Pochodzący ze świata SVN i używając zewnętrznych - chce się wierzyć, że śledzenie gałęzi submodułowych git w magiczny sposób aktualizuje wszystko z gałęzi - ale to nieprawda! Musisz je wyraźnie zaktualizować! Jak wspomniałeś, musisz zatwierdzić zmienione obiekty submodułu.
dtmland
12
Czy to śledzenie gałęzi działa również z tagami ? Zamiast oddziału podałem tag w swoim, .gitmodulesa po zrobieniu $ git submodule update --init --remote TestModulewystąpił błąd mówiąc: fatal: Needed a single revisioni Unable to find current origin/TestTag revision in submodule path 'TestModule'. Działa to z prawdziwą gałęzią. Czy w ogóle można podać znacznik .gitmodulesbez konieczności podawania dokładnego zatwierdzenia?
Hhut
5
To nie działa. Zaktualizowałem hash .gitmodulesi pobiegłem git submodule updatei nic się nie stało?
CMCDragonkai
2
Jakoś to nie działa dla mnie. W przypadku identyfikatora zatwierdzenia SHA zawsze pojawia się błąd „Nie mogę znaleźć bieżącej wersji (dwukrotnie sprawdziłem numer wersji HEAD i jej poprawność). Jeśli jednak
użyję wzorca,
2
Wpisanie SHA do atrybutu oddziału też dla mnie nie działa. Ten zwyczaj jest również nie poparte docs: git-scm.com/docs/gitmodules
Jakub Bocheński
339

(Wprowadzono Git 2.22, drugi kwartał 2019 r. git submodule set-branch --branch aBranch -- <submodule_path>)

Zauważ, że jeśli masz istniejący podmoduł, który nie jest śledzi jeszcze gałęzi , to ( jeśli masz git 1.8.2+ ):

  • Upewnij się, że repozytorium nadrzędne wie, że jego podmoduł śledzi teraz gałąź:

    cd /path/to/your/parent/repo
    git config -f .gitmodules submodule.<path>.branch <branch>
    
  • Upewnij się, że twój moduł podrzędny znajduje się najpóźniej w tej gałęzi:

    cd path/to/your/submodule
    git checkout -b branch --track origin/branch
      # if the master branch already exist:
      git branch -u origin/master master
    

         (gdzie „origin” to nazwa zdalnego repozytorium nadrzędnego z modułem został sklonowany z.
         A git remote -vw środku, że modułem będzie go wyświetlić. Zazwyczaj jest to „pochodzenie”)

  • Nie zapomnij zapisać nowego stanu swojego modułu podrzędnego w repozytorium nadrzędnym:

    cd /path/to/your/parent/repo
    git add path/to/your/submodule
    git commit -m "Make submodule tracking a branch"
    
  • Późniejsza aktualizacja tego podmodułu będzie wymagać użycia --remoteopcji:

    # update your submodule
    # --remote will also fetch and ensure that
    # the latest commit from the branch is used
    git submodule update --remote
    
    # to avoid fetching use
    git submodule update --remote --no-fetch 
    

Zauważ, że za pomocą Git 2.10+ (III kwartał 2016) możesz użyć „ .” jako nazwy oddziału:

Nazwa oddziału jest rejestrowana jako submodule.<name>.branchw .gitmodulesdo update --remote.
Specjalna wartość. jest używana do wskazania, że ​​nazwa gałęzi w submodule powinna być taka sama jak bieżąca gałąź w bieżącym repozytorium .

Ale, jak skomentowano przez LubosD

Dzięki git checkout, jeśli następująca nazwa oddziału to „ .”, zabije to twoją nieprzyjętą pracę!
Posługiwać sięgit switch zamiast tego.

Oznacza to, że Git 2.23 (sierpień 2019 r.) Lub więcej.

Zobacz „ Mylić przezgit checkout


Jeśli chcesz zaktualizować wszystkie swoje podmoduły według gałęzi:

    git submodule update --recursive --remote

Zauważ, że wynikiem, dla każdego zaktualizowanego podmodułu, prawie zawsze będzie odłączony HEAD , jak zauważa Dan Cameron swojej odpowiedzi .

( Clintm zauważa w komentarzach, że jeśli uruchomisz, git submodule update --remotea wynikowy sha1 będzie taki sam, jak gałąź, w której aktualnie znajduje się podmoduł, nic nie zrobi i pozostawi submoduł nadal „w tej gałęzi”, a nie w stanie odłączonej głowy. )

Aby upewnić się, że gałąź jest faktycznie wyewidencjonowana (i to nie zmodyfikuje SHA1 specjalnego wpisu reprezentującego submoduł dla repozytorium nadrzędnego), sugeruje:

git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; git switch $branch'

Każdy podmoduł nadal będzie odwoływał się do tego samego SHA1, ale jeśli dokonasz nowych zatwierdzeń, będziesz mógł je wypchnąć, ponieważ będą do nich odnosić gałęzie, które chcesz śledzić.
Po tym wypchnięciu w podmodule nie zapomnij wrócić do repozytorium nadrzędnego, dodać, zatwierdzić i wcisnąć nowy SHA1 dla tych zmodyfikowanych podmodułów.

Zwróć uwagę na użycie $toplevel, zalecanego w komentarzach przez Aleksandra Pogrebnyak .
$toplevelzostał wprowadzony w git1.7.2 w maju 2010 r .: commit f030c96 .

zawiera bezwzględną ścieżkę do katalogu najwyższego poziomu (gdzie .gitmodulesjest).

dtmlanddodaje w komentarzach :

Skrypt foreach nie pobierze podmodułów, które nie podążają za gałęzią.
Jednak to polecenie daje obie możliwości:

 git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; [ "$branch" = "" ] && git checkout master || git switch $branch' –

To samo polecenie, ale łatwiejsze do odczytania:

git submodule foreach -q --recursive \
    'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; \
     [ "$branch" = "" ] && \
     git checkout master || git switch $branch' –

umläute udoskonala komendę dtmland w uproszczonej wersji w komentarzach :

git submodule foreach -q --recursive 'git switch $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'

wiele linii:

git submodule foreach -q --recursive \
  'git switch \
  $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'

Przed Git 2.26 (Q1 2020) pobieranie, które ma rekurencyjnie pobierać aktualizacje w podmodułach, nieuchronnie wytwarza ryzę wyjściową i trudno jest dostrzec komunikaty o błędach.

Nauczono tego polecenia, aby wyliczać submoduły, które miały błędy na końcu operacji .

Zobacz zatwierdzenie 0222540 (16 stycznia 2020 r.) Przez Emily Shaffer ( nasamuffin) .
(Połączone przez Junio ​​C Hamano - gitster- w commit b5c71cc , 05 lutego 2020)

fetch: podkreśl niepowodzenie podczas pobierania podmodułu

Podpisano: Emily Shaffer

W przypadkach, gdy pobieranie podmodułu kończy się niepowodzeniem, gdy jest wiele podmodułów, błąd z pojedynczego nieudanego pobierania podmodułu jest zakopany pod działaniem innych podmodułów, jeśli więcej niż jedno pobranie się powróciło fetch-by-oid.
Wywołaj awarię późno, aby użytkownik wiedział, że coś poszło nie tak i gdzie .

Ponieważ fetch_finish()jest wywoływany tylko synchronicznie przez run_processes_parallel,muteksowanie, nie jest wymagane w pobliżu submodules_with_errors.

VonC
źródło
1
Pytanie: jeśli mam folder subModule1 i chcę śledzić gałąź master, to wynikowe polecenie mogłoby wyglądać tak: git config -f .gitmodules submodule.subModule1.branch master
BraveNewMath
1
foreachSkrypt nie będzie zależeć na sztywno <path>, jeśli zastąpi <path>się $toplevel/.
Alexander Pogrebnyak
1
foreachSkrypt nie submodułów kasowych, które nie są następujących gałęzi. Jednak to polecenie daje oboje:git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; [ "$branch" = "" ] && git checkout master || git checkout $branch'
dtmland
2
Oto uproszczona wersja skryptu @ dtmland:git submodule foreach -q --recursive 'git checkout $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
umläute,
1
Och! W rzeczywistości skrypt Foreach nie jest potrzebny. Musimy wykonać aktualizację submodułu za pomocą przełącznika --merge lub --rebase: git submodule update --remote --mergelub git submodule update --remote --rebase. Te polecenia wykonują śledzenie zdalnej gałęzi.
GregTom
206

Git 1.8.2 dodał możliwość śledzenia gałęzi.

# add submodule to track master branch
git submodule add -b branch_name URL_to_Git_repo optional_directory_rename

# update your submodule
git submodule update --remote 

Zobacz także podmoduły Git

Vogella
źródło
4
Czy dotyczy to również tagów?
ThorSummoner,
1
W jaki sposób dodanie submodułu w taki sposób wpływa na .gitmodulesplik?
Eugene
1
Dzięki właśnie użyłem informacji o, aby pomóc mi utworzyć folder submodułu, który jest zsynchronizowany ze stroną gh-pages GitHub: pełny przykład na github.com/o2platform/fluentnode/issues/22
Dinis Cruz
4
Można zablokować do tagu z git submodule add -b tags/<sometag> <url>której można zobaczyć jak linia branch = tags/<sometag>w.gitmodules
KCD
9
@KCD Która wersja git może to zrobić za pomocą tagów. Mój nie działa?
CMCDragonkai
58

Przykład korzystania z podmodułów Git.

  1. Utwórz nowe repozytorium
  2. Następnie sklonuj kolejne repozytorium jako submoduł
  3. Mamy wtedy ten podmoduł, który używa tagu o nazwie V3.1.2
  4. A potem popełniamy.

A to wygląda trochę tak:

git init 
vi README
git add README
git commit 
git submodule add git://github.com/XXXXX/xxx.yyyy.git stm32_std_lib
git status

git submodule init
git submodule update

cd stm32_std_lib/
git reset --hard V3.1.2 
cd ..
git commit -a

git submodule status 

Może to pomaga (chociaż używam tagu, a nie gałęzi)?

Johan
źródło
4
To w zasadzie ta sama odpowiedź co djacobs7, ale i tak dzięki :)
Ivan
1
Czy powinieneś być w stanie dokonać zmiany po swoim git reset --hard V3.1.2? Po prostu dostaję „nic do zatwierdzenia” git statusw katalogu nadrzędnym.
Nick Radford,
1
@Ivan: Czy możesz wyjaśnić, jak to jest to samo, co odpowiedź djacobs7? O ile widzę, jego odpowiedź nawet nie zawiera polecenia „submodule add”, zamiast tego repo jest dodawane bezpośrednio, bez żadnego łącza do oryginalnego repozytorium git modułu. Przynajmniej kiedy spróbowałem tego podejścia, w .gitmodules nie było linku.
Michel Müller,
Odpowiedź djacobs7 nie obejmuje całego wyjaśnienia, poczynając od dodania submodułu. Zakłada, że ​​już go masz.
CodeMonkey
czy to nie dodaje całej zawartości submodułu jako śledzonych obiektów do głównego repozytorium?
user1312695
38

Z mojego doświadczenia wynika, że ​​przełączanie gałęzi w superprojekcie lub przyszłych kasach nadal spowoduje odłączenie HEADs submodułów, niezależnie od tego, czy submoduł jest poprawnie dodany i śledzony (tj. Odpowiedzi @ djacobs7 i @Johnny Z).

I zamiast ręcznego sprawdzania poprawnej gałęzi ręcznie lub za pomocą skryptu można użyć podmodułu git foreach .

Spowoduje to sprawdzenie pliku konfiguracyjnego modułu podrzędnego pod kątem właściwości gałęzi i pobranie zestawu gałęzi.

git submodule foreach -q --recursive 'branch="$(git config -f <path>.gitmodules submodule.$name.branch)"; git checkout $branch'

Dan Cameron
źródło
Miły. +1. Uwzględniłem twoje polecenie w mojej odpowiedzi .
VonC
33

Podmoduły Git są nieco dziwne - zawsze działają w trybie „odłączonej głowy” - nie aktualizują się do najnowszego zatwierdzenia w gałęzi, jak można się spodziewać.

Ma to jednak sens, gdy się nad tym zastanowić. Załóżmy, że tworzę repozytorium foo z paskiem podmodułu . Pcham moje zmiany i mówię, aby sprawdzić zatwierdzić a7402be z repozytorium foo .

Następnie wyobraź sobie, że ktoś dokonuje zmiany paska repozytorium dokonuje zanim będziesz mógł dokonać klonowania.

Po wyrejestrowaniu zatwierdzamy a7402be z repozytorium foo , oczekujesz tego samego kodu, który wypchnąłem. Właśnie dlatego submoduły nie aktualizują się, dopóki nie wydasz wyraźnego polecenia, a następnie nie wykonasz nowego zatwierdzenia.

Osobiście uważam, że podmoduły są najbardziej zagmatwaną częścią Git. Istnieje wiele miejsc, w których lepiej wyjaśnić submoduły niż ja. Polecam Pro Git autorstwa Scott Chacon.

Neall
źródło
Myślę, że już czas zacząć czytać książki o gitach, dzięki za rekomendację.
Ivan
Przepraszam, ale nie wyjaśniłeś, czy dostaniesz to samo, co zepchnąłeś na a7402be, czy nie dostaniesz najnowszej wersji paska, chociaż twoja wersja foo. Dzięki :)
mmm
6
Problem polega na tym, że powinna istnieć opcja powiedzenia „zachowaj ten submoduł w gałęzi X”, aby jeśli chcesz, aby automatycznie się zaktualizował, możesz to zrobić. Sprawiłoby, że podmoduły byłyby znacznie bardziej przydatne do zarządzania np. Instalacją WordPress, w której wszystkie wtyczki są repozytoriami Git, bez konieczności ponownego zapisywania superprojektu dla każdej aktualizowanej wtyczki.
jerclarke
@jeremyclark git clone git://github.com/git/git.giti wcisnąć tę funkcję ...? = D
Alastair,
1
Najbardziej mylącą częścią Git jest to, że nawet po ponad dekadzie rozwoju narzędzie, które ma pomóc mi w wykonywaniu mojej pracy, nadal ma tak złe wrażenia z użytkowania, a z zupełnie innych powodów ludzie lubią pokazywać palec Git wszystkim czas.
0xC0000022L,
20

Aby przełączyć gałąź dla submodułu (zakładając, że masz już submoduł jako część repozytorium):

  • cd do rootowania twojego repozytorium zawierającego submoduły
  • Otwórz .gitmodulesdo edycji
  • Dodaj wiersz poniżej path = ...i url = ...mówi branch = your-branch: dla każdego podmodułu; zapisz plik .gitmodules.
  • następnie bez zmiany katalogu $ git submodule update --remote

... to powinno pobrać najnowsze zatwierdzenia dla określonej gałęzi, dla każdego zmodyfikowanego podmodułu.

Inżynier
źródło
10

Mam to w moim pliku .gitconfig. Jest to nadal wersja robocza, ale na razie okazała się przydatna. Pomaga mi zawsze ponownie podłączyć submoduły do ​​ich gałęzi.

[alias]

######################
#
#Submodules aliases
#
######################


#git sm-trackbranch : places all submodules on their respective branch specified in .gitmodules
#This works if submodules are configured to track a branch, i.e if .gitmodules looks like :
#[submodule "my-submodule"]
#   path = my-submodule
#   url = [email protected]/my-submodule.git
#   branch = my-branch
sm-trackbranch = "! git submodule foreach -q --recursive 'branch=\"$(git config -f $toplevel/.gitmodules submodule.$name.branch)\"; git checkout $branch'"

#sm-pullrebase :
# - pull --rebase on the master repo
# - sm-trackbranch on every submodule
# - pull --rebase on each submodule
#
# Important note :
#- have a clean master repo and subrepos before doing this !
#- this is *not* equivalent to getting the last committed 
#  master repo + its submodules: if some submodules are tracking branches 
#  that have evolved since the last commit in the master repo,
#  they will be using those more recent commits !
#
#  (Note : On the contrary, git submodule update will stick 
#to the last committed SHA1 in the master repo)
#
sm-pullrebase = "! git pull --rebase; git submodule update; git sm-trackbranch ; git submodule foreach 'git pull --rebase' "

# git sm-diff will diff the master repo *and* its submodules
sm-diff = "! git diff && git submodule foreach 'git diff' "

#git sm-push will ask to push also submodules
sm-push = push --recurse-submodules=on-demand

#git alias : list all aliases
#useful in order to learn git syntax
alias = "!git config -l | grep alias | cut -c 7-"
Pascal T.
źródło
3

Używamy Quacka aby pobrać określony moduł z innego repozytorium Git. Musimy pobrać kod bez całej bazy kodu dostarczonego repozytorium - potrzebujemy bardzo konkretnego modułu / pliku z tego ogromnego repozytorium i należy go aktualizować za każdym razem, gdy uruchamiamy aktualizację.

Osiągnęliśmy to w ten sposób:

Utwórz konfigurację

name: Project Name

modules:
  local/path:
    repository: https://github.com/<username>/<repo>.git
    path: repo/path
    branch: dev
  other/local/path/filename.txt:
    repository: https://github.com/<username>/<repo>.git
    hexsha: 9e3e9642cfea36f4ae216d27df100134920143b9
    path: repo/path/filename.txt

profiles:
  init:
    tasks: ['modules']

Przy powyższej konfiguracji tworzy jeden katalog z dostarczonego repozytorium GitHub, jak określono w pierwszej konfiguracji modułu, a drugi ma pobrać i utworzyć plik z danego repozytorium.

Inni programiści muszą tylko uruchomić

$ quack

I pobiera kod z powyższych konfiguracji.

Uwielbiam Sharmę
źródło
2

Jedynym efektem wyboru gałęzi dla submodułu jest to, że za każdym razem, gdy przekażesz --remoteopcję w git submodule updatewierszu poleceń, Git będzie sprawdzał w odłączonym trybie HEAD (jeśli --checkoutwybrano zachowanie domyślne ) ostatnie zatwierdzenie dla tej wybranej zdalnej gałęzi.

Należy zachować szczególną ostrożność podczas korzystania z tej funkcji zdalnego śledzenia gałęzi dla submodułów Git, jeśli pracujesz z płytkimi klonami submodułów. Gałąź wybrana do tego celu w ustawieniach submodułu NIE JEST tą, która zostanie sklonowana podczas git submodule update --remote. Jeśli przekażesz również --depthparametr i nie poinstruujesz Gita o tym, którą gałąź chcesz sklonować - a tak naprawdę nie możesz w git submodule updatewierszu poleceń !! - zachowa się domyślnie, jak wyjaśniono w git-clone(1)dokumentacji, git clone --single-branchgdy --branchbrakuje parametru jawnego , a zatem sklonuje tylko gałąź podstawową .

Nic dziwnego, że po etapie klonowania wykonanym przez git submodule updatepolecenie, w końcu spróbuje sprawdzić najnowsze zatwierdzenie dla zdalnej gałęzi, którą wcześniej skonfigurowałeś dla podmodułu, a jeśli nie jest to podstawowa, nie jest ona częścią twój lokalny płytki klon i dlatego zawiedzie

fatal: Potrzebował jednej zmiany

Nie można znaleźć aktualnego źródła / wersji NotThePrimaryBranch w ścieżce submodułu „mySubmodule”

LuKePicci
źródło
jak naprawić błąd - Potrzebowałem jednej zmiany?
NidhinSPradeep
-1

git submodule dodaj -b rozwijaj --name nazwa-gałęzi - https: //branch.git

Passiondroid
źródło