গিটহাবের মধ্যে গুগল কোড সাবভার্সন সংগ্রহস্থলটি কাঁটাচামচ করুন এবং সিঙ্ক্রোনাইজ করুন


131

আমি কীভাবে কোনও গিটহাবের সংগ্রহস্থলটিতে লেখার অ্যাক্সেস নেই এমন একটি Google কোড সাবভার্সন সংগ্রহস্থলের সাথে কাঁটাচামচ এবং সিঙ্ক রাখতে পারি?

আমি আমার গিট সংগ্রহস্থলে আমার নিজস্ব বৈশিষ্ট্য বিকাশ করতে সক্ষম হতে চাই, তবে আমি গুগল কোড সাবভার্সন সংগ্রহস্থলের বিরুদ্ধেও সিঙ্ক্রোনাইজ করতে চাই। গুগল কোড প্রকল্পের পক্ষ থেকে সংশোধনগুলি আনতে।

আমি গিট-এসএনএন সম্পর্কে জানি এবং এটি আগে-আগে এবং ডাউনস্ট্রিমটিকে সাবভার্সন সংগ্রহস্থলে নিয়ে আমার সম্পূর্ণ নিয়ন্ত্রণ ছিল used কিন্তু আমি জানি না কীভাবে গুগল কোড সাবভার্সন সংগ্রহস্থলের সাথে সিঙ্ক রাখেন।

উত্তর:


178

গিট-এসএনএন থেকে দূরবর্তী শাখাটি নিয়মিত গিট রিমোটের মতো প্রায় একই রকম। সুতরাং আপনার স্থানীয় সংগ্রহস্থলে আপনার গিট-এসএনএন ক্লোন থাকতে পারে এবং গিটহাবে পরিবর্তনগুলি ঠেলে দিতে পারেন। গিট যত্ন করে না। যদি আপনি আপনার গিট-এসএনএন ক্লোন তৈরি করেন এবং গিটহাবের সাথে একই পরিবর্তনগুলি ধাক্কা দেন তবে আপনার কাছে গুগল কোড সংগ্রহস্থলের একটি অনানুষ্ঠানিক আয়না থাকবে। বাকিটি ভ্যানিলা গিট।

git svn clone http://example.googlecode.com/svn -s
git remote add origin git@github.com:example/example.git
git push origin master

এখন আপনার কাছে এটি হ'ল মাঝে মাঝে আপনাকে গিটের সাথে সাবভার্সন সংগ্রহস্থলটি সিঙ্ক্রোনাইজ করতে হবে। এটি দেখতে কিছু হবে:

git svn rebase
git push

গিটকে বা যাই হোক না কেন, এটি দেখতে এরকম কিছু দেখাচ্ছে:

o [master][remotes/trunk][remotes/origin/master]
|
o
|
o

এবং যখন আপনি দৌড়াবেন git svn rebase, আপনার এটি হবে:

o [master][remotes/trunk]
|
o
|
o [remotes/origin/master]
|
o
|
o

সুতরাং এখন git pushদৌড়াদৌড়িটি সেই সমস্ত প্রতিশ্রুতিগুলি গিটহাবের দিকে ঠেলে দেবে, সেখানে [দূরবর্তী অঞ্চল / উত্স / মাস্টার] শাখা। এবং আপনি প্রথম ASCII আর্ট ডায়াগ্রামে দৃশ্যে ফিরে আসতে চাইবেন।

এখন সমস্যাটি হল, আপনি কীভাবে এই পরিবর্তনগুলিতে মিশ্রণটি ব্যবহার করবেন? ধারণাটি হ'ল, আপনি কখনও একই শাখায় প্রতিশ্রুতিবদ্ধ হন না যে আপনি গিট-এসএনএন-রিবেস-ইনগ এবং গিট-পুশিং। আপনার পরিবর্তনগুলির জন্য আপনার একটি পৃথক শাখা দরকার। অন্যথায়, আপনি সাবভারশনগুলির উপরে আপনার পরিবর্তনগুলি প্রত্যাখ্যান করবেন, যা আপনার গিট সংগ্রহস্থলটিকে ক্লোন করে এমন কাউকে বিরক্ত করতে পারে। আমাকে অনুসরণ কর? ঠিক আছে, সুতরাং আপনি একটি শাখা তৈরি করুন, আসুন এটি "বৈশিষ্ট্যগুলি" বলুন। এবং আপনি একটি প্রতিশ্রুতিবদ্ধ এবং এটি গিটহাবের থেকে বৈশিষ্ট্যগুলির শাখায় ঠেলে দেবেন। আপনার গিটকে দেখতে কিছুটা এমন দেখাবে:

