2010-05-08 8 views
12

मैं गिट-एसवीएन और गीथब का उपयोग कर अपस्ट्रीम एसवीएन परिवर्तनों को कैसे ट्रैक करूं?गिट-एसवीएन और जिथब के साथ अपस्ट्रीम एसवीएन परिवर्तनों को ट्रैक करना?

मैं एक SVN रेपो कन्वर्ट करने के लिए Git-SVN इस्तेमाल किया GitHub पर git करने के लिए:

$ git svn clone -s http://svn.osqa.net/svnroot/osqa/ osqa 
$ cd osqa 
$ git remote add origin [email protected]:turian/osqa.git 
$ git push origin master 

मैं तो मेरे Git रेपो, प्रतिबद्ध में कुछ बदलाव किए हैं, और GitHub को धक्का दे दिया।

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

तो मैंने निम्नलिखित किया। लेकिन कोई भी आदेश वांछित के रूप में काम नहीं करता है। मैं git-svn और github का उपयोग कर अपस्ट्रीम एसवीएन परिवर्तनों को कैसे ट्रैक करूं? मैं क्या गलत कर रहा हूं?

$ git svn clone -s http://svn.osqa.net/svnroot/osqa/ osqa 
$ cd osqa 
$ git remote add origin [email protected]:turian/osqa.git 
$ git push origin master 
To [email protected]:turian/osqa.git 
! [rejected]  master -> master (non-fast forward) 
error: failed to push some refs to '[email protected]:turian/osqa.git' 
$ git pull 
remote: Counting objects: 21, done. 
remote: Compressing objects: 100% (17/17), done. 
remote: Total 17 (delta 7), reused 9 (delta 0) 
Unpacking objects: 100% (17/17), done. 
From [email protected]:turian/osqa 
* [new branch]  master  -> origin/master 
From [email protected]:turian/osqa 
* [new tag]   master  -> master 
You asked me to pull without telling me which branch you 
want to merge with, and 'branch.master.merge' in 
your configuration file does not tell me either. Please 
name which branch you want to merge on the command line and 
try again (e.g. 'git pull <repository> <refspec>'). 
See git-pull(1) for details on the refspec. 
... 
$ /usr//lib/git-core/git-svn rebase 
warning: refname 'master' is ambiguous. 
First, rewinding head to replay your work on top of it... 
Applying: Added forum/management/commands/dumpsettings.py 
error: Ref refs/heads/master is at 6acd747f95aef6d9bce37f86798a32c14e04b82e but expected a7109d94d813b20c230a029ecd67801e6067a452 
fatal: Cannot lock the ref 'refs/heads/master'. 
Could not move back to refs/heads/master 
rebase refs/remotes/trunk: command returned error: 1 

उत्तर

5

ऐसा लगता है कि, आपके रिबेस के अपवाद के साथ, सबकुछ अपेक्षित हुआ, लेकिन बहुत अधिक बोलीभाषा के साथ आप उम्मीद कर सकते हैं। यहां मुझे लगता है कि मैं एक नई मशीन पर बिट्स बनाने/एकीकृत करने के लिए क्या करूंगा:

  1. अपने एसवीएन भंडार को क्लोन करें। आदर्श रूप से, मैं गिट रेपो से शुरू करना चाहता हूं क्योंकि यह आपका है और यह एक ज्ञात राज्य में है, लेकिन मुझे में किसी भी तरह से पता नहीं है कि एसवीएन से सामग्री को खींचने के लिए खींचें। मैं क्लोनिंग करते समय --prefix=svn/ जोड़ना चाहता हूं ताकि एसवीएन से मेरी सभी दूरस्थ शाखाओं को इस तरह एनोटेट किया जा सके।
  2. अपनी उत्पत्ति जोड़ें (जैसे आपने किया है)।
  3. काम करने के लिए स्थानीय शाखा बनाएं। git co -b local-branch svn/branchname। अब आपके पास सामान के साथ खेलने के लिए एक अच्छा, स्थानीय क्षेत्र है।
  4. सुनिश्चित करें कि आप उस स्थानीय शाखा पर हैं जो आपने अभी बनाया है (आपको होना चाहिए)।
  5. गिथब से खींचें। आपने इसे सही तरीके से किया है, लेकिन अस्पष्टता से। अस्पष्टता को दूर करने के लिए, स्पष्ट रहें: git pull origin master (उत्पत्ति से मास्टर शाखा तक खींचें)।
  6. सब कुछ सिंक करने के लिए एसवीएन से रीबेस करें। git svn rebase

मैंने यह कोशिश नहीं की है, लेकिन यह एक बहुत ही सामान्य वर्कफ़्लो है और आपको जो त्रुटियां मिल रही हैं, वे दो रिमोट्स (एसवीएन और गीथूब) की आपकी सेवा से संबंधित प्रतीत नहीं होती हैं। वे थोड़ा अधिक सामान्य और आपके वर्कफ़्लो से संबंधित होते हैं और आप कमांड को कैसे कॉल कर रहे हैं।

संबंधित मुद्दे