Ανάκτηση συγκεκριμένης δέσμευσης από ένα απομακρυσμένο αποθετήριο Git

Υπάρχει κάποιος τρόπος να ανακτήσω μόνο μια συγκεκριμένη δέσμευση από ένα απομακρυσμένο αποθετήριο Git χωρίς να το κλωνοποιήσω στον υπολογιστή μου; Η δομή του απομακρυσμένου repo είναι απολύτως ίδια με εκείνη του δικού μου και ως εκ τούτου δεν θα υπάρξουν συγκρούσεις, αλλά δεν έχω ιδέα πώς να το κάνω αυτό και δεν θέλω να κλωνοποιήσω αυτό το τεράστιο αποθετήριο.

Είμαι νέος στο git, υπάρχει κάποιος τρόπος;

Κλωνοποιείτε μόνο μία φορά, οπότε αν έχετε ήδη έναν κλώνο του απομακρυσμένου αποθετηρίου, η λήψη από αυτό δεν θα κατεβάσει τα πάντα ξανά. Απλά υποδείξτε ποιον κλάδο θέλετε να τραβήξετε, ή φέρτε τις αλλαγές και ελέγξτε τη δέσμευση που θέλετε.

Η άντληση από ένα νέο αποθετήριο είναι πολύ φτηνή σε εύρος ζώνης, καθώς θα κατεβάσει μόνο τις αλλαγές που δεν έχετε'ε. Σκεφτείτε από την άποψη ότι το Git κάνει το σωστό πράγμα, με τον ελάχιστο δυνατό φόρτο.

Το Git αποθηκεύει τα πάντα στο φάκελο .git. Ένα commit δεν μπορεί'να ανακτηθεί και να αποθηκευτεί μεμονωμένα, χρειάζεται όλους τους προγόνους του. Είναι συνδεδεμένα.


Για να μειώσετε το μέγεθος της λήψης μπορείτε ωστόσο να ζητήσετε από το git να φέρει μόνο αντικείμενα που σχετίζονται με ένα συγκεκριμένο branch ή commit:

git fetch origin refs/heads/branch:refs/remotes/origin/branch

Αυτό θα κατεβάσει μόνο τις commits που περιέχονται στον απομακρυσμένο κλάδο branch (και μόνο αυτές που σας λείπουν), και θα τις αποθηκεύσει στο origin/branch. Στη συνέχεια μπορείτε να συγχωνεύσετε ή να κάνετε checkout.

Μπορείτε επίσης να καθορίσετε μόνο μια δέσμευση SHA1:

git fetch origin 96de5297df870:refs/remotes/origin/foo-commit

Αυτό θα κατεβάσει μόνο το commit του καθορισμένου SHA-1 96de5297df870 (και τους προγόνους του που σας λείπουν), και θα το αποθηκεύσει ως (ανύπαρκτο) απομακρυσμένο κλάδο origin/foo-commit.

Σχόλια (9)

Έκανα ένα pull στο git repo μου:

git pull --rebase  

Επιτρέποντας στο git να τραβήξει όλο τον κώδικα για τον κλάδο και στη συνέχεια πήγα να κάνω μια επαναφορά στο commit που με ενδιέφερε.

git reset --hard

Ελπίζω αυτό να βοηθήσει.

Σχόλια (3)

Μπορείτε απλά να λάβετε μια μεμονωμένη δέσμευση ενός απομακρυσμένου αποθετηρίου με την εντολή

git fetch  

όπου,

  • `μπορεί να είναι ένα όνομα απομακρυσμένου repo (π.χ.origin) ή ακόμα και μια διεύθυνση URL απομακρυσμένου repo (π.χ.https://git.foo.com/myrepo.git`)
  • `` μπορεί να είναι η δέσμευση SHA1

για παράδειγμα

git fetch https://git.foo.com/myrepo.git 0a071603d87e0b89738599c160583a19a6d95545

αφού έχετε πάρει τη δέσμευση (και τους προγόνους που λείπουν) μπορείτε απλά να την ελέγξετε με την εντολή

git checkout FETCH_HEAD

Σημειώστε ότι αυτό θα σας φέρει στην κατάσταση "detached head".

Σχόλια (9)