अपने वर्तमान Mac प्रोजेक्ट चेकआउट को प्रभावित किए बिना दूसरी ब्रांच पर काम करने के लिए, पास के किसी फ़ोल्डर में Git worktree बनाएं। प्रत्येक worktree की अपनी फ़ाइलें और चेक-आउट की गई ब्रांच होती है, जबकि मुख्य चेकआउट के साथ यह रिपॉजिटरी डेटा साझा करता है। इसे Terminal से बनाएं, इसके फ़ोल्डर को Finder या अपने एडिटर में खोलें, और काम पूरा होने पर Git की मदद से इसे हटा दें। Git का worktree दस्तावेज़
एक worktree क्या बदलता है
एक worktree आपको उसी Git रिपॉजिटरी से जुड़ी एक और वर्किंग डायरेक्टरी प्रदान करता है। इसका मतलब है कि आप उदाहरण के लिए, अपने वर्तमान main चेकआउट को खुला रख सकते हैं जबकि किसी फ़ीचर ब्रांच का एक अलग फ़ोल्डर और फ़ाइलें हो सकती हैं। एक वर्किंग डायरेक्टरी में किए गए बदलाव दूसरी डायरेक्टरी की चेक-आउट की गई फ़ाइलों को ओवरराइट नहीं करते हैं। Git रिपॉजिटरी डेटा साझा करता है, लेकिन worktree-विशिष्ट स्थिति जैसे कि इंडेक्स और HEAD को अलग रखता है। Git: git-worktree
ब्रांचें सभी worktrees में साझा होती हैं, और आम तौर पर एक स्थानीय (local) ब्रांच को एक साथ दो worktrees में चेक आउट नहीं किया जा सकता है। Worktrees अलग-अलग, समवर्ती (concurrent) कार्यों के लिए उपयुक्त हैं; वे स्वतंत्र रिपॉजिटरी क्लोन नहीं हैं। Git द्वारा अनदेखी (ignored) की गई फ़ाइलें, जैसे कि स्थानीय कॉन्फ़िगरेशन या बिल्ड आउटपुट, उन्हें नए फ़ोल्डर में अलग से बनाने की आवश्यकता हो सकती है।
macOS पर एक फ़ीचर worktree बनाएं
Terminal खोलें और अपनी मौजूदा प्रोजेक्ट डायरेक्टरी में जाएं। my-app को अपनी रिपॉजिटरी के डायरेक्टरी नाम से बदलें। यह उदाहरण मानता है कि यह ~/Projects/my-app में मौजूद है और इसके बगल में नया चेकआउट बनाता है।
cd ~/Projects/my-app
git status --short
git worktree add -b feature/search-ui ../my-app-search-ui
स्टेटस कमांड आपको संदर्भ (context) बदलने से पहले यह देखने की सुविधा देता है कि वर्तमान चेकआउट में कोई लंबित (pending) परिवर्तन हैं या नहीं। add -b कमांड feature/search-ui नाम की एक नई स्थानीय ब्रांच बनाता है और इसे पास की my-app-search-ui डायरेक्टरी में चेक आउट करता है। जब कोई शुरुआती कमिट निर्दिष्ट नहीं होता है, तो Git वर्तमान HEAD से एक ब्रांच बनाता है। एक अद्वितीय ब्रांच और एक ऐसा डेस्टिनेशन पाथ चुनें जो पहले से उपयोग में न हो। Git: worktree add
किसी मौजूदा स्थानीय ब्रांच के लिए जो किसी अन्य worktree में चेक आउट नहीं है, -b और नए ब्रांच नाम के बजाय उसका नाम उपयोग करें:
git worktree add ../my-app-search-ui existing-branch
यदि ब्रांच पहले से ही कहीं और चेक आउट है, तो Git डिफ़ॉल्ट रूप से इसे अस्वीकार कर देता है। सुरक्षा उपाय को बायपास करने के लिए इसे ज़बरदस्ती (force) न करें; किसी अन्य ब्रांच का उपयोग करें या उसी चेकआउट में काम करें जिसमें वह पहले से मौजूद है। किसी रिमोट ब्रांच के लिए worktree बनाने के लिए, यदि आवश्यक हो तो पहले रिमोट को फ़ेच करें और Git के ट्रैकिंग-ब्रांच व्यवहार का पालन करें; जोड़ने से पहले ब्रांच के नाम की पुष्टि करें।
Finder और अपने एडिटर में नया चेकआउट खोलें
Finder में, उस पैरेंट फ़ोल्डर पर जाएं जिसमें दोनों प्रोजेक्ट डायरेक्टरी मौजूद हैं, फिर my-app-search-ui खोलें। आप Finder के 'Go to Folder' कमांड (Shift-Command-G) का उपयोग कर सकते हैं और पूरा पाथ दर्ज कर सकते हैं, जैसे ~/Projects/my-app-search-ui। Finder या अपने एडिटर में डायरेक्टरी का नाम दिखाई देने दें ताकि आप इसे मूल चेकआउट से अलग पहचान सकें।
Apple, Finder से चयनित फ़ोल्डर पर Terminal खोलने का तरीका भी प्रलेखित करता है: View > Show Path Bar के ज़रिए पाथ बार दिखाएं, पाथ बार में फ़ोल्डर पर Control-क्लिक करें, फिर 'Open in Terminal' चुनें। एक और Terminal विंडो या टैब खोलने के लिए, Command-N या Command-T का उपयोग करें। चयनित फ़ोल्डर का स्थान Finder क्रिया के लिए वर्किंग डायरेक्टरी बन जाता है। Apple: Open new Terminal windows and tabs on Mac
उस एडिटर के प्रलेखित ओपन-फ़ोल्डर नियंत्रण का उपयोग करके अपने एडिटर में नए फ़ोल्डर को एक अलग प्रोजेक्ट के रूप में खोलें। एडिटर का व्यवहार भिन्न हो सकता है; Git worktrees अपने आप एडिटर विंडो नहीं बनाते हैं या आपके डेवलपमेंट वातावरण को कॉन्फ़िगर नहीं करते हैं। डिपेंडेंसी डायरेक्टरी, अनदेखी की गई फ़ाइलें, स्थानीय परिवेश (environment) फ़ाइलें, और चल रही सेवाओं (running services) के लिए प्रत्येक चेकआउट में अलग सेटअप की आवश्यकता हो सकती है।
जांचें कि आप किस चेकआउट का उपयोग कर रहे हैं
किसी भी प्रोजेक्ट डायरेक्टरी से, यह चलाएं:
git worktree list
Git मुख्य worktree और लिंक किए गए worktrees की सूची दिखाता है, जिसमें उनके पाथ और चेक-आउट की गई ब्रांच शामिल होती हैं। कमिट करने या फ़ाइलों को बदलने वाले कमांड चलाने से पहले, वर्तमान फ़ोल्डर की पुष्टि करें या वहां git status चलाएं। यह सरल जांच उस आम गलती को पकड़ने में मदद करती है जहां नए चेकआउट में काम करने के इरादे से मूल चेकआउट में संपादन (edits) कर दिए जाते हैं। Git: worktree list
काम पूरा होने पर worktree को हटाएं
पहले कमिट करें या अपनी आवश्यकतानुसार किसी भी काम को सुरक्षित रख लें। फिर, रिपॉजिटरी से संबंधित किसी भी worktree से, लिंक किए गए चेकआउट को पाथ द्वारा हटाएं:
git worktree remove ../my-app-search-ui
git worktree list
Git सामान्य रूप से ऐसे worktree को हटाने से इनकार करता है जिसमें संशोधित ट्रैक की गई फ़ाइलें या अनट्रैक की गई फ़ाइलें होती हैं। हटाने से पहले उन फ़ाइलों की समीक्षा करें और उन्हें सुरक्षित रखें; --force Git की सुरक्षा को ओवरराइड करता है और काम को नष्ट कर सकता है। यह कमांड worktree डायरेक्टरी को हटा देता है, इसलिए इसके अंदर क्या है इसकी जांच करने के विकल्प के तौर पर इसका उपयोग न करें। एक बार हटा दिए जाने के बाद, ब्रांच रिपॉजिटरी में तब तक उपलब्ध रहती है जब तक कि उसे अलग से हटाया न जाए। Git: worktree remove
यदि आपने किसी worktree फ़ोल्डर को मैन्युअल रूप से हटा दिया है, तो Git उसका प्रशासनिक रिकॉर्ड रख सकता है। पुराने रिकॉर्ड को साफ़ करने के लिए git worktree prune का उपयोग करें; सामान्य सफ़ाई के लिए git worktree remove को प्राथमिकता दें। यदि आप Finder में किसी लिंक किए गए चेकआउट को ले जाते हैं (move करते हैं), तो Git उसके स्थान का ट्रैक खो सकता है; जहां लागू हो वहां git worktree move का उपयोग करें या इसे फिर से जोड़ने के लिए git worktree repair का उपयोग करें। Git: worktree prune, move, और repair
एक व्यावहारिक Mac सेटअप प्रति सक्रिय कार्य (active task) एक worktree फ़ोल्डर का है, जिसमें छोटे, पहचानने योग्य फ़ोल्डर और ब्रांच के नाम हों। मुख्य चेकआउट को उसके वर्तमान कार्य के लिए रखें, समानांतर कार्य के लिए एक सिबलिंग (sibling) चेकआउट बनाएं, और संपादन करने से पहले पाथ सत्यापित करें। यह मूल चेकआउट की ब्रांच को बार-बार बदले बिना प्रत्येक कार्य को उसकी अपनी प्रोजेक्ट फ़ाइलें देता है।
स्रोत
Open new Terminal windows and tabs on Mac — Apple Support