दिलचस्प पोस्ट
एंड्रॉइड प्रोग्रेसबार यूआई कस्टम लेआउट लोकप्रिय ब्राउज़र में कितने समवर्ती AJAX (XmlHttpRequest) अनुरोधों की अनुमति है? अन्य पुस्तकालयों के बिना शुद्ध सी / सी ++ में बीएमपी छवि लेखन MySQL एर्रो 150 सीएसएस 2 चयनकर्ताओं का उपयोग करते हुए मैं एक तत्व का nth बच्चा कैसे प्राप्त करूं? एंड्रॉइड: मै मैप दृश्य के ज़ूम स्तर को अपने वर्तमान स्थान के आसपास 1 किमी त्रिज्या कैसे सेट करूं? ब्राउजर को फ्रीजिंग से तीव्र जावास्क्रिप्ट लूप को कैसे रोकें विंडो बनाम पेज बनाम UserControl WPF नेविगेशन के लिए? क्या आप एक बयान में MySQL में स्वत: वेतन वृद्धि मूल्य का उपयोग कर सकते हैं? फ़ाइल / फ़ोल्डर पहुंच अनुमति की जांच एक पिक्सेल के एक्स, वाई एक छवि से रंग समन्वय कैसे प्राप्त करें? मैं Python में urllib2 वाले पृष्ठों को कैसे प्राप्त कर सकता हूं? डीआईवी के बजाय टेबल्स Valgrind बहुत साधारण सी कार्यक्रम के लिए त्रुटियों की रिपोर्ट करता है रेल त्रुटि, YAML को पार्स नहीं कर सका

मैं रेपो प्राप्त करने के बाद जीआईटी-एसवीएन को एक दूरदराज शाखा के बारे में कैसे बताऊं?

मैं git-svn का उपयोग कर रहा हूँ मेरी कंपनी के केंद्रीय svn भंडार के खिलाफ काम करने के लिए हमने हाल ही में केंद्रीय रेपो में एक नई फीचर शाखा बनाई है मैं इसके बारे में git कैसे बताऊँ? जब मैं git branch -r चलाता हूं git branch -r मैं केवल उस शार्ट्स को देख सकता हूं जो मेरे git रेपो को आरम्भ करने के लिए svn रेपो के खिलाफ fetch के लिए मौजूद थीं?

वेब के समाधान से एकत्रित समाधान "मैं रेपो प्राप्त करने के बाद जीआईटी-एसवीएन को एक दूरदराज शाखा के बारे में कैसे बताऊं?"

आप मैन्युअल रूप से दूरस्थ शाखा जोड़ सकते हैं,

 git config --add svn-remote.newbranch.url https://svn/path_to_newbranch/ git config --add svn-remote.newbranch.fetch :refs/remotes/newbranch git svn fetch newbranch [-r<rev>] git checkout -b local-newbranch -t newbranch git svn rebase newbranch 

यदि आप सभी दूरस्थ svn शाखाओं को ट्रैक करना चाहते हैं, तो समाधान उतना सरल है जैसे:

 git svn fetch 

इससे सभी दूरस्थ शाखाएं प्राप्त होंगी जो अभी तक नहीं मिली हैं।

अतिरिक्त टिप: यदि आपने पहले ही ट्रंक को चेक किया है, और बाद में आप सभी शाखाओं को ट्रैक करना चाहते हैं, तो संपादित करें। git svn fetch .git/config इस तरह दिखने के लिए और फिर से चलाने के लिए git svn fetch :

 [svn-remote "svn"] url = https://svn/path_to_repo_root/ fetch = path_to_trunk:refs/remotes/git-svn branches = path_to_branches/*:refs/remotes/* 

मुख्य url को रिपॉज़िटरी जड़ को इंगित करनी चाहिए, और fetch में परिभाषित पथ और branches url सापेक्ष होनी चाहिए।

