Jak pobrać wszystkie gałęzie Git
Sklonowałem repozytorium Git, które zawiera około pięciu gałęzi. Jednak kiedy robię git branch
widzę tylko jedną z nich:
$ git branch
* master
Wiem, że mogę zrobić git branch -a
, aby zobaczyć wszystkie gałęzie, ale jak mam wyciągnąć wszystkie gałęzie lokalnie, więc kiedy to zrobię git branch
, pokazuje to co następuje?
$ git branch
* master
* staging
* etc...
22 answers
Możesz pobrać jedną gałąź ze wszystkich pilotów w następujący sposób:
git fetch --all
fetch
aktualizuje lokalne kopie zdalnych gałęzi, więc jest to zawsze bezpieczne dla lokalnych gałęzi , ale :
fetch
nie będzie aktualizować lokalnych gałęzi (które śledzą zdalnych gałęzi); jeśli chcesz zaktualizować swoje lokalne gałęzie, nadal musisz wyciągnąć każdą gałąź.fetch
nie utworzy lokalnych oddziałów (które śledzą zdalnie gałęzie), trzeba to zrobić ręcznie. Jeśli chcesz wylistować wszystkie zdalne gałęzie:git branch -a
Do zaktualizuj lokalne gałęzie, które śledzą odległe gałęzie:
git pull --all
Jednak może to być wciąż niewystarczające. Będzie działać tylko dla lokalnych gałęzi, które śledzą zdalne gałęzie. Aby śledzić wszystkie zdalne gałęzie wykonaj ten oneliner przed git pull --all
:
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
TL; wersja DR
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
(wydaje się, że pull pobiera wszystkie gałęzie ze wszystkich piloty, ale zawsze pobieram najpierw dla pewności)
Uruchom pierwsze polecenie tylko wtedy, gdy na serwerze są zdalne gałęzie, które nie są śledzone przez lokalne gałęzie.
P. S. AFAIK git fetch --all
i git remote update
są równoważne.
Komentarz Kamila Szota , który 74 (przynajmniej) osoby uznały za przydatny.
Musiałem użyć:
for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done
Ponieważ twój kod stworzył lokalne gałęzie o nazwie
origin/branchname
i Dostawałem " refname "pochodzenie/branchname" jest niejednoznaczne, gdy I / align = "left" /
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-31 19:04:49
Do listy zdalnych gałęzi:git branch -r
Możesz sprawdzić je jako lokalne oddziały z:git checkout -b LocalName origin/remotebranchname
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-26 20:33:37
Będziesz musiał utworzyć lokalne gałęzie śledzące gałęzie zdalne.
Zakładając, że masz tylko jeden zdalny o nazwie origin
, Ten fragment utworzy lokalne gałęzie dla wszystkich zdalnych śledzenia:
for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##origin/} $b; done
Po tym, git fetch --all
zaktualizuje wszystkie lokalne kopie zdalnych gałęzi.
Również, git pull --all
zaktualizuje lokalne gałęzie śledzenia, ale w zależności od lokalnych zatwierdzeń i ustawienia opcji konfiguracji "merge" może to spowodować utworzenie zmiany scalającej, przewinięcie do przodu lub niepowodzenie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-28 15:52:59
Jeśli zrobisz:
git fetch origin
Wtedy wszyscy będą tam lokalnie. Jeśli następnie wykonasz:
git branch -a
Zobaczysz je jako remotes / origin / branch-name. Ponieważ są tam lokalnie, możesz z nimi robić, co chcesz. Na przykład:
git diff origin/branch-name
Lub
git merge origin/branch-name
Lub
git checkout -b some-branch origin/branch-name
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-29 19:46:40
$ git remote update
$ git pull --all
Zakłada się, że wszystkie gałęzie są śledzone.
Jeśli nie są możesz odpalić to w Bash:
for remote in `git branch -r `; do git branch --track $remote; done
Następnie uruchom polecenie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-31 19:06:41
Użyj git fetch && git checkout RemoteBranchName
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-31 19:20:02
Bash dla pętli nie działał dla mnie, ale to zrobił dokładnie to, co chciałem. Wszystkie gałęzie z mojego pochodzenia miały tę samą nazwę lokalnie.
git checkout --detach
git fetch origin '+refs/heads/*:refs/heads/*'
Edited: See Mike DuPont ' s comment below. Myślę, że próbowałem to zrobić na serwerze Jenkins, który pozostawia go w trybie odłączonej głowy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-04 22:46:31
Po sklonowaniu repozytorium wszystkie informacje o gałęziach są faktycznie pobierane, ale gałęzie są ukryte. Z poleceniem
$ git branch -a
Możesz wyświetlić wszystkie gałęzie repozytorium, a za pomocą polecenia
$ git checkout -b branchname origin/branchname
Możesz następnie" pobrać " je ręcznie pojedynczo.
Istnieje jednak znacznie czystszy i szybszy sposób, choć jest to nieco skomplikowane. Aby to osiągnąć, potrzebne są trzy kroki:
-
Pierwszy krok
Create a nowy pusty folder na komputerze i klon kopii lustrzanej.folder git z repozytorium:
$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder $ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git
Lokalne repozytorium wewnątrz folderu my_repo_folder jest nadal puste, jest tylko Ukryty .folder git teraz, który możesz zobaczyć poleceniem "LS-alt" z terminala.
-
Drugi krok
Przełącz to repozytorium z pustego (gołego) repozytorium na zwykłe, zmieniając wartość logiczną "bare" konfiguracji Gita na false:
$ git config --bool core.bare false
-
Trzeci Krok
Chwyć wszystko, co znajduje się w bieżącym folderze i utwórz wszystkie gałęzie na lokalnej maszynie, czyniąc to normalnym repo.
$ git reset --hard
Więc teraz możesz po prostu wpisać polecenie {[5] } i zobaczyć, że wszystkie gałęzie są pobrane.
Jest to szybki sposób, w jaki możesz sklonować repozytorium git ze wszystkimi gałęziami naraz, ale nie jest to coś, co chcesz zrobić dla każdego projektu w tym sposób.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-06 20:32:58
Zwykle używam tylko takich komend:
git fetch origin
git checkout --track origin/remote-branch
Trochę krótsza wersja:
git fetch origin
git checkout -t origin/remote-branch
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-26 18:36:38
Możesz pobrać wszystkie gałęzie przez:
git fetch --all
Lub:
git fetch origin --depth=10000 $(git ls-remote -h -t origin)
parametr --depth=10000
może pomóc, jeśli masz spłycone repozytorium.
Aby wyciągnąć wszystkie gałęzie, użyj:
git pull --all
Jeśli powyższe polecenie nie zadziała, poprzedź powyższe polecenie:
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
Ponieważ remote.origin.fetch
może obsługiwać tylko konkretną gałąź podczas pobierania, zwłaszcza gdy sklonowałeś repo za pomocą --single-branch
. Sprawdź to przez: git config remote.origin.fetch
.
Po tym powinieneś być w stanie sprawdź dowolny oddział.
Zobacz też:
Aby przesunąć wszystkie gałęzie do pilota, użyj:
git push --all
W końcu --mirror
aby odzwierciedlić wszystkie refy.
Jeśli twoim celem jest duplikowanie repozytorium, zobacz artykuł: duplikowanie repozytorium na GitHub.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-13 17:03:57
Jeśli szukasz rozwiązania, aby pobrać wszystkie gałęzie, a następnie przenieść wszystko na inny serwer Git, przygotowałem poniższy proces. Jeśli tylko chcesz, aby wszystkie gałęzie były aktualizowane lokalnie, zatrzymaj się na pierwszej pustej linii.
git clone <ORIGINAL_ORIGIN>
git branch -r | awk -F'origin/' '!/HEAD|master/{print $2 " " $1"origin/"$2}' | xargs -L 1 git branch -f --track
git fetch --all --prune --tags
git pull --all
git remote set-url origin <NEW_ORIGIN>
git pull
<resolve_any_merge_conflicts>
git push --all
git push --tags
<check_NEW_ORIGIN_to_ensure_it_matches_ORIGINAL_ORIGIN>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-08 02:48:34
Wydaje mi się, że sklonowałeś repozytorium przez
git clone https://github.com/pathOfrepository
Teraz przejdź do tego folderu używając płyty cd
cd pathOfrepository
Jeśli wpiszesz git status
Możesz zobaczyć wszystkie
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Aby zobaczyć wszystkie ukryte branch type
git branch -a
Wyświetli listę wszystkich zdalnych gałęzi
Teraz, jeśli chcesz dokonać kasy na jakimś konkretnym oddziale po prostu wpisz
git checkout -b localBranchName origin/RemteBranchName
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-04 11:42:29
Po sklonowaniu głównego repozytorium możesz po prostu wykonać
git fetch && git checkout <branchname>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-13 11:43:56
Upewnij się, że wszystkie zdalne gałęzie są pobierane w pliku .git/config
.
W tym przykładzie można pobrać tylko gałąź origin/production
, nawet jeśli spróbujesz zrobić git fetch --all
nic się nie stanie poza pobraniem gałęzi production
:
[origin]
fetch = +refs/heads/production:refs/remotes/origin/production
Wiersz ten należy zastąpić:
[origin]
fetch = +refs/heads/*:refs/remotes/origin/*
Następnie uruchom git fetch
itd...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-19 08:43:21
Zapętlanie nie wydawało mi się działać i chciałem zignorować origin / master. Oto, co mi się udało.
git branch -r | grep -v HEAD | awk -F'/' '{print $2 " " $1"/"$2}' | xargs -L 1 git branch -f --track
Potem:
git fetch --all
git pull --all
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-04 05:09:33
Tylko te 3 komendy otrzymają wszystkie gałęzie
git clone --mirror repo.git .git (gets just .git - bare repository)
git config --bool core.bare false
git reset --hard
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-27 01:46:34
Napisałem mały skrypt do klonowania nowych repo i tworzenia lokalnych gałęzi dla wszystkich zdalnych gałęzi.
Najnowszą wersję znajdziesz tutaj :
#!/bin/bash
# Clones as usual but creates local tracking branches for all remote branches.
# To use, copy this file into the same directory your git binaries are (git, git-flow, git-subtree, etc)
clone_output=$((git clone "$@" ) 2>&1)
retval=$?
echo $clone_output
if [[ $retval != 0 ]] ; then
exit 1
fi
pushd $(echo $clone_output | head -1 | sed 's/Cloning into .\(.*\).\.\.\./\1/') > /dev/null 2>&1
this_branch=$(git branch | sed 's/^..//')
for i in $(git branch -r | grep -v HEAD); do
branch=$(echo $i | perl -pe 's/^.*?\///')
# this doesn't have to be done for each branch, but that's how I did it.
remote=$(echo $i | sed 's/\/.*//')
if [[ "$this_branch" != "$branch" ]]; then
git branch -t $branch $remote/$branch
fi
done
popd > /dev/null 2>&1
Aby go użyć, po prostu skopiuj go do katalogu git bin( dla mnie jest to C:\Program Files (x86)\Git\bin\git-cloneall
), Następnie w linii poleceń:
git cloneall [standard-clone-options] <url>
Klonuje jak zwykle, ale tworzy lokalne gałęzie śledzące dla wszystkich odległych gałęzi.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-28 19:22:23
Dla użytkowników Windows korzystających z PowerShell:
git branch -r | ForEach-Object {
# Skip default branch, this script assumes
# you already checked-out that branch when cloned the repo
if (-not ($_ -match " -> ")) {
$localBranch = ($_ -replace "^.*/", "")
$remoteBranch = $_.Trim()
git branch --track "$localBranch" "$remoteBranch"
}
}
git fetch --all
git pull --all
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-15 23:43:09
Możemy umieścić wszystkie nazwy gałęzi lub znaczników w pliku tymczasowym, a następnie wykonać git pull dla każdej nazwy / znacznika:
git branch -r | grep origin | grep -v HEAD| awk -F/ '{print $NF}' > /tmp/all.txt
git tag -l >> /tmp/all.txt
for tag_or_branch in `cat /tmp/all.txt`; do git checkout $tag_or_branch; git pull origin $tag_or_branch; done
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-05 04:32:19
Oto coś, co uznałbym za solidne:
- Nie aktualizuje zdalnego śledzenia istniejących gałęzi]}
- nie próbuje zaktualizować
HEAD
do śledzeniaorigin/HEAD
- pozwala pilotom o nazwach innych niż
origin
- poprawnie Shell quoted
for b in $(git branch -r --format='%(refname:short)'); do
[[ "${b#*/}" = HEAD ]] && continue
git show-ref -q --heads "${b#*/}" || git branch --track "${b#*/}" "$b";
done
git pull --all
Nie jest konieczne git fetch --all
, ponieważ przejście -all
do git pull
przekazuje tę opcję do wewnętrznego fetch
.
Kredyt na tę odpowiedź .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-14 16:08:11
Na podstawie odpowiedzi Learath2, oto co zrobiłem po zrobieniu git clone [...]
i cd
- ing do utworzonego katalogu:
git branch -r | grep -v master | awk {print\$1} | sed 's/^origin\/\(.*\)$/\1 &/' | xargs -n2 git checkout -b
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-02 15:23:33
git remote add origin https://yourBitbucketLink
git fetch origin
git checkout -b yourNewLocalBranchName origin/requiredRemoteBranch (use tab :D)
Teraz lokalnie Twoje yourNewLocalBranchName
jest Twoje requiredRemoteBranch
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-19 09:20:49