Po sklonowaniu zdalnego repozytorium nie pokazuje żadnej zdalnej gałęzi za pomocą opcji -a. Jaki może być problem? Jak to debugować? W tym fragmencie dwa zdalne gałęzie nie są pokazane:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
$ cd pythonwebkit
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
$ git --version
git version 1.8.3.1
Wypróbowałem to samo polecenie na innym komputerze, działa dobrze:
$ git clone --depth 1 git://git.savannah.gnu.org/pythonwebkit.git
Receiving objects: 100% (186886/186886), 818.91 MiB | 3.44 MiB/s, done.
$ cd pythonwebkit/
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/debian
remotes/origin/master
remotes/origin/python_codegen
$ git --version
git version 1.7.1
Próbowałem również sklonować inne repozytorium, działa dobrze. Chociaż mogę spróbować ponownie na tej maszynie, ale lepiej byłoby wiedzieć, co jest nie tak.
Wszelkie sugestie i wskazówki będą mile widziane.
Edycja: Podsumowanie odpowiedzi: Od wersji 1.8.3.2 gita "--depth" i "--no-single-branch" muszą być używane razem, aby uzyskać takie samo zachowanie jak poprzednio. Jest to uważane za naprawę błędu.
git
branch
shallow-clone
minghua
źródło
źródło
master
to twój lokalny oddział.remotes/origin/master
to odpowiednia gałąź zdalna. O co właściwie chodzi?git branch -avv
git clone --depth=1 --no-single-branch
, właśnie tego potrzebuję w większości przypadków.Odpowiedzi:
Zachowanie jest poprawne, po ostatniej wersji master-branch jest (ponieważ jest to HEAD głównego pilota) jedyną zdalną gałąź w repozytorium:
Pełny klon oferuje nowe (wszystkie) gałęzie:
Płytkie klony
Ze względu na krótki opis w dokumentacji technicznej „
git-clone --depth 20 repo
[...] skutkuje łańcuchami zatwierdzeń o długości co najwyżej 20”. Dlatego płytki klon powinien zawierać żądaną głębokość zatwierdzeń z czubka gałęzi.Ponieważ - dodatkowo - dokumentacja
git clone
dla--single-branch
opcji opisuje:Dlatego płytkie klon ( z tej głębokości -Opcja) jedynie pobiera tylko jeden pojedynczy oddział (w swojej żądanej głębokości).
Niestety obie opcje (
--depth
i--single-branch
) były w przeszłości błędne, a użycie płytkich klonów implikuje nierozwiązane problemy (jak możesz przeczytać w linku, który zamieściłem powyżej), co jest spowodowane podanym przepisaniem historii. Ogólnie prowadzi to do nieco skomplikowanego zachowania w szczególnych przypadkach.źródło
fetch = +refs/heads/*:refs/remotes/origin/*
I uruchamiającgit fetch --depth 1
(bez--tags
). Możemy również dodać określone tagi do pobrania, używając konfiguracji, takich jakfetch = +refs/tags/v2.0.0:refs/tags/v2.0.0
.Po wykonaniu płytkiego klona, aby móc pobrać inne gałęzie ze zdalnego ,
Uruchom (dzięki @jthill):
Następnie zrób
git fetch -v
Wreszcie
git checkout the-branch-i-ve-been-looking-for
Krok 1 można również wykonać ręcznie, edytując
.git/config
.Na przykład zmień następujący wiersz z:
do (zamiast
master
z*
):źródło
git remote set-branches origin '*'
dla wszystkich gałęzi, zamień nazwę*
gałęzi na jedną.-vvv
znaczy wgit fetch -vvv
? Nie znalazłem żadnych informacji na ten temat w dokumencie git-fetchverbosity
lub . To nie jest metoda.debug
git
fetch
Od przeczytania odpowiedzi i komentarza z @jthill, najlepiej działało dla mnie użycie
set-branches
opcji wgit remote
poleceniu:Zmienia to listę gałęzi śledzonych przez nazwanego pilota, dzięki czemu możemy pobrać i wyrejestrować tylko wymaganą gałąź.
źródło
git remote set-branches --add origin 'remote_branch_name'
tak, aby nowa gałąź była dodatkiem do istniejących, zamiast zastępować ją na liście gałęzi (lub wzorców gałęzi) pilota do pobrania w pliku .git / config.'
jest ważny wgit remote set-branches --add origin 'remote_branch_name'