গিট সাবমডিউল হিসাবে সাবভার্সন সংগ্রহস্থল রাখা কি সম্ভব?


154

আমার গিট সংগ্রহস্থলে গিট সাবমডিউল হিসাবে সাবভার্সন সংগ্রহস্থল যুক্ত করার কোনও উপায় আছে কি?

কিছুটা এইরকম:

git-svn submodule add https://svn.foo.com/svn/proj --stdlayout svn-project

যেখানে https://svn.foo.com/svn/projসাবভার্সন সংগ্রহস্থলের দিকে নির্দেশ করে।

আমি জানি এমন একটি রয়েছে git-svnযা একজনকে সাবভার্সন সংগ্রহস্থলের সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেয়। সুতরাং আমি ভাবছি, সম্ভবত একটি সাবভার্সন সংগ্রহস্থল চেকআউট করার উপায় আছে git-svnএবং তারপরে এটি সাবমডিউল হিসাবে ব্যবহার করুন।

উত্তর:


127

না। আপনার সেরা বাজি হ'ল ডেডিকেটেড গিট রিপোজিটরিতে এসএনএন সংগ্রহস্থলের একটি আয়না স্থাপন করা।

git svn clone -s http://subversion.example.com/ mysvnclone
cd mysvnclone
git remote add origin git@example.com:project.git
git push origin master

তারপরে আপনি গিটার সংগ্রহস্থলটিকে মূল প্রকল্পের সাব-মডিউল হিসাবে যুক্ত করতে পারেন

cd /path/to/gitproject
git submodule add git://example.com/project.git -- svn-project
git add svn-project
git commit -m "Add submodule"

এসএনএন-এর মধ্যে একটি ধারণাগত পার্থক্য রয়েছে: এক্সটার্নালস এবং গিট সাবমডিউল যা আপনাকে ট্রিপ আপ করতে পারে যদি আপনি কোনও সাবভার্সন দৃষ্টিকোণ থেকে এটির কাছে যান। গিট সাবমডিউলটি আপনি যে সংশোধনটি দিয়েছিলেন তা প্যাগড। যদি "আপ স্ট্রিম" পরিবর্তন হয় তবে আপনাকে আপনার সাব মড্যুলের রেফারেন্স আপডেট করতে হবে।

সুতরাং আমরা যখন প্রবাহের সাবস্ট্রেশনটির সাথে পুনরায় সংমিশ্রণ করব:

cd /path/to/mysvnclone
git svn rebase
git push

... গিট প্রকল্পটি এখনও আমাদের পূর্বে প্রতিশ্রুতিবদ্ধ আসল সংশোধনটি ব্যবহার করবে। এসএনএন হেডে আপডেট করতে আপনাকে ব্যবহার করতে হবে

cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"

1
এই কোডগুলি এখানে পোস্ট করার আগে আপনি কি চেষ্টা করে দেখেছেন? উপ-মডিউলগুলি গিট এসএনএন-তে সঠিকভাবে কাজ করতে পারে না।
xhan

4
@ এক্স হ্যাঁ, এবং আমি একই সংগ্রহস্থলে গিট-এসএনএন এবং সাবমডিউলগুলি মিশ্রনের পক্ষে পরামর্শ দিচ্ছি না। গিট-এসএনএন ব্যবহার করে এমন ক্লোনটি এসএনএন সংগ্রহস্থলের নেটিভ গিট ক্লোন তৈরির জন্য একটি সেতু মাত্র।
richq

দুঃখিত। সাব-মডিউল হিসাবে কাজ করতে আপনি দুটি ফোল্ডার ব্যবহার করতে পেলাম না। সুন্দর কৌশল
xhan

চমৎকার কৌশল। সার্ভারে গিট-এসএনএন রেপো চাপানোর আগে আপনার কী 'গিট থ্রিম --bare' পদক্ষেপের দরকার নেই? আমি এই কাজ করতে ছিল।
ক্লেটন স্ট্যানলি

এটি সম্ভবত ডিফল্ট নয় তবে আপনি এসএনএন-কে বাঁধতে পারেন: গিট সাবমডিউলগুলির মতো একটি নির্দিষ্ট সংশোধনের বহিরাগত।
মার্চএইচ

8

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

আমি যে সার্ভারটিতে চলেছি:

GIT_DIR=<projectname>.git git init
cd <projectname>.git/
GIT_DIR=. git svn init svn://example.com/trunk
GIT_DIR=. git svn fetch
git gc

