Η εκτέλεση της εντολής git clone [email protected]:whatever
δημιουργεί έναν κατάλογο στον τρέχοντα φάκελό μου με το όνομα οτιδήποτε και μεταφέρει τα περιεχόμενα του αποθετηρίου Git σε αυτόν τον φάκελο:
/httpdocs/whatever/public
Το πρόβλημά μου είναι ότι χρειάζομαι τα περιεχόμενα του αποθετηρίου Git να κλωνοποιηθούν στον τρέχοντα φάκελό μου, ώστε να εμφανίζονται στη σωστή θέση για τον διακομιστή ιστού:
/httpdocs/public
Ξέρω πώς να μετακινήσω τα αρχεία αφού κλωνοποιήσω το αποθετήριο, αλλά αυτό φαίνεται να χαλάει το Git, και θα ήθελα να μπορώ να ενημερώνομαι απλά καλώντας το git pull
. Πώς μπορώ να το κάνω αυτό;
Επιλογή Α:
git clone [email protected]:whatever folder-name
Ergo, για χρήση "εδώ":
git clone [email protected]:whatever .
Επιλογή Β:
Μετακινήστε και το φάκελο .git
. Σημειώστε ότι ο φάκελος .git
είναι κρυμμένος στα περισσότερα γραφικά προγράμματα εξερεύνησης αρχείων, οπότε φροντίστε να εμφανίζετε τα κρυμμένα αρχεία.
mv /where/it/is/right/now/* /where/I/want/it/
mv /where/it/is/right/now/.* /where/I/want/it/
Η πρώτη γραμμή αρπάζει όλα τα κανονικά αρχεία, η δεύτερη γραμμή αρπάζει τα dot-files. Είναι επίσης δυνατό να το κάνετε σε μία γραμμή ενεργοποιώντας το dotglob (π.χ. shopt -s dotglob
), αλλά αυτή είναι πιθανώς μια κακή λύση αν κάνετε την ερώτηση στην οποία απαντά αυτή η απάντηση.
Καλύτερα όμως:
Κρατήστε το αντίγραφο εργασίας σας κάπου αλλού και δημιουργήστε έναν συμβολικό σύνδεσμο. Κάπως έτσι:
ln -s /where/it/is/right/now /the/path/I/want/to/use
Για την περίπτωσή σας αυτό θα ήταν κάτι σαν:
ln -sfn /opt/projectA/prod/public /httpdocs/public
Το οποίο θα μπορούσε εύκολα να αλλάξει σε test αν το θέλατε, δηλ:
ln -sfn /opt/projectA/test/public /httpdocs/public
χωρίς να μετακινείτε αρχεία. Προστέθηκε το -fn
σε περίπτωση που κάποιος αντιγράφει αυτές τις γραμμές (το -f
είναι force, το -n
αποφεύγει κάποιες συχνά ανεπιθύμητες αλληλεπιδράσεις με ήδη και μη υπάρχοντες συνδέσμους).
Αν θέλετε απλά να δουλέψει, χρησιμοποιήστε την Επιλογή Α, αν κάποιος άλλος πρόκειται να δει τι έχετε κάνει, χρησιμοποιήστε την Επιλογή Γ.
Το παράδειγμα που νομίζω ότι πολλοί άνθρωποι που θέτουν αυτή την ερώτηση αναζητούν είναι το εξής. Αν είστε μέσα στον κατάλογο που θέλετε να μεταφερθούν τα περιεχόμενα του git repository, εκτελέστε:
git clone [email protected]:whatever .
Το "." στο τέλος καθορίζει τον τρέχοντα φάκελο ως φάκελο ελέγχου.
Όταν μετακινείτε τα αρχεία εκεί που τα θέλετε, μετακινείτε επίσης και τον κατάλογο .git
; Ανάλογα με το λειτουργικό σας σύστημα και τις ρυθμίσεις σας, αυτός ο κατάλογος μπορεί να είναι κρυμμένος.
Περιέχει το ρεπορτάζ και τα υποστηρικτικά αρχεία, ενώ τα αρχεία του έργου που βρίσκονται στον κατάλογο /public
σας είναι μόνο οι εκδόσεις της τρέχουσας δέσμευσης check-out (master branch από προεπιλογή).