o [features][remotes/origin/features]
|
o
|
o [master][remotes/trunk][remotes/origin/master]
|
o

গুগল কোড ব্রাঞ্চের আগে বেশ কয়েকটি কমিট করার আগে আপনি এখানে আপনার বৈশিষ্ট্যগুলি শাখা পেয়েছেন? সুতরাং যখন আপনি গুগল কোড থেকে নতুন স্টাফ অন্তর্ভুক্ত করতে চান তখন কী হয়? আপনি git svn rebaseপ্রথমে দৌড়াবেন এবং এটি পাবেন:

                           o [features][remotes/origin/features]
[master][remotes/trunk] o  |
                        |  o
                        o /
                        |/
                        o[remotes/origin/master]
                        |
                        o

আপনি যদি git pushমাস্টার আউট হন তবে আপনি কল্পনা করতে পারেন [দূরবর্তী / উত্স / মাস্টার] মাস্টার হিসাবে একই পয়েন্টে। তবে আপনার বৈশিষ্ট্য শাখার পরিবর্তন নেই। আপনার পছন্দগুলি হ'ল মাস্টারকে বৈশিষ্ট্যগুলিতে বিভক্ত করা বা বৈশিষ্ট্যগুলি পুনর্বাসনা। একটি মার্জ এই মত চেহারা হবে

git checkout features
git merge master 

            o [features]
           /|
          / o [remotes/origin/features]
[master] o  |
         |  o
         o /
         |/
         o
         |
         o

তারপরে আপনি গিটহাবের বৈশিষ্ট্যগুলিকে ঠেলাবেন। স্থান বাঁচাতে আমি মাস্টারের রিমোটগুলি ছেড়ে দিয়েছি, তারা [মাস্টার] এর মতোই হবে ।

রিবেস পদ্ধতিটি আরও বেশি দুষ্ট - আপনার ধাক্কা দ্রুত অগ্রসর হওয়া সংযুক্তি না হওয়ায় (আপনি এটির ক্লোন করেছিলেন এমন ব্যক্তির অধীনে বৈশিষ্ট্যগুলির শাখাটি টানবেন) you' এটি করা সত্যই ঠিক মনে করা হয় না, তবে আপনি দৃ determined়সংকল্পবদ্ধ থাকলে কেউ আপনাকে থামাতে পারবে না। এটি কিছু জিনিসগুলিকে খুব সহজ করে তোলে যেমন প্যাচগুলি যখন সামান্য পুনঃনির্মাণ আকারে উজানের কাছে গৃহীত হয়। এটি দ্বন্দ্বের সাথে জড়িত হওয়া বাঁচাতে চাইবে, আপনি কেবলমাত্র উপরে উঠা প্যাচগুলি স্কিপ করতে পারেন। যাইহোক, একটি রিবেস এর মত হবে:

git rebase master features

         o [features]
         |
         o
         |  o [remotes/origin/features]
[master] o  |
         |  o
         o /
         |/
         o
         |
         o

এবং তারপরে আপনাকে তা করতে হবে git push --force। আপনি কেন এটি জোর করার প্রয়োজন তা আপনি দেখতে পাচ্ছেন, ইতিহাসটি [রিমোটস / উত্স / বৈশিষ্ট্যগুলি] থেকে নতুন বর্তমান পোস্ট-পুনঃস্থাপন [বৈশিষ্ট্যগুলি] পর্যন্ত একটি পুরানো বিভেদ রয়েছে

এটি সব কাজ করে তবে এটি অনেক প্রচেষ্টা। আপনি যদি নিয়মিত অবদানকারী হতে চলেছেন তবে সবচেয়ে ভাল বাজি হ'ল কিছু সময়ের জন্য এইভাবে কাজ করা, কিছু প্যাচগুলি প্রবাহিত প্রেরণ করুন এবং দেখুন যে আপনি সাবভারশনে অ্যাক্সেস পেতে পারেন কিনা। এটি ব্যর্থ হয়ে, সম্ভবত আপনার পরিবর্তনগুলি গিটহাবের দিকে ঠেলে দেবেন না। এগুলিকে স্থানীয় রাখুন এবং চেষ্টা করুন এবং যে কোনও উপায়ে তাদেরকে প্রবাহিত করে নিন।