এটি আমার বেয়ার রেপো সেট আপ করে, তারপরে এটি আপডেট করার জন্য আমার কাছে ক্রোন স্ক্রিপ্ট রয়েছে:

#!/usr/bin/python

import os, glob

GIT_HOME='/var/www/git'

os.chdir(GIT_HOME)
os.environ['GIT_DIR']='.'
gits = glob.glob('*.git')
for git in gits:
  if not os.path.isdir(git):
    continue
  os.chdir(os.path.join(GIT_HOME, git))
  if not os.path.isdir('svn/git-svn'):
    #Not a git-svn repo
    continue

  #Pull in svn updates
  os.system('git svn fetch && git gc --quiet')
  #fix-svn-refs.sh makes all the svn branches/tags pullable
  os.system('fix-svn-refs.sh')
  #Update the master branch
  os.system('git fetch . +svn/git-svn:master && git gc --quiet')`

এটির জন্য http://www.shatow.net/fix-svn-refs.sh থেকেও ফিক্স-svn-refs.sh প্রয়োজন এটি বেশিরভাগ দ্বারা অনুপ্রাণিত হয়েছিল: http://gsocblog.jsharpe.net/archives/12

git gcএখানে কেন প্রয়োজন তা আমি নিশ্চিত নই , তবে আমি git pullএটি ছাড়া কিছুই করতে পারিনি ।

এত কিছুর পরেও আপনি আরকিউ-র নির্দেশ অনুসরণ করে গিট সাবমডিউলটি ব্যবহার করতে পারেন।


কেউ ভাবেন আপনি এমনকি কমিট হুক হিসাবে এটি করতে পারেন।
আন্দ্রেস জায়ান ট্যাক

6

বর্তমানে গিট-এসএনএন এসএনএন: এক্সটার্নাল সমর্থন করে না । তবে আরও দুটি সরঞ্জাম রয়েছে যা আপনাকে সহায়তা করতে পারে:

  1. SubGit

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

    $ subgit configure --layout auto $SVN_URL $GIT_REPO
    

    উপরের কমান্ডটি এসভিএন প্রকল্পে শাখা বিন্যাস সনাক্ত করবে এবং তারপরে এসভিএন প্রকল্পের আয়নাতে প্রস্তুত খালি খালি গিট সংগ্রহস্থল তৈরি করবে। Cred / .subversion ডিরেক্টরিতে এসভিএন শংসাপত্রগুলির ক্যাশে ইতিমধ্যে সংরক্ষণ করা না থাকলে আপনাকে শংসাপত্রগুলির জন্য জিজ্ঞাসা করা যেতে পারে। আপনি $GIT_REPO/subgit/authors.txtএসভিএন লেখকের নামগুলি গিট পরিচয়ের সাথে মানচিত্রেও সমন্বয় করতে পারেন ।

    $ subgit install $GIT_REPO
    $ ... let initial translation complete ... 
    $ TRANSLATION SUCCESSFUL
    

    এই মুহুর্তে আপনার তৈরি নতুন গিট সংগ্রহস্থলের সাথে সাবভার্সন সংগ্রহশালা সংযুক্ত রয়েছে। সাবজিট এসভিএন সংশোধনকে প্রতিটির গিট কমিট এবং গিট কমিটকে এসভিএন রিভিশন হিসাবে অনুবাদ svn commitকরে git push

আপনার আরও যা কিছু প্রয়োজন তা হ'ল গিট সংগ্রহস্থলদের কাছে উপলব্ধ করা। তার জন্য গিট-http-ব্যাকএন্ডে একবার দেখুন। তারপরে আপনি তৈরি করা গিট সংগ্রহস্থলকে একটি সাধারণ সাবমডিউল হিসাবে যুক্ত করতে পারেন। SubGit এছাড়াও একটি অ্যাড অন Bitbucket সার্ভারের জন্য যেমন উপলব্ধ করা হয়, আরো বিস্তারিত জানতে চেক আউট করতে এখানে । সুতরাং, গিট-এসএনএন বা অন্য কোনওর মতো বাহ্যিক সরঞ্জামগুলি ব্যবহার করার দরকার নেই ।

সাবজিট হ'ল মালিকানাধীন সফ্টওয়্যার তবে এটি ছোট সংস্থাগুলি (10 জন কমিটিকে আপ), একাডেমিক এবং ওপেন সোর্স প্রকল্পগুলির জন্য বিনামূল্যে।

  1. SmartGit

    স্মার্টজিট ক্লায়েন্ট-সাইডে গিট- এসএনএন প্রতিস্থাপন করে । এর বৈশিষ্ট্যগুলি সম্পর্কে আরও তথ্য আপনি এখানে পেতে পারেন ।

    বিশেষত স্মার্টজিট গিট সাবমডিউল এবং এসএনএন উভয়কেই সমর্থন করে : বহিরাগত , আপনি এগুলি আপনার সংগ্রহস্থলে মিশ্রিত করতে পারেন।

    স্মার্টজিট মালিকানাধীন সফ্টওয়্যার তবে এটি অ-বাণিজ্যিক ব্যবহারের জন্য বিনামূল্যে।


subgit( Subgit.com/docamentation/… ) এবং smartgitসমর্থন উভয়ই svn:externalsএকইভাবে .gitsvnextmodulesওয়ার্কিং কপির একটি সুস্পষ্ট ফাইল দ্বারা সমর্থন করে । যার অর্থ আপনি এখনও এই সফ্টওয়্যারটি বহিরাগতদের চেকআউট করার জন্য ব্যবহার করতে পারেন এবং আপনি gitযেমন বাহ্যিক গিট হাব সার্ভার githubবা এর মতো সরাসরি বাহ্যিকগুলি চেকআউট করতে বেসিক ইউটিলিটিটি ব্যবহার করতে পারবেন না gitlab। সুতরাং snv:externalsএকটি বাহ্যিক গিট হাব সার্ভারে সংযুক্ত উত্সগুলি এই সফ্টওয়্যারটি ব্যতীত পর্যবেক্ষণযোগ্য ও ডাউনলোডযোগ্য হবে না যা এখনও একটি গুরুত্বপূর্ণ বিষয়।
অ্যান্ড্রি

4

আরকিউ যা বলেছিল তা ছাড়াও, অন্য পদ্ধতিটি হ'ল তৃতীয় পক্ষের "এক্সটার্নালস" প্রকল্প ( http://nopugs.com/ext-tutorial ) ব্যবহার করা হবে, যা এসএনএন বাহ্যিক রেফারেন্সগুলি কীভাবে আরও ভালভাবে অনুকরণ করে। এক্সটার্নালগুলির সাহায্যে আপনি গিট বা এসএনএন সংগ্রহস্থলগুলি ট্র্যাক করতে পারেন এবং আপনার পরিবর্তনগুলি সেই স্টোরগুলিতে প্রবাহিত করা আরও সহজ বলে মনে হচ্ছে। তবে এটির জন্য পৃথক প্যাকেজটি ডাউনলোড এবং ইনস্টল করার জন্য প্রকল্পের সদস্যদের প্রয়োজন।

আমি এখনও সাবমডিউল বা বহিরাগত ব্যবহার করি নি; তবে, আমি সমস্ত বিকল্পগুলি পড়তে কয়েক ঘন্টা ব্যয় করেছি এবং দেখে মনে হচ্ছে বাহ্যিকগুলি আমার প্রয়োজনের জন্য আরও ভাল ফিট হবে fit জন লোলিগার ( http://oreilly.com/catolog/9780596520120 ) দ্বারা "গিটারের সাথে সংস্করণ নিয়ন্ত্রণ" এর অধ্যায় 15 এগুলি এবং অন্যান্য কাস্টম পদ্ধতিগুলি সম্পর্কে একটি দুর্দান্ত আলোচনা রয়েছে , যা আমি দৃ strongly়ভাবে প্রস্তাব দিই।


0

এটি সমর্থন করার জন্য পিস্টন এবং নতুন রূপান্তরকারী রেপোস্টরি এবং গিট + গিটের সাথে বিদ্যমান রূপান্তর URL, এবং এর সাথে কথোপকথনটি আবারও লেখা হচ্ছে।

পরীক্ষা করে দেখুন পিস্টন গিটহাব সংগ্রহস্থলের

দুর্ভাগ্যক্রমে এটি মুক্তি পেয়েছে বলে মনে হয় না।


3
পিস্টন আপনার মুখের মধ্যে ব্যর্থ হবে যখন আপনার সবচেয়ে বেশি প্রয়োজন যদিও;), সুতরাং আমি এটির প্রস্তাব দিই না। এছাড়াও পিস্টনের জন্য আর কোনও বাগফিক্স নেই।
হেনরিক

0

ঠিক আছে git-remote-testsvn, তাই আমি অনুমান করি এরকম কিছু

git submodule add testsvn::http://www.telegraphics.com.au/svn/bzquips/trunk/ \
    module/bzquips

কাজ করা উচিত. এটা কি পারে?

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.