2009-10-12 12 views
31

मुझे अक्सर ऐसा लगता है कि मैं तुरंत एक एसवीएन भंडार पर काम करना चाहता हूं। लेकिन एक साधारण git svn clone [url] भी पूरे इतिहास को क्लोन करता है। तो मैं चीजों को गति देना चाहता हूं। पहला भाग केवल आपके गिट भंडार में अंतिम संशोधन लाने के लिए है। मैं इसे इतना पसंद करते हैं:गिट svn क्लोन: संशोधन इतिहास लाने के लिए कैसे हटाएं

URL=http://google-web-toolkit.googlecode.com/svn/trunk/ 
REV=`svn info $URL |grep Revision: | awk '{print $2}'` 
PROJECT_FOLDER=google-web-toolkit-readonly 

git svn clone -r$REV:HEAD $URL $PROJECT_FOLDER 

(StackOverflow लेख में और अधिक जानकारी:।। "How to git-svn clone last n revisions from svn"

इस तरह से मैं और चल रहा हूँ और तुरंत काम कर सकते हैं लेकिन इतिहास के स्थानीय प्रतिलिपि के बिना

सवाल है, मैं कैसे बाद में इतिहास SVN भंडार से ला रहा है?

और अधिमानतः, इस की मात्रा में किया जा सकता है, का कहना है कि 1000 के संशोधन (उलटे क्रम में)। यहाँ किसी भी मदद की बहुत सराहना की जाएगी :)

+0

मुझे निम्नलिखित समाधान उपयोगी पाया गया है http://stackoverflow.com/a/2348596/429476 –

उत्तर

21

मुझे पता चला कि यह कैसे किया जा सकता है। चाल git svn clone का उपयोग नहीं करने के लिए है। इसके बजाय, git svn init और git svn fetch व्यक्तिगत रूप से उपयोग करें। उदाहरण के संशोधित:

URL=http://google-web-toolkit.googlecode.com/svn/trunk/ 
REV=`svn info $URL |grep Revision: | awk '{print $2}'` 
PROJECT_FOLDER=google-web-toolkit-readonly 

mkdir $PROJECT_FOLDER 
cd !$ #goes into dir named $PROJECT_FOLDER 
git svn init -s $URL #-s implies --stdlayout with /trunk /tags /branches 
git svn fetch -r $REV 

# hack, hack, hack 

# or update history (fetch 50 revisions back each loop 
for ((r=$REV; r>0; r-=50)); 
do 
    git svn fetch -r $r:HEAD 
done 
+3

यह मेरे लिए काम नहीं कर रहा है, यह तब आता है जब मैं गिट svn fetch -r 1000 करने की कोशिश करता हूं: HEAD – Verhogen

+0

यह मेरे लिए या तो रॉब क्रॉफर्ड द्वारा प्रस्तावित समाधान के लिए नहीं है। मेरे लिए, प्रारंभिक प्रश्न अनुत्तरित रहता है। – sthiers

+2

@verhogen - 'git svn fetch -r 1000: HEAD' का अर्थ है" सभी संशोधनों को वर्तमान 1000 तक संशोधित 1000 तक शुरू करें "। यदि आपके पास, एसवीएन में 800 संशोधन हैं, तो यह कुछ भी नहीं लाएगा। यदि आपके पास 50k संशोधन थे, तो यह आपके इरादे से अधिक रास्ता लाएगा। –

0

git svn fetch "याद" में संशोधन यह पहले देखा है प्रकट होता है। मैं पर्वतमाला कर के साथ सफलता किया गया है:

git svn fetch -r 0:100 
git svn fetch -r 100:200 
git svn fetch -r 4500 
git svn rebase 
git svn fetch -r 200:300 

मैं हाल ही में संशोधन दिलवाया और फिर अंतराल " में भरने" शुरू कर दिया। यह काम तो ठीक करता है।

जेस्पर - यदि आपके भंडार में संशोधन 1000 नहीं है, तो इसके लिए कुछ भी नहीं है। सुनिश्चित करें कि आपके द्वारा उपयोग किए जा रहे संशोधन संख्या मान्य हैं!

+1

यह सुनिश्चित नहीं है कि यह क्या हासिल करता है। यह सफल होता है, लेकिन एक गिट लॉग आपको अपने प्रारंभिक fetch और आगे से कुछ भी नहीं दिखाएगा। –

5

सुझाए गए उत्तरों में से कोई भी काम नहीं करेगा। एक संशोधन के साथ git svn fetch केवल पहले से क्लोन किए गए नए संशोधन को पुनर्प्राप्त करेगा। आप पुराने संशोधन पर वापस जाने के लिए git svn reset का उपयोग करने में सक्षम हो सकते हैं और वहां से पुनर्प्राप्त कर सकते हैं, लेकिन आपको अपने नए संशोधन को पूर्ण पेड़ पर वापस 'भ्रष्टाचार' करने के लिए कुछ गंदे काम करना होगा (एसवीएन संशोधन में एसएचए 1 गिट संशोधन के पूरे माता-पिता पर निर्भर करता है)। यदि आप स्केलपेल git के साथ काम कर रहे हैं, तो आप इसके लिए जाते हैं।

इस मुद्दे से बचने के लिए बहुत आसान है।

  • अंतिम कुछ संशोधनों का प्रारंभिक क्लोन करें, ताकि आप तुरंत काम कर सकें;
  • किसी अन्य निर्देशिका/गिट भंडार में पूर्ण इतिहास का एक और क्लोन प्रारंभ करें;
  • जितना चाहें उतना आंशिक इतिहास में काम करें;
  • जब पूरा क्लोन पूरा हो जाता है, तो आंशिक भंडार से अपने काम को प्रतिलिपि बनाने के लिए http://www.sanityinc.com/articles/relocating-git-svn-repositories/ जैसे दृष्टिकोण का उपयोग करें।

तो, यह आंशिक उत्तर है - आप बाद में इतिहास कैसे प्राप्त कर सकते हैं? इसे एक और रेपो में लाएं और आपको जिस चीज की आवश्यकता है उसकी प्रतिलिपि बनाएँ। क्या यह 1000 के हिस्सों में रिवर्स ऑर्डर में किया जा सकता है? स्केलपेल के साथ, और बहुत धैर्य के साथ, यह सकता है, लेकिन यह इसकी संभावना नहीं है।git svn fetch प्रत्येक ब्लॉक द्वारा पकड़े गए उन सभी पहले संशोधनों के ऊपरी भाग को आगे बढ़ाने वाला पूरा लांच आगे बढ़ने जा रहा है, और फिक्सअप कठिन हो जाएगा।

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