চমৎকার নির্দেশাবলীর জন্য ধন্যবাদ। ( gitএখানে নুব।) দ্রুত প্রশ্ন। আমি এটি একটি বৃহত এসভিএন রেপোর বিপরীতে করেছি এবং এটি 141 মেগাবাইটে এসেছিল। আমি এটিকে গিথুবে ঠেকিয়ে দিয়ে আবার ক্লোন করে আবার নীচে নামলাম, এবং এটি 130 মেগাবাইটে বেরিয়ে এসেছিল। আমি git gcদুজনের উপর দৌড়ে গেলাম । পার্থক্যের জন্য কী হতে পারে?
এমপন্টিলো

... এটা খুঁজে বের। আমার প্রয়োজন git push origin --mirror
এমপিওন্টিলো

মনোমুগ্ধকর মতো কাজ করা, এখন আমাকে কেবল গুগলকোড ডেভসকে আমার সাথে গিথুব ব্যবহার করতে বলতে হবে: ডি
ইলেক্টবলাক

এটি আমার পক্ষে -sবিকল্পটির সাথে কাজ করে নি git svn clone, তবে এটি ছাড়া বাকীগুলি ঠিক কাজ করেছিল।
ব্যবহারকারী 1027169

15

svn2github পরিষেবা

ওয়েবসাইট http://svn2github.com/ গিথুব ( https://github.com/svn2github/projectname এ ) যে কোনও প্রকাশ্যে অ্যাক্সেসযোগ্য এসভিএন সংগ্রহস্থল কাঁটাতে একটি পরিষেবা সরবরাহ করে । আমি এটা চেষ্টা করেছি; "একটি আয়না তৈরি করুন" চাপ দেওয়ার পরে এটি দৃশ্যত কয়েক সেকেন্ডের জন্য কিছুই করেনি এবং "ত্রুটি" বার্তাটি প্রদর্শন করেছিল, তবে এটি বাস্তবে কার্যকর হয়েছিল। নতুন সংগ্রহস্থলটি এসভিএন রেপো থেকে কোডটি ধারণ করে তৈরি করা হয়েছিল।

তারপরে আপনি এটি তৈরি করেছেন এমন সংগ্রহস্থলটি কাঁটাচামচ করতে এবং নিজের কাঁটাচামচে কাজ করতে হবে। তারপরে আপনি তাদের বাগ-ট্র্যাকার ব্যবহার করে প্রবাহ প্রকল্পে আপনার পরিবর্তনগুলি জমা দেবেন।

পরিষেবাটির গিথুব ব্যবহারকারীর অধীনে বিদ্যমান সংগ্রহস্থলগুলির দিকে তাকানো (উদাহরণস্বরূপ "এসভিএন 2 গিথুব 5 ঘন্টা আগে এসএনএনগিথুব / হ্যাক্সে মাস্টার হিসাবে প্রেরণ করা হয়েছে") বলে মনে হচ্ছে যে এটি নিয়মিত এসভিএন সংগ্রহস্থল থেকে পরিবর্তনগুলি টানবে। ওয়েবসাইটে পরিষেবাটি কে চালায় সে সম্পর্কে কোনও তথ্য নেই, তাই আমি অনির্দিষ্টকালের জন্য চালিয়ে যাওয়ার বিষয়ে বাজি ধরব না, তবে এটি এখনই কাজ করে (এবং যদি এটি কখনও নিচে যায়, আপনি এখনও নিজের কাঁটাচামচ আপডেট করতে পারেন)।

Launchpad

আপনি যদি গিট এবং গিথুব ব্যবহার শুরু না করে থাকেন তবে আর একটি বিকল্প হ'ল লঞ্চপ্যাড.net ব্যবহার করা। লঞ্চপ্যাড স্বয়ংক্রিয়ভাবে একটি ব্যক্তিগত বিজেআর শাখায় এসভিএন (এছাড়াও সিভিএস) সংগ্রহগুলি আমদানি করতে পারে। এটি করতে, একটি লঞ্চপ্যাড প্রকল্প তৈরি করুন, তারপরে নতুন আমদানি পৃষ্ঠায় যান , সাবভারশন নির্বাচন করুন এবং ইউআরএল (উদাঃ http://projectname.googlecode.com/svn/trunk/) লিখুন । প্রকল্পের আকারের উপর নির্ভর করে প্রাথমিক আমদানিটি কয়েক ঘন্টা সময় নিতে পারে। পরবর্তী আমদানি পর্যায়ক্রমে চলবে।

