मैं अभी गिट के साथ शुरू कर रहा हूं और मेरे पास एक सवाल है। मेरे ऐप में 10 अन्य डेवलपर्स काम कर रहे हैं, प्रत्येक व्यक्ति की अपनी शाखा dev_XXXXX की तरह है। तो अगर मैं भंडार का क्लोन करता हूं, तो क्या उनके सभी कोड मेरी मशीन पर कॉपी हो जाते हैं? उस मामले में मुझे वह नहीं चाहिए। मान लीजिए कि मेरी शाखा dev_swamy है, तो मैं फिर स्थिर शाखा और dev_swamy कैसे क्लोन करूँ? धन्यवाद।गिट में केवल स्थिर और एक अन्य शाखा क्लोन करें?
उत्तर
डिफ़ॉल्ट git clone
तक सभी शाखाओं लाने होगा, लेकिन उन शाखाओं रिमोट ट्रैकिंग शाखाओं के रूप में संग्रहीत किया जाएगा: उदाहरण के शाखा 'dev_XXXXX' के लिए 'मूल/dev_XXXXX' ('के साथ refs/रिमोट/मूल के रूप में जमा की जाएगी/dev_XXXXX 'पूर्ण नाम के रूप में)। उन रिमोट-ट्रैकिंग शाखाएं git branch
आउटपुट में दिखाई नहीं देगी: आपको सभी शाखाओं को सूचीबद्ध करने के लिए रिमोट-ट्रैकिंग शाखाओं (या git branch -a
) सूचीबद्ध करने के लिए git branch -r
की आवश्यकता होगी। यदि वे शाखाएं मुख्य रेखा से बहुत ज्यादा अलग नहीं होती हैं, तो वे भंडार में बहुत अधिक डिस्क स्थान नहीं ले पाएंगे। इसलिए मैं नहीं देखता कि आप केवल चयनित शाखाओं को क्यों क्लोन करना चाहते हैं।
फिर भी अगर आप केवल दो चयनित शाखाओं के साथ एक क्लोन करना चाहते हैं, तो आप इसे इस तरह कर सकते हैं:
पहले, नया खाली भंडार
$ mkdir repoclone $ cd repoclone/ $ git init Initialized empty Git repository in /home/user/repoclone/.git/
बनाने फिर अपने डेटा संग्रह स्थान जुड़ 'मूल' नाम के तहत (जैसे "गिट क्लोन" इसका नाम होगा), "git remote" कमांड का उपयोग करके केवल दो शाखाओं की ट्रैकिंग का अनुरोध करना: 'मास्टर' और 'dev_swamy'। जांचें कि यह सही ढंग से जोड़ा गया था।
$ git remote add -t master -t dev_swamy origin [email protected]:repo.git $ git remote origin $ git remote show origin * remote origin Fetch URL: [email protected]:repo.git Push URL: [email protected]:repo.git HEAD branch: master Remote branches: master new (next fetch will store in remotes/origin) dev_swamy new (next fetch will store in remotes/origin)
यदि स्थिर शाखा को 'मास्टर' के बजाय 'स्थिर' कहा जाता है, तो आप उपर्युक्त उदाहरण को संशोधित करना चाहते हैं। यदि आप निर्दिष्ट शाखा को रिमोट में डिफ़ॉल्ट शाखा के रूप में चाहते हैं तो
-m <branch>
विकल्प भी है।'मूल' से प्राप्त करें (आप भी
-f
विकल्प का उपयोग कर के ऊपर "Git दूरस्थ जोड़ें" करने के लिए कर ऐसा कर सकता है):$ git fetch remote: Counting objects: 282, done. remote: Compressing objects: 100% (193/193), done. remote: Total 282 (delta 82), reused 0 (delta 0) Receiving objects: 100% (282/282), 81.30 KiB | 135 KiB/s, done. Resolving deltas: 100% (82/82), done. From [email protected]:repo.git * [new branch] master -> origin/master * [new branch] dev_swamy -> origin/dev_swamy From [email protected]:repo.git * [new tag] v1.0 -> v1.0 * [new tag] v1.0.1 -> v1.0.1 * [new tag] v1.1 -> v1.1
सेट करें स्थानीय शाखा 'मास्टर' (तुम कहाँ करना होगा अपने काम) 'मूल/मास्टर' का पालन करने के (नदी के ऊपर के रूप में 'मूल/मास्टर') के लिए, जैसे "Git क्लोन" करना होगा:
$ git checkout -t origin/master Branch master set up to track remote branch master from origin. Already on 'master'
आप शाखा 'dev_swamy' के लिए यह दोहरा सकते हैं।
अब आप देख सकते हैं कि कॉन्फ़िगरेशन फ़ाइल कैसा दिखता है। आप निम्न की तरह दिखने के लिए
.git/config
फ़ाइल संपादित करके और फिर "गिट फ़ेच" संपादित करके एक ही परिणाम प्राप्त कर सकते हैं। (; प्रति-उपयोगकर्ता कॉन्फ़िग फ़ाइल में आमतौर पर अर्थात सेट 'user.name' और 'user.email' config चर)$ cat .git/config # or just open this file in your editor [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = [email protected]:repo.git fetch = +refs/heads/master:refs/remotes/origin/master fetch = +refs/heads/dev_swamy:refs/remotes/origin/dev_swamy [branch "master"] remote = origin merge = refs/heads/master
भंडार पर काम शुरू करने से पहले Git करने के लिए अपने आप को लागू करने के लिए मत भूलना!
यदि आप क्लोन करते हैं, तो सभी शाखाओं में सभी संशोधन क्लोन किए जाते हैं, लेकिन क्लोन रिपोजिटरी डिफ़ॉल्ट रूप से मास्टर की जांच करेगी।
बस चयनित शाखाएं लेना मुश्किल है क्योंकि गिट वास्तव में नहीं सोचता कि आपको इस तरह से काम करना चाहिए। आप मैन्युअल रूप से शाखाओं नीचे खींचने के लिए है:
mkdir repoclone
cd repoclone
git init
git remote add origin git://remote/url
git fetch origin master:master
git fetch origin dev_XXX:dev_XXX
से ऊपर मैं क्या काम किया पता था कि है। हालांकि, अगर आप एक गिट रेपो सेट करना चाहते हैं जो सामान्य के रूप में काम करता है, तो इसकी रिमोट शाखाओं का एक और संकीर्ण दृश्य है? आप बहुत आसानी से ऐसा कर सकते हैं:
mkdir repoclone cd repoclone git init git remote add origin git://remote/url # now open .git/config for editing in your editor # replace the following line (grab all remote branches) fetch = +refs/heads/*:refs/remotes/origin/* # replace with lines listing exactly which branches you want fetch = +refs/heads/master:refs/remotes/origin/master fetch = +refs/heads/dev_XXX:refs/remotes/origin/dev_XXX # save the file, now run git fetch
मुझे लगता है कि यहाँ और अधिक महत्वपूर्ण सवाल क्या दूसरों को प्रेरित कर दिया जाएगा नहीं आप क्लोनिंग की जाएगी क्या या खींच है। चूंकि प्रत्येक डेवलपर अपनी शाखा पर काम कर रहा है, एक और सवाल यह है कि आप एक सामान्य कोड बेस के साथ कैसे समाप्त होते हैं। क्या डेवलपर्स अपनी शाखाओं को मास्टर करने के लिए विलय कर रहे हैं? और फिर वे अपनी बदली हुई मास्टर शाखा को केंद्रीय भंडार में डाल रहे हैं? यदि ऐसा है, तो वैसे भी अन्य डेवलपर्स की शाखाओं को खींचने का कोई तरीका नहीं है।
यदि ऐसा नहीं है, तो मैं यह देखने में विफल रहता हूं कि आप एक कार्यशील टीम कैसे बना सकते हैं।
और जैसा कि मैंने अंतिम विचार किया: मुझे यह जानकर उत्सुकता होगी कि आप अन्य डेवलपर्स की शाखाओं को अपने भंडार में क्यों नहीं रखना चाहते हैं?
ऐसा करने का एक और तरीका प्रत्यक्ष क्लोन से बचने के लिए है, लेकिन इसके बजाय मैन्युअल रूप से रिचस्पेक्स लाने के कस्टम सेट के साथ रिमोट जोड़ें।
उदा।
mkdir myclone
cd myclone
git init
git remote add origin url://origin.repo
# Add fetch rules for the branches that we want to track
git config remote.origin.fetch +refs/heads/master:+refs/remotes/origin/master
git config --add remote.origin.fetch +refs/heads/dev_swamy:+refs/remotes/origin/dev_swamy
# fetch now fetches just what we need, subsequently it will do incremental fetches
git fetch
# Creating local branches tracking the remote branches
git checkout -b master origin/master
git branch dev_swamy origin/dev/swamy
- 1. एक शाखा में गिट क्लोन
- 2. आप केवल एक ही गिट शाखा (और कोई अन्य शाखा) कैसे धक्का देते हैं?
- 3. गिट क्लोन के बाद, मुझे अपनी शाखा
- 4. गिट एक और शाखा
- 5. गिट: शाखा स्विच करें और
- 6. एक गिट रिपोजिटरी को केवल एक गैर-मास्टर शाखा के साथ कैसे क्लोन करता है?
- 7. जीथ्यूब के माध्यम से एक डीआईआर को नवीनतम स्थिर शाखा कैसे क्लोन करें?
- 8. गिट: एक क्लोन को एक नई शाखा में कैसे चालू करें?
- 9. गिट स्विचिंग शाखा
- 10. गिट में शाखा कब करें?
- 11. गिट क्लोन - बेयर/fetch
- 12. गिट शाखा
- 13. एक अलग गिट शाखा
- 14. गिट: कैसे पूर्ववत करें * और * पिछली शाखा
- 15. गिट अद्यतन एक अप्रयुक्त शाखा
- 16. गिट क्लोन से गायब फ़ाइलें
- 17. Mercurial में सर्वोत्तम प्रथाओं: शाखा बनाम क्लोन, और आंशिक विलय?
- 18. गिट क्लोन
- 19. ग्रेड: एक कार्य में एक गिट रेपो कैसे क्लोन करें?
- 20. शाखा से Mercurial क्लोन
- 21. गिट मास्टर शाखा में
- 22. गिट शाखा मास्टर शाखा
- 23. केवल मास्टर शाखा एक Git रेपो
- 24. घर निर्देशिका में गिट क्लोन
- 25. LAN के भीतर अन्य पीसी से विंडोज़ में एक रेपो क्लोन कैसे गिट करें?
- 26. गिट शाखा (कोई शाखा नहीं)
- 27. एक गिट शाखा दो शाखाओं में विभाजित करें?
- 28. गिट शाखा
- 29. गिट केवल एक शाखा से फ़ाइलों को हटाएं
- 30. गिट: एक निश्चित रिमोट शाखा
आह! यह कुछ ऐसा है जो मैं थोड़ी देर के लिए सोच रहा था - क्या केवल एक शाखा क्लोन करने का कोई तरीका है। इसे अपने सिर पर बदलने और केवल वही चीज़ लाने के लिए एक दिलचस्प विचार है जो आपको चाहिए। लेकिन पहला fetch इस त्रुटि उत्पन्न करता है: "घातक: मौजूदा शाखा रिफ्रेंस/हेड/गैर-नंगे भंडार के मास्टर में लाने से इनकार करते हुए" –
आधुनिक गिट के साथ बीटीडब्ल्यू आप 'गिट इनिट रिपोक्लोन' –
@Steve का उपयोग कर सकते हैं: आह, आप सही हैं । मास्टर सेट करने के लिए आप "गिट फ़ेच मूल मास्टर; गिट रीसेट --हार्ड FETCH_HEAD'" के साथ प्रतिस्थापित कर सकते हैं। – u0b34a0f6ae