Κλωνοποίησα ένα αποθετήριο Git, το οποίο περιέχει περίπου πέντε κλάδους. Ωστόσο, όταν κάνω git branch
βλέπω μόνο ένα από αυτά:
$ git branch
* master
Ξέρω ότι μπορώ να κάνω git branch -a
για να δω όλους τους κλάδους, αλλά πώς θα τραβήξω όλους τους κλάδους τοπικά, ώστε όταν κάνω git branch
, να δείχνει τα εξής;
$ git branch
* master
* staging
* etc...
Μπορείτε να αντλήσετε όλα τα κλαδιά από όλα τα απομακρυσμένα σημεία ως εξής:
git fetch --all
Είναι ουσιαστικά μια κίνηση δύναμης.
Το fetch
ενημερώνει τα τοπικά αντίγραφα των απομακρυσμένων κλάδων, οπότε αυτό είναι πάντα ασφαλές για τους τοπικούς σας κλάδους ΑΛΛΑ:
Αν θέλετε να ενημερώσετε τα τοπικά σας κλαδιά, θα πρέπει να τραβήξετε κάθε κλαδί.
fetch
δεν θα δημιουργήσει τοπικούς κλάδους (οι οποίοι παρακολουθούν απομακρυσμένους κλάδους), θα πρέπει να το κάνετε αυτό χειροκίνητα. Αν θέλετε να παραθέσετε όλα τα απομακρυσμένα κλαδιά:
git branch -a
Για να ενημερώσετε τους τοπικούς κλάδους που παρακολουθούν τους απομακρυσμένους κλάδους:
git pull --all
Ωστόσο, αυτό μπορεί να είναι ακόμα ανεπαρκές. Θα λειτουργήσει μόνο για τους τοπικούς σας κλάδους που παρακολουθούν απομακρυσμένους κλάδους. Για να παρακολουθείτε όλους τους απομακρυσμένους κλάδους εκτελέστε αυτό το oneliner ΠΡΙΝ το git pull --all
:
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
(Φαίνεται ότι το pull φέρνει όλους τους κλάδους από όλα τα απομακρυσμένα σημεία, αλλά πάντα φέρνω πρώτα για να είμαι σίγουρος).
Εκτελέστε την πρώτη εντολή μόνο αν υπάρχουν απομακρυσμένοι κλάδοι στο διακομιστή που δεν παρακολουθούνται από τους τοπικούς σας κλάδους.
Υ.Γ. AFAIK η git fetch --all
και η git remote update
είναι ισοδύναμες.
Το σχόλιο του Kamil Szot's, το οποίο ο κόσμος βρήκε χρήσιμο.
Έπρεπε να χρησιμοποιήσω: >,
for remote in
git branch -r
; do git branch --track ${remote#origin/} $remote; done >, επειδή ο κώδικάς σας δημιούργησε τοπικούς κλάδους με τα ονόματαorigin/branchname
και έπαιρνα "refname 'origin/branchname' είναι διφορούμενο κάθε φορά που όταν αναφερόμουν σε αυτό.
Για να καταχωρήσετε απομακρυσμένα υποκαταστήματα:
git branch -r
Μπορείτε να τα ελέγξετε ως τοπικούς κλάδους με:
ΤοπικόΌνομα origin/remotebranchname`.
$ git remote update
$ git pull --all
Αυτό υποθέτει ότι παρακολουθούνται όλοι οι κλάδοι.
Αν δεν είναι, μπορείτε να το ενεργοποιήσετε στο Bash:
for remote in `git branch -r `; do git branch --track $remote; done
Στη συνέχεια, εκτελέστε την εντολή.