एक साथ दो शाखाओं पर काम करने वाला गिट


168

मेरी कई शाखाओं के साथ एक परियोजना है।

मैं कई शाखाओं पर एक साथ काम करना चाहूंगा, साथ ही साथ आगे और पीछे नहीं git checkout

क्या ऐसा कोई तरीका है जिससे मैं पूरी रिपॉजिटरी को कहीं और कॉपी कर सकूं?



1
Git 2.5+ (Q2 2015) आधिकारिक रूप से नए कमांड के साथ इसका समर्थन करेगा git checkout --to=<path>। देखें नीचे मेरा उत्तर
VonC

2
दरअसल, कमांड git worktree add <path> [<branch>](Git 2.5 rc2) होगा
VonC

जवाबों:


156

Git 2.5+ (Q2 2015) इस सुविधा का समर्थन करता है!

यदि आपके पास git repo cool-app, cd to root ( cd cool-app) है, तो दौड़ें git worktree add ../cool-app-feature-A feature/A। यह feature/Aअपनी नई समर्पित निर्देशिका में शाखा की जाँच करता है cool-app-feature-A

यह एक पुरानी स्क्रिप्ट को बदल देता है contrib/workdir/git-new-workdir, एक अधिक मजबूत तंत्र के साथ, जहां "लिंक" काम करने वाले पेड़ वास्तव में मुख्य रेपो नए $GIT_DIR/worktreesफ़ोल्डर में दर्ज किए जाते हैं (ताकि विंडोज सहित किसी भी ओएस पर काम करें)।

एक बार, जब आप एक रेपो (जैसे एक फ़ोल्डर में /path/to/myrepo) क्लोन कर लेते हैं, तो आप विभिन्न स्वतंत्र रास्तों ( /path/to/br1, /path/to/br2) में विभिन्न शाखाओं के लिए कार्यपत्रक जोड़ सकते हैं , जबकि उन काम करने वाले पेड़ों को मुख्य रेपो इतिहास से जुड़ा हुआ है ( --git-dirअब एक विकल्प का उपयोग करने की आवश्यकता नहीं है)

" Git के साथ कई कार्यशील निर्देशिकाएं " देखें।

और एक बार जब आप वर्कट्री बना लेते हैं, तो आप इसे स्थानांतरित या हटा सकते हैं (Git 2.17+, Q2 2018 के साथ)।


2
यह नया स्वीकृत उत्तर होना चाहिए, क्योंकि 2.5.X अब अनुशंसित संस्करण है, यहां तक ​​कि विंडोज़ के लिए भी। igimur.com/oQvUhVl.png git-scm.com/download/win
RAnders00

40

$ GIT_SRC_DIR / contrib / workdir / git-new-workdir पर एक नज़र डालें

एक कार्यशील निर्देशिका बनाने के लिए एक सरल लिपि जो एक बहाने वाले रिपॉजिटरी में इंगित करने के लिए सीमलिंक का उपयोग करती है। यह अलग-अलग कार्यशील निर्देशिकाओं में अलग-अलग शाखाएं देता है लेकिन सभी एक ही भंडार से।



2
मुझे पता है कि यह पुराना है, लेकिन क्या आप कृपया कुछ स्पष्टीकरण प्रदान कर सकते हैं।
dav_i


@ StefanNäwe आह मैं उलझन में था - सुबह बहुत जल्दी ... लिंक के साथ अपना जवाब अपडेट किया।
dav_i

0

मैं अपनी छोटी सी स्क्रिप्ट का सुझाव देता हूं http://www.redhotchilipython.com/en_posts/2013-02-01-clone-per-eateateat.html

यह क्लोन क्लोन करेगा और मूल रेपो में कॉन्फिगर ("लुक" को बदलेगा, इसलिए पुल / पुश मूल रूप से "मुख्य" रेपो में जाएगा), लेकिन यह वास्तविक बूटस्ट्रैपिंग से एक एब्स्ट्रैक्शन की सेवा के लिए काफी सरल है।


0

हमारे दोस्त की तरह VonC ने पांच महीने पहले कहा था, अब संस्करण 2.5.x के बाद से एक नया फीचर आया है जो काम करता है। Git worktree


क्या यह वैसा ही नहीं है जैसा मैंने अपने उत्तर में 5 महीने पहले उल्लेख किया था ?
VonC

ऑप्स। अब मुझे बहुत बुरा लग रहा है। मैंने उस पर उचित ध्यान नहीं दिया है। मेरी गलती।

0

Git एक ही समय में कई वर्कट्री का समर्थन करता है। अधिक जानकारी के लिए देखें:

ID के साथ कई वर्कट्री को सपोर्ट करना कितना कठिन है। उदाहरण के लिए यह वर्कट्री का समर्थन करने के लिए JGet (ग्रहण आईडी) में एक वृद्धि अनुरोध है।

तो, आपको बहुत सी समस्याओं के साथ मैन्युअल रूप से प्रोजेक्ट (कमांड लाइन) का प्रबंधन करना होगा या एक IDE में एक ही वर्कट्री के साथ काम करना होगा।


अभी तक, यह उत्तर सही नहीं है। कृपया जवाब अपडेट करें।
नरेन्द्र-चौधरी

-2

वास्तव में नहीं, क्योंकि Git केवल रिपॉजिटरी डायरेक्टरी के रिपॉजिटरी डेटा की एक वर्किंग कॉपी होने का समर्थन करता है ।

यदि आप एक ही रिपॉजिटरी में दो अलग-अलग वर्किंग कॉपियों के साथ कमिट करना / खींचना चाहते हैं, तो आप एक नंगे रिपॉजिटरी बना सकते हैं और इसे दो वर्किंग कॉपियों में क्लोन कर सकते हैं ।

जब भी आपने कुछ समाप्त किया है, तो आप बस "मुख्य" नंगे भंडार को धक्का देते हैं ।

कुछ संकेत:

man git-clone

git clone --bare


3
"Git केवल रिपॉजिटरी डेटा की एक वर्किंग कॉपी होने का समर्थन करता है" -1 सच नहीं है, इसके बारे में जवाब देखें git-new-workdir
sleske

यह अच्छा विचार है। बस इसे दो बार क्लोन करें।
सर्ग विनोग्रैडॉफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.