
Git worktree: παράλληλα branches χωρίς δεύτερο clone
Το Git worktree είναι ένας απλός τρόπος να έχεις περισσότερα από ένα working directories για το ίδιο repository. Αντί να κάνεις συνεχώς switch από το feature branch σε ένα επείγον hotfix ή σε ένα pull request για review, ανοίγεις κάθε εργασία σε ξεχωριστό φάκελο. Τα worktrees μοιράζονται το ιστορικό και τα αντικείμενα του repository, αλλά κάθε ένα έχει το δικό του HEAD και index. Έτσι μπορείς να κρατήσεις ανοιχτό το κύριο feature, να διορθώσεις κάτι επείγον και να επιστρέψεις ακριβώς στο προηγούμενο context.
Δεν είναι υποκατάστατο του Git workflow ούτε μαγικό isolation για dependencies. Είναι όμως πολύ χρήσιμο όταν η εναλλαγή branches διακόπτει τη σκέψη, όταν ένα build τρέχει για ώρα ή όταν χρειάζεσαι καθαρό περιβάλλον για να ελέγξεις αλλαγές άλλου μέλους της ομάδας. Ο οδηγός αυτός δείχνει ένα ασφαλές, καθημερινό setup και τα σημεία που αξίζει να προσέξεις.
Τι αλλάζει σε σχέση με ένα δεύτερο clone
Με δύο κανονικά clones έχεις δύο ανεξάρτητους φακέλους και δύο πλήρη αντίγραφα του τοπικού object database. Με ένα linked worktree, το Git συνδέει τον νέο φάκελο με το υπάρχον repository και κρατά ξεχωριστά μόνο τα δεδομένα που πρέπει να είναι ανά working directory, όπως το branch που είναι checkout και το staging area. Η επίσημη τεκμηρίωση το περιγράφει ως πολλαπλά working trees συνδεδεμένα με το ίδιο repository.
Το πρακτικό όφελος είναι η ταχύτητα και η συνέπεια: ένα git fetch ενημερώνει τα refs που θα δουν όλα τα worktrees, ενώ δεν χρειάζεται να θυμάσαι σε ποιο clone έκανες πρόσφατα pull. Το trade-off είναι ότι δεν πρέπει να αντιμετωπίζεις τους φακέλους ως εντελώς ανεξάρτητες εγκαταστάσεις. Ρυθμίσεις εφαρμογής, build artifacts, local databases και secrets μπορεί να χρειάζονται δικό τους αρχείο ή δική τους θύρα σε κάθε worktree.
Το πρώτο worktree για νέο feature
Ας υποθέσουμε ότι το κύριο checkout βρίσκεται στο ~/projects/shop και εργάζεσαι ήδη στο main. Από αυτόν τον φάκελο μπορείς να δημιουργήσεις νέο branch και νέο directory με μία εντολή:
git worktree add ../shop-checkout -b feature/checkout
Η εντολή δημιουργεί τον φάκελο ../shop-checkout, φτιάχνει το feature/checkout και το κάνει checkout εκεί. Το αρχικό checkout μένει όπως ήταν. Άνοιξε τον νέο φάκελο σε δεύτερο παράθυρο του editor, εγκατάστησε ό,τι χρειάζεται το συγκεκριμένο project και δούλεψε κανονικά: status, add, commit και push λειτουργούν όπως σε κάθε branch.
Για branch που υπάρχει ήδη και δεν είναι checkout αλλού, δίνεις το branch ως τελευταίο όρισμα:
git worktree add ../shop-release release/1.4
Αυτό είναι ιδανικό για release verification ή για να αναπαράγεις bug σε παλαιότερη γραμμή συντήρησης χωρίς να εγκαταλείψεις τη νέα ανάπτυξη. Αν το branch είναι ήδη ενεργό σε άλλο worktree, το Git συνήθως αρνείται την ενέργεια. Ο περιορισμός αποφεύγει να γράφεις ταυτόχρονα στο ίδιο branch από δύο indexes, κάτι που θα ήταν εύκολο να προκαλέσει σύγχυση.
Τρία καθημερινά σενάρια όπου κερδίζεις χρόνο
Επείγον hotfix: κράτησε το feature branch ανοιχτό με τα μη ολοκληρωμένα αρχεία του και δημιούργησε ένα μικρό worktree από το production branch. Κάνεις δοκιμή, commit και pull request χωρίς να κάνεις stash ή να μεταφέρεις προσωρινές αλλαγές.
Code review: αντί να αλλάξεις το δικό σου directory για να δεις ένα branch συναδέλφου, κάνε checkout το branch σε ξεχωριστό φάκελο. Μπορείς να τρέξεις tests, να εξερευνήσεις τη διαφορά και να επιστρέψεις αμέσως στη δική σου εργασία. Το ίδιο μοτίβο βοηθά και σε pair programming: κάθε άνθρωπος μπορεί να έχει σαφές τοπικό context.
Παράλληλο test run: όταν ένα integration test ή development server δεσμεύει το ένα checkout, κράτησε το να τρέχει και άνοιξε άλλο worktree για μικρή διόρθωση. Χρειάζονται διαφορετικές θύρες και ξεχωριστά αρχεία ρυθμίσεων όπου η εφαρμογή τα απαιτεί, αλλά δεν χρειάζεται να διακόψεις το πρώτο run.
Έλεγχος, καθαρισμός και recoverability
Η πιο χρήσιμη εντολή για να δεις τι υπάρχει είναι η ακόλουθη:
git worktree list
Θα εμφανίσει το main worktree και κάθε linked worktree, μαζί με το commit και το branch ή detached HEAD. Όταν τελειώσεις πραγματικά μια εργασία, πρώτα επιβεβαίωσε ότι έχεις κρατήσει ή απορρίψει τις αλλαγές της και μετά αφαίρεσε τον φάκελο μέσω Git:
git worktree remove ../shop-checkout
Μην σβήνεις χειροκίνητα έναν φάκελο worktree ως συνηθισμένη πρακτική. Αν αυτό συμβεί κατά λάθος, το Git μπορεί να καθαρίσει αργότερα τα παλιά administrative files ή μπορείς να εκτελέσεις git worktree prune από ένα έγκυρο worktree. Πριν από prune, χρησιμοποίησε προαιρετικά το -n για να δεις τι θα καθαριζόταν.
Για worktree σε εξωτερικό δίσκο ή network share που δεν είναι πάντα διαθέσιμο, υπάρχει το git worktree lock --reason. Το lock λέει στο Git να μην το θεωρήσει εγκαταλελειμμένο και παράλληλα το προστατεύει από μετακίνηση ή αφαίρεση ώσπου να το ξεκλειδώσεις. Είναι μικρή λεπτομέρεια, αλλά προλαμβάνει ανεπιθύμητο cleanup σε μη μόνιμα paths.
Οι παγίδες που δεν λύνει το Git
Κάθε worktree έχει δικό του filesystem, άρα τα node_modules, virtual environments και generated files δεν εμφανίζονται αυτόματα στα υπόλοιπα. Αυτό είναι συχνά σωστό, αλλά αυξάνει τον δίσκο και τον χρόνο αρχικής εγκατάστασης. Επίσης, δύο local servers δεν μπορούν να ακούνε στην ίδια θύρα. Βάλε per-worktree τιμές σε ένα μη δεσμευμένο .env.local ή χρησιμοποίησε διαφορετικά compose project names.
Πρόσεξε και τα migrations. Το ότι έχεις δύο directories δεν σημαίνει ότι έχεις δύο βάσεις δεδομένων. Για αλλαγές schema, προτίμησε ξεχωριστή local database ανά worktree ή σαφή σειρά εκτέλεσης. Η ίδια αρχή ισχύει για queues, caches και shared local services. Το worktree οργανώνει τον κώδικα, όχι το υπόλοιπο runtime.
Κάν’ το μέρος του τρόπου που παρουσιάζεις τη δουλειά σου
Ένα καθαρό workflow με worktrees είναι ιδιαίτερα χρήσιμο σε project όπου δείχνεις feature, fix και tests ως ξεχωριστές διαδρομές εργασίας. Όταν ετοιμάζεις δείγματα για portfolio, μπορείς να κρατήσεις σταθερό το demo branch και να αναπτύσσεις την επόμενη βελτίωση αλλού. Οι ιδέες για project developer portfolio αποκτούν μεγαλύτερη αξία όταν συνοδεύονται από καθαρά commits, reproducible tests και ένα workflow που δεν κρύβει το ιστορικό ανάπτυξης.
Ξεκίνα με ένα μόνο worktree για το επόμενο hotfix ή code review. Αν το χρησιμοποιήσεις για δύο-τρεις εβδομάδες, θα δεις αν πραγματικά μειώνει τα stashes, τα πρόχειρα commits και το branch switching της ημέρας. Η αξία του δεν είναι ότι προσθέτει πολυπλοκότητα· είναι ότι διατηρεί ορατά και ήσυχα τα διαφορετικά νήματα της δουλειάς σου.
















