2009-03-10 13 views
6

मेरे पास पहले से ही एक एसवीएन पढ़ा गया है जो केवल रेपो चेक आउट (svn co और git svn नहीं) पढ़ता है। मैंने कुछ बदलाव किए हैं और गिट का उपयोग करके काम करते हैं जिसे फिर जिथब तक पहुंचाया जाता है।क्या इस तथ्य के बाद गिट में svn इतिहास आयात करने का कोई तरीका है?

इस बिंदु पर, गिट में svn से सभी इतिहास नहीं हैं। मैं सोच रहा था कि इस बिंदु पर इसे निकालने और आयात करने का कोई तरीका था या नहीं।

विभिन्न गिट-एसवीएन मार्गदर्शिकाएं दिखाती हैं कि कैसे एक स्वच्छ रेपो आयात करना है और इतिहास को स्थानांतरित करना है, लेकिन ऐसा नहीं है जो मुझे मिल सकता है जो पहले से ही उपयोग में है।

उत्तर

5

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

8

पूरा करने के लिए Thilo के good answer, एक बार आप एक Git में SVN रेपो आयात किया है, तो आप उस Git भंडार तुम्हारा में एक स्क्रिप्ट के साथ जोड़ सकते हैं के रूप में merging in unrelated git branches

#!/bin/bash 

set -e 

if test -z "$2" -o -n "$3"; then 
    echo "usage: $0 REPO BRANCHNAME" >&2 
    exit 1 
fi 

repo=$1 
branch=$2 

git fetch "$repo" "$branch" 

head=$(git rev-parse HEAD) 
fetched=$(git rev-parse FETCH_HEAD) 
headref=$(git rev-parse --symbolic-full-name HEAD) 

git checkout $fetched . 

tree=$(git write-tree) 

newhead=$(echo "merged in branch '$branch' from $repo" | git commit-tree $tree -p $head -p $fetched) 
git-update-ref $headref $newhead $head 
git reset --hard $headref 

अन्य तरीकों में विस्तृत शामिल :

  • कोशिश एक "सरल" git pull REPO BRANCH
  • using git grafts to restore svn merge history .git/info/grafts पर एक टेक्स्ट फ़ाइल बनाकर, जहां प्रत्येक पंक्ति में उसके माता-पिता के बाद एक प्रतिबद्ध आईडी होती है। आपका स्थानीय भंडार अब से कार्य करेगा जैसे कि वास्तव में दोनों माता-पिता दोनों से प्रतिबद्ध हो जाते हैं।