Πρόσφατα μεταπήδησα στο συγχρονισμό των αποθετηρίων μου στο https:// στο GitHub (λόγω προβλημάτων με το τείχος προστασίας) και ζητάει κάθε φορά κωδικό πρόσβασης.
Υπάρχει κάποιος τρόπος να αποθηκεύσω τα διαπιστευτήρια στην προσωρινή μνήμη, αντί να επαληθεύω κάθε φορά που γίνεται το git push
;
Από την έκδοση 1.7.9 του Git (κυκλοφόρησε στα τέλη Ιανουαρίου 2012), υπάρχει ένας ωραίος μηχανισμός στο Git για να αποφεύγετε να πληκτρολογείτε τον κωδικό πρόσβασής σας όλη την ώρα για HTTP / HTTPS, που ονομάζεται credential helpers. (Ευχαριστούμε τον dazonic για την επισήμανση αυτού του νέου χαρακτηριστικού στα σχόλια παρακάτω).
Με το Git 1.7.9 ή νεότερη έκδοση, μπορείτε απλά να χρησιμοποιήσετε έναν από τους ακόλουθους credential helpers:
git config --global credential.helper cache
... το οποίο λέει στο Git να κρατάει τον κωδικό πρόσβασής σας αποθηκευμένο στη μνήμη για (από προεπιλογή) 15 λεπτά. Μπορείτε να ορίσετε μεγαλύτερο χρονικό όριο με:
git config --global credential.helper "cache --timeout=3600"
(Αυτό το παράδειγμα προτάθηκε στη σελίδα βοήθειας του GitHub για Linux.) Μπορείτε επίσης να αποθηκεύσετε τα διαπιστευτήριά σας μόνιμα, αν το επιθυμείτε, δείτε τις άλλες απαντήσεις παρακάτω.
Η βοήθεια του GitHub προτείνει επίσης ότι αν είστε σε Mac OS X και χρησιμοποιήσατε το Homebrew για να εγκαταστήσετε το Git, μπορείτε να χρησιμοποιήσετε το εγγενές Mac OS X keystore με:
git config --global credential.helper osxkeychain
Για τα Windows, υπάρχει ένα βοηθητικό πρόγραμμα που ονομάζεται Git Credential Manager for Windows ή wincred in msysgit.
git config --global credential.helper wincred # obsolete
Με το Git for Windows 2.7.3+ (Μάρτιος 2016):
git config --global credential.helper manager
Για Linux, μπορείτε να χρησιμοποιήσετε το gnome-keyring
(ή άλλη υλοποίηση keyring όπως το KWallet).
Με εκδόσεις του Git πριν την 1.7.9, αυτή η πιο ασφαλής επιλογή δεν είναι διαθέσιμη και θα πρέπει να αλλάξετε τη διεύθυνση URL που χρησιμοποιεί το απομακρυσμένο origin
για να συμπεριλάβει τον κωδικό πρόσβασης με αυτόν τον τρόπο:
https://you:[email protected]/you/example.git
... με άλλα λόγια με :password
μετά το όνομα χρήστη και πριν το @
.
Μπορείτε να ορίσετε μια νέα διεύθυνση URL για το απομακρυσμένο origin
σας με:
git config remote.origin.url https://you:[email protected]/you/example.git
Βεβαιωθείτε ότι χρησιμοποιείτε https
, και θα πρέπει να γνωρίζετε ότι αν το κάνετε αυτό, ο κωδικός πρόσβασής σας στο GitHub θα αποθηκευτεί σε απλό κείμενο στον κατάλογο .git
σας, κάτι που είναι προφανώς ανεπιθύμητο.
Μια εναλλακτική προσέγγιση είναι να βάλετε το όνομα χρήστη και τον κωδικό πρόσβασής σας στο αρχείο ~/.netrc
, αν και, όπως και με τη διατήρηση του κωδικού πρόσβασης στην απομακρυσμένη διεύθυνση URL, αυτό σημαίνει ότι ο κωδικός πρόσβασής σας θα αποθηκευτεί στο δίσκο σε απλό κείμενο και συνεπώς είναι λιγότερο ασφαλής και δεν συνιστάται. Ωστόσο, αν θέλετε να ακολουθήσετε αυτή την προσέγγιση, προσθέστε την ακόλουθη γραμμή στο αρχείο σας ~/.netrc
:
machine <hostname> login <username> password <password>
... αντικαθιστώντας το <hostname>
με το hostname του διακομιστή, και τα <username>
και <password>
με το όνομα χρήστη και τον κωδικό πρόσβασής σας. Θυμηθείτε επίσης να ορίσετε περιοριστικά δικαιώματα συστήματος αρχείων σε αυτό το αρχείο:
chmod 600 ~/.netrc
Σημειώστε ότι στα Windows, το αρχείο αυτό θα πρέπει να ονομάζεται _netrc
και ίσως χρειαστεί να ορίσετε τη μεταβλητή περιβάλλοντος %HOME% - για περισσότερες λεπτομέρειες βλ:
Μπορείτε επίσης να βάλετε το Git να αποθηκεύσει μόνιμα τα διαπιστευτήριά σας χρησιμοποιώντας τα εξής:
git config credential.helper store
Σημείωση: Αν και αυτό είναι βολικό, το Git θα αποθηκεύσει τα διαπιστευτήριά σας σε καθαρό κείμενο στο ένα τοπικό αρχείο (.git-credentials) κάτω από τον κατάλογο του έργου σας (δείτε παρακάτω για τον κατάλογο "home"). Αν δεν σας αρέσει αυτό, διαγράψτε αυτό το αρχείο και μεταβείτε στη χρήση του cache.
Αν θέλετε το Git να συνεχίσει να σας ζητάει τα διαπιστευτήρια κάθε φορά που χρειάζεται να συνδεθεί με το απομακρυσμένο αποθετήριο, μπορείτε να εκτελέσετε αυτή την εντολή:
git config --unset credential.helper
Για να αποθηκεύσετε τους κωδικούς πρόσβασης στο αρχείο .git-credentials
στον κατάλογο %HOME%
σας αντί για τον κατάλογο του έργου: χρησιμοποιήστε τη σημαία --global
git config --global credential.helper store
Αν δεν θέλετε να αποθηκεύσετε τον κωδικό πρόσβασής σας σε απλό κείμενο, όπως είπε ο Mark, μπορείτε να χρησιμοποιήσετε μια διαφορετική διεύθυνση URL του GitHub για την ανάκτηση από ό,τι για την προώθηση. Στο αρχείο ρυθμίσεων, στην περιοχή [remote "origin"]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Θα εξακολουθεί να ζητάει κωδικό πρόσβασης όταν κάνετε push, αλλά όχι όταν κάνετε fetch, τουλάχιστον για έργα ανοιχτού κώδικα.