আরও নথিপত্রের জন্য, লঞ্চপ্যাড সহায়তাতে ভিসিএস আমদানি দেখুন ।


10

গুগল কোড থেকে গিটহাবের সাথে সিঙ্ক্রোনাইজ করার জন্য একটি ওয়াক-থ্রু fnokd.comউপলব্ধ । সিঙ্ক্রোনাইজেশনটি স্বয়ংক্রিয় করতে লেখক একটি সর্বদা চালু রিমোট সার্ভার এবং একটি ক্রোন জব ব্যবহার করে এবং এসভিএন ট্রাঙ্ককে "বিক্রেতা" নামে একটি গিটহাব শাখায় রাখে।


2

গিটহাব এখন সরাসরি আমদানি করা সাবভার্সন প্রকল্পগুলি সমর্থন করে (দেখুন http://help.github.com/import-from-subversion/ )। কেবলমাত্র একটি নতুন রেপো তৈরি করুন এবং তারপরে "পরবর্তী পদক্ষেপগুলি" স্ক্রিনে "সাবভার্সন থেকে আমদানি করুন" ক্লিক করুন। এটি আরও সিঙ্ক করার পক্ষে সমর্থন করে না, যদিও: /।


এই পদ্ধতিটি আর বিদ্যমান নেই
চৌম্বকীয়

ব্যবহার করুন import.github.com/new এখন পরিবর্তে। সহায়তা . github.com/articles/importing-from-sversion দেখুন ।
ক্রিস আর্ন্ড্ট

1

হুম .. আমার সংস্থায় আমি প্রায় একই কাজ করছিলাম। কেবল একই ডিরেক্টরিতে .svn এবং .git রেপো উভয়ই রয়েছে (আপনি এসএনএন রেপো চেকআউট করেন এবং এই কার্যকরী অনুলিপিটিতে গিট রেপো তৈরি করেন)।

তারপরে এসএনএন আপ এবং গিট পুশ ব্যবহার করে এটি করা হয়েছিল। অবশ্যই আপনি যদি অনেকগুলি ডাইভার্ট করেন তবে আপনাকে হাতে হাতে জিনিসগুলি মার্জ করতে হবে।


ঠিক আছে, তবে আমি। এসভিএন মেটা ডেটা থাকা এড়াতে চাই এবং আশা করছিলাম যে গিট ডাউন স্ট্রিম মাস্টার হিসাবে একটি এসএনএন রেপো ব্যবহার করতে সক্ষম হবে
অপটিমিক্স

তাহলে চেকআউট রেপো এবং গিথব-এ গিট পুশ করতে গিট-এসএনএন ব্যবহার করা কি সম্ভব নয়?
মার্সিন গিল

0

আপনি যেটি চান তা আমি নিশ্চিত নই তবে অবশ্যই আপনি একটি সাবভারশন রিপোজিটরি থেকে টানতে পারেন এবং একই কার্যকরী অনুলিপি থেকে গিট সংগ্রহস্থলটিতে যেতে পারেন। এবং আপনি git svn dcommitsubversion সংগ্রহস্থল ফিরে যেতে পারেন । যদিও আপনি সাবট্রিশন সংগ্রহস্থলের বিরুদ্ধে গিটহাব সংগ্রহস্থল সিঙ্ক করতে পারবেন না। এছাড়াও, যখন আপনি আপনার কার্যকরী অনুলিপিটি এখনও সাবভার্সন রিপোজিটরিতে নেই, তখন সাবট্রিশন সংগ্রহস্থলটি আপডেট করা হলে আপনাকে সেগুলি পুনরায় চালু করতে হবে, git push --forceআপনাকে গিটহাবের কাছে "নতুন" প্রতিশ্রুত করতে বাধ্য করা হবে।


0

আমি ইউ-জি লিনের ব্লগে এই নির্দেশাবলী পেয়েছি :

প্রথমে সাবভার্সন সংগ্রহস্থলটি ক্লোন করুন এবং গিটটিতে টিপুন:

git svn clone https://foo.googlecode.com/svn/ git-foo 
cd git-foo
git remote add git-foo git@github.com:username/foo.git 
git push git-foo master

সাবভার্সন সংগ্রহস্থলে প্রতিশ্রুতি দেওয়ার পরে চালান

cd /path/to/git-foo
git svn fetch 
git svn rebase 
git push git-foo master
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.