अगर आप सभी के बजाय केवल विशिष्ट शाखाएं प्राप्त करना चाहते हैं, तो git svn --help में एक अच्छा उदाहरण है:

 [svn-remote "huge-project"] url = http://server.org/svn fetch = trunk/src:refs/remotes/trunk branches = branches/{red,green}/src:refs/remotes/branches/* tags = tags/{1.0,2.0}/src:refs/remotes/tags/* 

git-svn पुराने संस्करणों के साथ, जब आप इस तरह से शाखाएं निर्दिष्ट करते हैं, तो आप git svn fetch साथ नई शाखाएं प्राप्त करने में सक्षम नहीं हो सकते हैं। एक वैकल्पिक हल इस तरह से अधिक fetch लाइनें जोड़ रही है:

 [svn-remote "huge-project"] url = http://server.org/svn fetch = trunk/src:refs/remotes/trunk fetch = branches/blue:refs/remotes/branches/blue fetch = branches/yellow:refs/remotes/branches/yellow branches = branches/{red,green}/src:refs/remotes/branches/* 

@ एंडीस्टेस द्वारा एक और वैकल्पिक हल: संपादित करें। .git/svn/.metadata और किसी भी नव-निर्दिष्ट शाखाओं या टैग्स के निर्माण से पहले एक संशोधन के लिए branches-maxRev या tags-maxRev को tags-maxRev करें। एक बार जब आप यह कर लें, तो नई एसवीएन दूरस्थ शाखा को ट्रैक करने के लिए git svn fetch चलाएं।

ऐसा प्रतीत होता है कि मुझे सिर्फ git svn fetch ; किसी तरह मैंने खुद को यह आश्वस्त किया था कि केवल बदलावों की जगह पूरे रेपो लाया जाएगा।

हो सकता है कि मैं इसे किसी तरह खराब कर दूंगा, लेकिन मैंने निर्देशों का पालन किया है और यह लगभग काम किया है। एकमात्र समस्या यह थी कि नब्रबैंक ट्रंक से अलग नहीं हुए थे। Gitk में, यह "फ्लोटिंग" सबके अपने आप में था; इसका ट्रंक के साथ कोई सामान्य पूर्वज नहीं था

इसका समाधान था:

  1. शाखा बनाई गई थी इससे पहले ट्रंक पर हुआ पिछले प्रतिबद्धता के SHA1 खोजें
  2. नई शाखा पर पहली प्रतिबद्धता के SHA1 को खोजें (संदेश संभवत: "नई शाखा बनाई गई है, ट्रंक से 12345" की नकल की गई है या कुछ और)
  3. git diff-tree <sha1 from step 1> <sha1 from step 2> – कोई आउटपुट नहीं होना चाहिए। यदि आउटपुट है, तो आपने गलत कमिट का चयन किया हो।
  4. git checkout local-newbranch git rebase <sha1 from step 1> git checkout local-newbranch git rebase <sha1 from step 1> यह नए पेड़ पर local-newbranch नया remotes/newbranch को remotes/newbranch करेगा लेकिन remotes/newbranch अभी भी डिस्कनेक्ट हो जाएगा।
  5. फ़ाइल पर जाएं। .git/refs/remotes/newbranch और इसे नए कमिट के पूर्ण SHA1 को शामिल करने के लिए संपादित करें ( newbranch ) जो वर्तमान में इंगित करते हुए पुरानी प्रतिबद्धता से मेल खाती है। (या शायद git-update-ref refs/remotes/newbranch <new-SHA> । धन्यवाद आंगक।)
  6. अगली बार जब आप git svn dcommit लिए newbranch करेंगे, तो आपको कुछ लॉग अपडेट करने के बारे में संदेशों का एक गुच्छा मिलेगा। मुझे लगता है यह सामान्य है

मैं gitk --all की सलाह देता हूं – पूरे समय पूरे खोलता है और अक्सर यह ताज़ा करने के लिए कि तुम क्या कर रहे हो मैं अब भी जीआईटी और जीआईटी एस एन वी के लिए नया हूँ इसलिए कृपया इस विधि में सुधार का सुझाव दें।

