Git Worktree

1 λεπτά

Πίνακας περιεχομένων

  1. Τι είναι το worktree;
  2. Γιατί worktree;
  3. Πρακτική χρήση
  4. Απαραίτητες εντολές

1. Τι είναι το worktree;

Git worktree = Να έχετε πολλούς φακέλους εργασίας για το ΙΔΙΟ αποθετήριο.

Έννοια:

  • 1 αποθετήριο Git = κανονικά 1 φάκελος
  • Με worktree = 1 αποθετήριο, πολλοί φάκελοι
  • Κάθε φάκελος μπορεί να είναι σε διαφορετικό κλάδο

Αναλογία: Είναι σαν να έχετε πολλά γραφεία για το ίδιο έργο.

Επιστροφή στον πίνακα περιεχομένων

2. Γιατί worktree;

Κλασικό πρόβλημα:

bash
# Εργάζεστε στο feature-A
git checkout feature-A
# Κώδικας, κώδικας, κώδικας... (ημιτελής εργασία)

# ΕΠΕΙΓΟΝ: σφάλμα στο main!
git stash                # Αποθήκευση εργασίας σε εξέλιξη
git checkout main        # Μετάβαση στο main  
# Διόρθωση του σφάλματος...

git checkout feature-A   # Επιστροφή στην εργασία σας
git stash pop           # Ανάκτηση της εργασίας σε εξέλιξη

Λύση worktree:

bash
# Εργάζεστε στο feature-A στον κύριο φάκελο
# Επείγον; Δημιουργήστε νέο φάκελο για το main!
git worktree add ../hotfix main

# Τώρα:
# - ./           → feature-A (η εργασία σας συνεχίζεται)
# - ../hotfix    → main (για την επείγουσα διόρθωση)

Πλεονέκτημα: Χωρίς stash/αλλαγή κλάδου. Απλώς 2 φάκελοι, 2 παράλληλες εργασίες!

Επιστροφή στον πίνακα περιεχομένων

3. Πρακτική χρήση

Βασική ρύθμιση:

bash
mkdir demo-worktree && cd demo-worktree
git init

echo "print('main v1')" > app.py
git add . && git commit -m "Main version"

# Δημιουργία κλάδου feature
git checkout -b feature-new
echo "print('feature work')" > feature.py
git add . && git commit -m "Feature work"

git checkout main

Δημιουργία worktrees:

bash
# Δημιουργία worktree για το feature-new
git worktree add ../feature-work feature-new

# Δημιουργία worktree για νέο κλάδο
git worktree add ../hotfix-branch -b hotfix

# Προβολή όλων των worktrees
git worktree list

Αποτέλεσμα:

demo-worktree/       → κλάδος main
../feature-work/     → κλάδος feature-new  
../hotfix-branch/    → κλάδος hotfix (νέος)

Παράλληλη εργασία:

bash
# Τερματικό 1: κύριος φάκελος (main)
cd demo-worktree
echo "print('main updated')" >> app.py
git add . && git commit -m "Update main"

# Τερματικό 2: εργασία feature
cd ../feature-work  
echo "print('feature complete')" >> feature.py
git add . && git commit -m "Complete feature"

# Τερματικό 3: hotfix
cd ../hotfix-branch
echo "print('urgent fix')" > fix.py
git add . && git commit -m "Critical fix"

Μαγεία: 3 κλάδοι, 3 φάκελοι, 0 αλλαγή πλαισίου!

Επιστροφή στον πίνακα περιεχομένων

4. Απαραίτητες εντολές

ΕντολήΕνέργεια
git worktree add <path> <branch>Δημιουργία worktree σε υπάρχοντα κλάδο
git worktree add <path> -b <new-branch>Δημιουργία worktree + νέου κλάδου
git worktree listΠροβολή όλων των worktrees
git worktree remove <path>Διαγραφή worktree
git worktree pruneΚαθαρισμός διαγραμμένων worktrees

Τυπικές περιπτώσεις χρήσης:

1. Επείγον hotfix:

bash
git worktree add ../hotfix main
cd ../hotfix && echo "fix" > fix.py
git add . && git commit -m "Hotfix"
git push origin main

2. Αναθεώρηση PR:

bash
git worktree add ../pr-review pr-branch
cd ../pr-review  # Δοκιμή του PR χωρίς να διαταράξετε την εργασία σας

3. Σύγκριση κλάδων:

bash
git worktree add ../version-a branch-a
git worktree add ../version-b branch-b
# Σύγκριση αρχείων μεταξύ ../version-a και ../version-b

Καθαρισμός:

bash
git worktree remove ../feature-work
git worktree remove ../hotfix-branch  
git worktree prune                    # Καθαρισμός των αναφορών

Worktree = πολυδιεργασία Git χωρίς συμβιβασμούς!

Επιστροφή στον πίνακα περιεχομένων