Πώς να μετατρέψετε έναν κατάλογο σε ένα αποθετήριο Git σε υπομονάδα
Οι υπομονάδες Git είναι σαν αποθετήρια μέσα σε αποθετήρια, τα οποία σας επιτρέπουν να συμπεριλάβετε εξωτερικές βιβλιοθήκες κώδικα ή εξαρτήσεις στο έργο σας, όλα αυτά χωρίς να συνδέετε τον έλεγχο έκδοσης της μονάδας με το ίδιο το έργο. Αυτό διατηρεί τις λειτουργικές μονάδες ξεχωριστές και εύκολη στην ενημέρωση, και είναι εύκολο να μετατρέψετε έναν κατάλογο σε μια νέα υπομονάδα.
Τι είναι ένα Submodule στο Git;
Μια υπομονάδα είναι ένα αποθετήριο Git που είναι ενσωματωμένο σε άλλο αποθετήριο Git. Αυτό σας επιτρέπει να συμπεριλάβετε κώδικα από άλλο έργο ως εξάρτηση, διατηρώντας παράλληλα τον δικό του έλεγχο έκδοσης.
Όταν κλωνοποιείτε το γονικό αποθετήριο, κλωνοποιεί αυτόματα και το αποθετήριο υπομονάδας. Αυτό σημαίνει ότι ο κώδικας και το ιστορικό Git της υπομονάδας διατηρούνται χωριστά από το κύριο στοιχείο ελέγχου έκδοσης και μπορούν να ενημερωθούν για πολλαπλά αποθετήρια που καταναλώνουν τη βιβλιοθήκη.
Μια εναλλακτική λύση στις υπομονάδες είναι να δημοσιεύσετε τις βιβλιοθήκες σας ως πακέτα σε διαχειριστές πακέτων όπως το NPM, το Maven ή το NuGet. Ωστόσο, αυτό δεν λειτουργεί για όλους τους τύπους έργων και εάν εργάζεστε με ιδιωτικό κώδικα, θα χρειαστεί να ρυθμίσετε ένα ιδιωτικό μητρώο πακέτων, το οποίο μπορεί να είναι πιο περίπλοκο από την απλή ενσωμάτωση του πηγαίο κώδικα της βιβλιοθήκης ως υπομονάδα .
Ένα από τα κύρια προβλήματα με τη μετατροπή ενός υπάρχοντος καταλόγου σε υπομονάδα είναι ότι η διαχείριση της υπομονάδας πρέπει να γίνεται εξωτερικά. Το Git αναμένει από εσάς να δημιουργήσετε έναν νέο κενό κατάλογο για αυτό και να κλωνοποιήσετε την υπομονάδα
σε
η εργασία. Μπορείτε να αντιγράψετε τον κώδικα σε έναν νέο φάκελο, αλλά θα χάσετε όλο το ιστορικό του Git που σχετίζεται με αυτόν, κάτι που μπορεί να είναι πολύ επιζήμιο σε μεγάλα έργα. Αντίθετα, θα κλωνοποιήσουμε το αποθετήριο, θα φιλτράρουμε τον μη απαραίτητο κώδικα και θα προωθήσουμε το νέο ιστορικό στη νέα υπομονάδα.
Πώς να μετατρέψετε έναν κατάλογο σε υπομονάδα
Το πρώτο βήμα είναι να δημιουργήσετε ένα νέο αποθετήριο για την υπομονάδα. Αυτό είναι συνήθως σε μια υπηρεσία φιλοξενίας Git όπως
GitHub
αν και μπορείτε να δημιουργήσετε έναν τοπικό χώρο αποθήκευσης στον υπολογιστή σας.
Στη συνέχεια, θα θελήσετε να λάβετε ένα νέο αντίγραφο του κύριου αποθετηρίου σας για να δημιουργήσετε το αποθετήριο της υπομονάδας.
git clone :username/repository.git submodule-repo cd submodule-repo
Στη συνέχεια, θα θέλετε να φιλτράρετε όλα όσα δεν σχετίζονται με την υπομονάδα σας. Αυτό θα διαγράψει όλο το ιστορικό δέσμευσης που δεν σχετίζεται με τον κώδικα που περιέχεται στην υπομονάδα. Αυτό είναι ένα
καταστροφική λειτουργία
επομένως βεβαιωθείτε ότι το κάνετε στο αντίγραφο του αποθετηρίου σας, όχι στο κύριο.
git filter-branch --subdirectory-filter submoduledirectory -- --all
Θα σας μείνει μόνο ο κωδικός που υπήρχε στον κατάλογο και μόνο οι δεσμεύσεις που σχετίζονται με αυτόν. Αυτό θα σας επιτρέψει να μεταφέρετε σε όλο το ιστορικό Git που σχετίζεται με αυτήν την υπομονάδα.
Θα θέλετε να αλλάξετε το απομακρυσμένο URL αυτού του καταλόγου λειτουργικής μονάδας στο νέο αποθετήριο υπομονάδας, το οποίο συνήθως ονομάζεται “origin”.
git remote set-url origin https://github.com/new-repository.git
Στη συνέχεια, μπορείτε να προωθήσετε το ιστορικό όπως θα κάνατε συνήθως.
git push -u origin main
Προσθήκη νέας υπομονάδας
Πίσω στο κύριο έργο, θα θέλετε να προσθέσετε την υπομονάδα.
Αρχικά, πρέπει να σταματήσετε να παρακολουθείτε τον κατάλογο που θέλετε να μετατρέψετε σε υπομονάδα από το γονικό αποθετήριο. Θα εξακολουθεί να υπάρχει στο ιστορικό εκδόσεων του Git και ούτως ή άλλως μόλις το προσθέσατε στο νέο αποθετήριο λειτουργιών.
rm -rf directory_name
Στη συνέχεια, μπορείτε να προσθέσετε την απομακρυσμένη διεύθυνση URL για το αποθετήριο υπομονάδας που δημιουργήσατε στο Github, χρησιμοποιώντας το
git submodule add
εντολή:
git submodule add :username/repository.git directory_name
Όταν εκτελείτε αυτήν την εντολή, το Git θα δημιουργήσει έναν νέο κατάλογο υπομονάδων στο γονικό αποθετήριο και θα κλωνοποιήσει το αποθετήριο υπομονάδας σε αυτόν τον κατάλογο. Επίσης, θα ξεκινήσει ξανά η παρακολούθηση του φακέλου της μονάδας.
Για να ενημερώσετε την υπομονάδα, μπορείτε να χρησιμοποιήσετε το
git submodule
update
εντολή:
git submodule update --remote submodule_name