मुझे इस सुविधा के बारे में कोई दस्तावेज नहीं मिला है, लेकिन ऐसा लगता है कि git svn कॉन्फ़िगरेशन कई फ़ेच प्रविष्टियों का समर्थन करता है। इस तरह से आप अपनी संरचना में एक और रिमोट svn रिपॉजिटरी प्रविष्टि जोड़ने की आवश्यकता के बिना शाखाओं को अलग से जोड़ सकते हैं और कुछ निर्देशिकाओं की सभी शाखाएं प्राप्त करने के लिए वाइल्डकार्ड का उपयोग नहीं कर सकते।

मान लें कि आपका एसवीएन पेड़ सचमुच बहुत गहरा है, बिना किसी शाखा के बहुत सारे शाखाएं हैं, जैसे शाखाएं और उप-निर्देशिका जिसमें अधिक शाखाएं हैं

अर्थात

 trunk branches -> branch1 -> sub-dir1 -> branch2 -> branch3 -> sub-dir2 -> branch4 -> sub-dir3 -> branchX <... hundreds more ...> 

और आप अपने जीआईटी भंडार में शामिल होने वाली कुछ शाखाओं को हाथ में लेना चाहते हैं।

आप पहले किसी भी अतिरिक्त शाखाओं के बिना केवल ट्रंक के साथ अपनी रिपॉजिटरी का उपयोग कर सकते हैं:

 git svn clone -r 10000:HEAD https://svn.com/MyRepo myrepo --prefix=svn/ --trunk=trunk 

उसके बाद आपको निम्न विन्यास देखना चाहिए:

 localhost: elhigu$ git config --get-regexp "svn-remote." svn-remote.svn.url https://svn.com/MyRepo svn-remote.svn.fetch trunk:refs/remotes/svn/trunk 

जब कभी आप MyRepo से नई शाखा प्राप्त करना चाहते हैं, तो आप बस नई फेच प्रविष्टियों को कॉन्फ़िगरेशन से जोड़ सकते हैं:

 git config --add svn-remote.svn.fetch branches/sub-dir2/branch4:refs/remotes/svn/branches/sub-dir2/branch4 

या आप .git / config में एक ही कॉन्फ़िगरेशन को संपादित कर सकते हैं

नई शाखाओं को लाने के लिए उन्हें सिर्फ विन्यास में जोड़ने के बाद:

 git svn fetch -r 10000:HEAD 

[संपादित करें] कभी-कभी नए जोड़े की शाखाओं को लाने के लिए सभी पैरामीटर के साथ लाने के लिए आवश्यक लगता है:

 git svn fetch --all -r 10000:HEAD 

Git-svn quirks से निपटने के बजाय आप SubGit कोशिश कर सकते हैं

सबवीट को सबवर्सन रिपॉजिटरी में स्थापित करना होगा उसके बाद एक विशेष git-svn आदेशों के उपयोग के बजाय मानक git वर्कफ़्लो का उपयोग कर सकते हैं:

  1. नई प्रतिबद्धता धक्का:

    Git-SVN:

     $ git commit $ git svn rebase $ git svn dcommit 

    SubGit:

     $ git commit $ git push 
  2. आने वाले परिवर्तनों को प्राप्त करना

    Git-SVN:

     $ git svn rebase 

    SubGit:

     $ git pull [--rebase] 
  3. एक नई शाखा बनाना:

    Git-SVN:

     $ git svn branch foo $ git checkout -b foo -t remotes/foo $ git commit $ git svn dcommit 

    SubGit:

     $ git checkout -b foo $ git commit $ git push 

अधिक जानकारी के लिए सबजीट प्रलेख देखें।

Vjangus 'उत्तर का एक सरलीकरण:

यदि आप एसवीएन में मानक लेआउट का उपयोग कर रहे हैं और सामान्य एस एन वी इनिट किया है, तो git-svn आपके लिए कॉन्फिग सामान करेगा। बस:

  1. एसवीएन में शाखा-प्रतिलिपि का पता लगाएं
  2. Git-svn के साथ उस संशोधन को प्राप्त करें
  3. नई स्थानीय शाखा ट्रैकिंग दूरस्थ बनाएं

एक उदाहरण। एसवीएन यूआरएल एसवीएन svn+ssh://gil@svn.myplace.com/repo एसवीएन शाखा मैं नया ब्रांच देख रहा हूं। स्थानीय जीआईटी शाखा (दूरदराज के newbranch ब्रांच पर नज़र newbranch ) git-newbranch

चरण 1: शाखा-प्रतिलिपि का पता लगाएं

     # svn लॉग --स्टॉप-ऑन-कॉपी svn + ssh: //gil@svn.myplace.com/repo/branches/newbranch |  पूंछ -4
     आर 7802 |  कोई |  2014-03-21 18:54:58 +0000 (शुक्र, 21 मार्च 2014) |  1 लाइन

     सिर को नया ब्रांच में बांट रहा है
     -------------------------------------------------- ----------------------

तो एसवीएन में शाखा बिंदु 7802 का संशोधन है।

चरण 2: संशोधन प्राप्त करें

     # जीआईटी एस.वी.एन. फेच-आर 7802
     संभव शाखा बिंदु मिला: svn + ssh: //gil@svn.myplace.com/repo/trunk=> svn + ssh: //gil@svn.myplace.com/repo/branches/newbranch, 7801
     शाखा के पैरेंट मिला: (रेफरी / रिमोट / ट्रंक) 8dcf3c5793ff1a8a79dc94d268c91c2bf388894a
     Do_switch के साथ माता-पिता के पीछे
     माता-पिता को सफलतापूर्वक अपनाया गया
     R7802 = 9bbd4194041675ca5c9c6f3917e05ca5654a8a1e (रेफरी / रिमोट / नब्रब्रंच)

git-svn ने सभी काम किया और अब दूरस्थ के बारे में जानता है:

     # जीआईटी शो-रिफ |  grep newbranch
     2df23af4733f36f5ad3c14cc1fa582ceeb3edb5c रिफ्स / रिमोट / नब्रबैंच

चरण 3: रिमोट पर नज़र रखने वाली अपनी नई स्थानीय शाखा बनाएं:

     # जीआईटी चेकआउट -बी जीआईटी-न्यूब्रंच -टी न्यूब्रंच
     फ़ाइलें जांचना: 100% (413/413), किया गया
     स्थानीय रेफरी रिफ / रीमोट / न्यूब्रैंच को ट्रैक करने के लिए स्थापित शाखा जीआईटी-न्यूब्रंच।
     एक नई शाखा 'git-newbranch' के लिए स्विच

Vjangus 'उत्तर में जोड़ने के लिए, जो मेरी मदद की, मैं भी उपयुक्त बिंदु पर ट्रंक में शाखाओं को टाई करने के लिए इस्तेमाल git grafts जोड़ने के लिए उपयोगी पाया – जीआईटी इतिहास को देखने और विलय को सही ढंग से करने की इजाजत देता है

यह हंस के साथ। .git/info/grafts लिए एक लाइन जोड़ने का मामला है:

 <initial branch commit> <parent commit in trunk> 

जैसे।

 378b0ae0902f5c2d2ba230c429a47698810532e5 6c7144991381ce347d4e563e9912465700be0638 

क्रेडिट के लिए http://evan-tech.livejournal.com/255341.html

(मैं इसे एक टिप्पणी के रूप में जोड़ूंगा, लेकिन मेरे पास पर्याप्त प्रतिष्ठा नहीं है।)

यदि आप एक वैध लेआउट के साथ जांच नहीं करते हैं, तो आप किसी दूरस्थ शाखा की जांच नहीं कर पाएंगे।

मैं यह करता हूं:

 git svn init -s <svn path with no trunk> local_repo cd local_repo git svn fetch ## wait 

उसके बाद, आप एक दूरस्थ शाखा पर जा सकते हैं:

 git checkout --track -b branch_name branch_name 

तब आप स्वचालित रूप से अपनी शाखा में स्विच हो जाएंगे।