বিদ্যমান গিট সংগ্রহস্থলকে এসভিএন-তে পুশ করা হচ্ছে


384

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

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

আমি তখনই বেছে নেব যখন এই এসভিএন সংগ্রহস্থলে কমিটগুলি ঠেকাতে কেবল কয়েকটি কমান্ড চালাতে চাই। আমি গিট ব্যবহার চালিয়ে যেতে চাই এবং গিতে যা আছে তা কেবল এসভিএন সংগ্রহস্থল আয়না পেতে চাই।

আমি একমাত্র ব্যক্তি যিনি কখনও কখনও এসভিএন এর সাথে প্রতিশ্রুতিবদ্ধ হব, যদি এতে কোনও পার্থক্য আসে।


1
দ্রষ্টব্য: আপনি যখন এটি করবেন সম্ভবত আপনি সম্ভবত আপনার মূল তারিখ-স্ট্যাম্পগুলি হারাবেন। নতুন তারিখগুলি সাবভার্সনে আমদানির সময় ভিত্তিক হবে।
নোটার

যাঁরা আরও বর্তমান তথ্যের সন্ধান করছেন তাদের জন্য অটোমেশনে অনুসন্ধানের সময় কেউ কেউ নিম্নলিখিত পোস্টটি সহায়ক পেতে পারেন: মজাদার
brains.com/deploying-wordpress-plugins-travis

উত্তর:


402

আমারও এটির দরকার ছিল, এবং বোম্বের উত্তর + প্রায় কিছু ফিডিংয়ের সাহায্যে, আমি এটি কাজ করে চলেছি। এই রেসিপিটি এখানে:

গিট আমদানি করুন -> সাবভার্সন

1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase origin/trunk
5.1.  git status
5.2.  git add (conflicted-files)
5.3.  git rebase --continue
5.4.  (repeat 5.1.)
6. git svn dcommit

# 3 এর পরে আপনি এরকম একটি ক্রিপ্টিক বার্তা পাবেন:

ইউআরএল এর উচ্চ স্তরের ব্যবহার: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo

কেবল তা উপেক্ষা করুন।

যখন আপনি # 5 রান, আপনি পারে দ্বন্দ্ব পেতে। "সরল" অবস্থায় ফাইল পুনরায় চালু করে এবং পুনরায় চালু করার মাধ্যমে এগুলি সমাধান করুন। শেষ পর্যন্ত, আপনি সম্পন্ন করা হবে; তারপরে এসভিএন সংগ্রহস্থলটিতে আবার সিঙ্ক করুনdcommit । এখানেই শেষ.

সিঙ্কে সংগ্রহস্থল রাখা

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

git svn fetch
git rebase trunk

এবং গিট থেকে এসভিএন-তে সিঙ্ক্রোনাইজ করতে, ব্যবহার করুন:

git svn dcommit

চূড়ান্ত নোট

সরাসরি সংগ্রহস্থলটিতে প্রয়োগের আগে আপনি স্থানীয় অনুলিপিটিতে এটি ব্যবহার করে দেখতে চাইতে পারেন। আপনি নিজের গিট সংগ্রহস্থলের একটি অনুলিপি অস্থায়ী স্থানে রাখতে পারেন; সহজেই ব্যবহার করুন cp -r, যেমন সমস্ত ডেটা সংগ্রহস্থলটিতে থাকে। এরপরে আপনি একটি ফাইল-ভিত্তিক পরীক্ষামূলক ভাণ্ডার সেট আপ করতে পারেন:

svnadmin create /home/name/tmp/test-repo

এবং একটি ওয়ার্কিং অনুলিপি পরীক্ষা করে দেখুন:

svn co file:///home/name/tmp/test-repo svn-working-copy

এটি আপনাকে দীর্ঘস্থায়ী পরিবর্তনগুলি করার আগে জিনিসগুলির সাথে চারপাশে খেলতে দেয়।

সংযোজন: আপত্তি থাকলে git svn init

যদি আপনি দুর্ঘটনাক্রমে git svn initভুল ইউআরএল নিয়ে চলে যান এবং আপনি নিজের কাজের ব্যাকআপ নেওয়ার পক্ষে যথেষ্ট স্মার্ট না হন (জিজ্ঞাসা করবেন না ...), আপনি আবার একই কমান্ডটি চালাতে পারবেন না। তবে আপনি জারি করে পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে নিতে পারেন:

rm -rf .git/svn
edit .git/config

এবং বিভাগের [svn-remote "svn"]অংশটি সরান ।

তারপরে আপনি git svn initনতুনভাবে চালাতে পারেন ।


2
চমৎকার উত্তর. এটি কি কমিটের তারিখগুলিকে বিশৃঙ্খলা করে?
ড্র নোকস

4
ভাল প্রশ্ন - দুর্ভাগ্যক্রমে, আমি কোনটির উত্তর জানি না। আমি যে কাজ করতে পেলাম এটির এটি একটি ব্যবহারিক গাইড। আমি সমস্ত বিবরণ পুরোপুরি বুঝতে পারি না। প্রতিশ্রুতি-তারিখগুলি সম্পর্কে, আমার ধারণা আপনি একটি পরীক্ষা করে বের করতে পারেন। মনে রাখবেন যে জিনিসগুলি পরীক্ষার জন্য আপনি একটি স্থানীয় (এফএস-ভিত্তিক) এসএনএন রেপো চালাতে পারেন।
Troelskn

10
আমি 5 ধাপের জায়গায় "গিট রিবেস --অ্যান্ট ট্রাঙ্ক - রুট" ব্যবহার করে এই একই পদক্ষেপগুলি অনুসরণ করেছি এবং আরও অনেক সাফল্য পেয়েছি । টনগুলির পরিবর্তে কেবলমাত্র কয়েকটি মুদ্রা সংঘাতের সমাধান করতে।
কুবি

5
আমার ক্ষেত্রে এই ক্রমটি কার্যকর হয়নি worked সর্বদা একটি বার্তা "হেড ইতিহাস থেকে প্রবাহিত এসভিএন তথ্য নির্ধারণ করতে অক্ষম" দেখানো হয়েছিল। সুতরাং, কোন dcommit সম্ভব।
ফেদির আরওয়াইকিটিক

2
কোনও বিষয় নয়, আমি এসভিএন স্ট্যান্ডার্ড সেটআপ (ট্রাঙ্ক / শাখা / ট্যাগ /) অনুসরণ করতে চাইনি বলে আমি স্মার্ট হওয়ার চেষ্টা করেছি এবং সেগুলি বাদ দিতে চেষ্টা করেছি। এটি ছাড়া এটি মোটেও কাজ করতে পারেনি।
জেমস ম্যাকমাহন

33

আমরা কীভাবে এটি কাজ করেছিলাম তা এখানে:

আপনার মেশিনের কোথাও আপনার গিট সংগ্রহস্থলটি ক্লোন করুন।

.Git / কনফিগারটি খুলুন এবং নিম্নলিখিতগুলি যুক্ত করুন ( একটি গিট সংগ্রহস্থলের কেবল পঠনযোগ্য SVN আয়না রক্ষণাবেক্ষণ থেকে ):

[svn-remote "svn"]
    url = https://your.svn.repo
    fetch = :refs/remotes/git-svn

এখন কনসোল উইন্ডো থেকে এগুলি টাইপ করুন:

git svn fetch svn
git checkout -b svn git-svn
git merge master

এখন, যদি এটি কোনও কারণে এখানে বিরতি দেয় তবে এই তিনটি লাইন টাইপ করুন:

git checkout --theirs .
git add .
git commit -m "some message"

এবং অবশেষে, আপনি এসভিএন এর কাছে প্রতিশ্রুতিবদ্ধ করতে পারেন:

git svn dcommit

দ্রষ্টব্য: আমি পরে সর্বদা সেই ফোল্ডারটি স্ক্র্যাপ করি।


6
+1 এটি আসলে আমার পক্ষে কাজ করেছে (ট্রাঙ্ক / বেস যাই থাকুক না), অন্য জবাব দেওয়ার বিপরীতে যা দেওয়া Unable to determine upstream SVN information from HEAD history.
অবিরত ছিল

2
আর একটি দুর্দান্ত সংক্ষিপ্তসার: কোডোগ্রাফি.com
টমি

2
আমি এই কৌশলটি চেষ্টা করেছিলাম, তবে এটি ইতিহাস আমদানি করে নি। বিটিডব্লিউ, "গিট মার্জ মাস্টার" এখন "গিট মার্জ - নিবন্ধ-সম্পর্কহীন-ইতিহাসের মাস্টার"
বেরেন্ড দে বোয়ার

1
আপনি যদি গিটে রয়েছে তার সাথে এসভিএন-এ যা রয়েছে তা পুরোপুরি ওভাররাইট করতে চান তবে ব্যবহার করুন git merge -s recursive -Xtheirs --allow-unrelated-histories master
ব্যবহারকারী 1475814

28

git rebaseসরাসরি ব্যবহার করা প্রথম প্রতিশ্রুতি হারাবে। গিট এটির সাথে আলাদা আচরণ করে এবং এটি পুনরায় চালু করতে পারে না।

একটি পদ্ধতি রয়েছে যা সম্পূর্ণ ইতিহাস সংরক্ষণ করবে: http://kerneltrap.org/mailarchive/git/2008/10/26/3815034

আমি সমাধানটি এখানে প্রতিলিপি করব, তবে ক্রেডিটগুলি বিজননের জন্য।

গিট-এসএনএন শুরু করুন:

git svn init -s --prefix=svn/ https://svn/svn/SANDBOX/warren/test2

- ਪ੍ਰੀফিক্স আপনাকে "এসএনএন / ট্রাঙ্ক" এর মতো রিমোট ট্র্যাকিং শাখা দেয় যা দুর্দান্ত কারণ আপনি যদি আপনার স্থানীয় শাখাকে কেবল "ট্রাঙ্ক" ডাকেন তবে আপনি অস্পষ্ট নামগুলি পান না। এবং-s এটি স্ট্যান্ডার্ড ট্রাঙ্ক / ট্যাগ / শাখা বিন্যাসের শর্টকাট।

এসভিএন থেকে প্রাথমিক স্টাফ আনুন:

git svn fetch

এখন আপনার রুট কমিটের হ্যাশটি দেখুন (একক প্রতিশ্রুতি প্রদর্শন করা উচিত):

git rev-list --parents master | grep '^.\{40\}$'

তারপরে খালি ট্রাঙ্ক কমিটের হ্যাশ পান:

git rev-parse svn/trunk

গ্রাফ্ট তৈরি করুন:

echo <root-commit-hash> <svn-trunk-commit-hash> >> .git/info/grafts

এখন, "গিটক" দেখানো উচিত svn/trunk আপনার প্রথম শাখা যার উপর ভিত্তি করে আপনার মাস্টার শাখা ভিত্তিক ।

দুর্নীতি স্থায়ী করুন:

git filter-branch -- ^svn/trunk --all

দুর্নীতি ফেলে দিন:

rm .git/info/grafts

গিটক এখনও দেখাতে হবে svn/trunk

আপনার ইতিহাস ট্রাঙ্কের শীর্ষে লিনিয়ারাইজ করুন:

git svn rebase

এবং এখন "git svn dcommit -n" আপনাকে বলতে হবে যে এটি ট্রাঙ্কে প্রতিশ্রুতিবদ্ধ হতে চলেছে।

git svn dcommit

এই কৌশলটি কীভাবে উপরের থেকে আরও স্পষ্টভাবে আলাদা তা আপনি ব্যাখ্যা করতে পারেন।
সেমিচিনজি

3
আমি যখন "গিট রেভ-পার্স এসভিএন / ট্রাঙ্ক" চেষ্টা করি তখন এটি অজানা সংশোধন বা কার্যকারী গাছের মধ্যে না পাথের খবর দেয়।
অ্যাডাম নেস

এই একমাত্র উত্তরটি আমার পক্ষে কাজ করেছিল, কেবলমাত্র স্টেপস গিটার ফিল্টার-শাখা এবং ড্রপ গ্রাফ্টের দরকার পড়েনি: গ্রাফ্ট তৈরির পরে আমি একটি রিবেস করলাম এবং তারপরে গিট এসএনএন ডিসকমিট করলাম।
fc7

8

আপনার প্রকল্পের জন্য সাবভার্সন ভান্ডারে একটি নতুন ডিরেক্টরি তৈরি করুন।

# svn mkdir --parents svn://ip/path/project/trunk

আপনার গিট-পরিচালিত প্রকল্পে পরিবর্তন করুন এবং গিট-এসএনএন শুরু করুন।

# git svn init svn://ip/path/project -s
# git svn fetch

এটি একটি একক প্রতিশ্রুতি তৈরি করবে কারণ আপনার এসভিএন প্রকল্প ডিরেক্টরিটি এখনও খালি রয়েছে। এখন সেই প্রতিশ্রুতিতে সমস্ত কিছু রিবেস করুন git svn dcommitএবং আপনার করা উচিত। যদিও এটি আপনার প্রতিশ্রুতিবদ্ধতার তারিখগুলি গুরুতরভাবে বিশৃঙ্খলা করবে।


আমি এই উত্তরটি hassox.blogspot.com/2007/12/ using-git-with-svn.html এ দেওয়া নির্দেশাবলীর সাহায্যে ব্যবহার করে ট্রাঙ্কের নামটি দেখতে "#git শাখা -a" পরে এই আদেশগুলি অনুসরণ করেছি। তারপরে: # গিট চেকআউট-বি স্থানীয়-এসএনএন ট্রাঙ্ক # গিট মার্জ মাস্টার # গিট এসএনএন ডিকমিট .svn ডিরেক্টরিটি .gitignore মনে রাখবেন!
সিএফলেউইস

আমি যেমন একই অপারেশনটি করেছি, আমি এটি স্পষ্ট করে বলতে চেয়েছিলাম যে কিছু সময়ের জন্য (জানুয়ারী '09), গিটটি মূল প্রতিশ্রুতিতে রিবেস অপারেশন করতে পারে। এই প্রক্রিয়া অনেক সহজ করে তোলে বৃদ্ধ প্রবন্ধ অনেক, ইঙ্গিত উপর মন্তব্য দেখতে চেয়ে its.arubything.com/2009/1/4/...
লুই Jacomet

"-S" গিট এসএনএন ডিআর বিকল্পটি কী করে? গিট এসএনএন-এর জন্য ম্যান পেজগুলিতে আমি এটি দেখতে পাচ্ছি না।
নাথান

ম্যান পৃষ্ঠাটি আবার পড়ুন, সম্ভবত "-s" অনুসন্ধান করুন কারণ এটি সেখানে রয়েছে। এটি "--stdlayout" এর একটি নাম।
বোম্বে

7

গিট -> সম্পূর্ণ কমিটের ইতিহাস সহ এসভিএন

আমার একটি গিট প্রকল্প ছিল এবং এটি এসভিএন-এ স্থানান্তরিত করতে হয়েছিল। পুরো প্রতিশ্রুতিবদ্ধ ইতিহাস রেখেই আমি এটি তৈরি করেছি made হারিয়ে যাওয়া একমাত্র জিনিস হ'ল আসল প্রতিশ্রুতি সময় যেহেতু আমরা যখন করি তখন libSVN স্থানীয় সময় নির্ধারণ করে git svn dcommit

কিভাবে:

  1. একটি এসভিএন সংগ্রহস্থল রয়েছে যেখানে আমরা আমাদের স্টাফগুলিতে আমদানি করতে এবং গিট-এসএনএন দিয়ে এটি ক্লোন করতে চাই:

    git svn clone https://path.to/svn/repository repo.git-svn`
    
  2. সেখানে যাও:

    cd repo.git-svn
    
  3. গিট সংগ্রহস্থলের রিমোট যুক্ত করুন (এই উদাহরণে আমি সি ব্যবহার করছি / / প্রকল্পগুলি / রিপো . git )। আপনি এসভিএন-তে চাপ দিন এবং নামটি পুরাতন-গিট দিতে চান:

    git remote add old-git file:///C/Projects/repo.git/
    
  4. পুরানো গিট সংগ্রহস্থল থেকে বর্তমান সংগ্রহশালায় মাস্টার শাখা থেকে তথ্য আনুন:

    git fetch old-git master
    
  5. পুরানো-গিট রিমোটের মাস্টার শাখাটিকে বর্তমান ভাণ্ডারে পুরানো বলে নতুন শাখায় চেকআউট করুন:

    git checkout -b old old-git/master`
    
  6. পুরানো গিট / মাস্টারের শীর্ষে হেড রাখার জন্য রিবেস। এটি আপনার সমস্ত প্রতিশ্রুতি রক্ষা করবে। এটি মূলত যা করে তা হ'ল আপনার গিটে করা সমস্ত কাজ গ্রহণ এবং আপনি এসভিএন থেকে যে কাজটি ব্যবহার করছেন তার উপরে রাখুন।

    git rebase master
    
  7. এখন আপনার মাস্টার শাখায় ফিরে যান:

    git checkout master
    

    এবং আপনি দেখতে পাচ্ছেন যে আপনার একটি পরিষ্কার প্রতিশ্রুতিবদ্ধ ইতিহাস রয়েছে। এটিই আপনি এসভিএন-তে চাপতে চান।

  8. আপনার কাজকে এসভিএন-তে চাপ দিন:

    git svn dcommit
    

এখানেই শেষ. এটি খুব পরিষ্কার, হ্যাকিং নেই এবং সবকিছুই বাক্স থেকে পুরোপুরি কার্যকর হয়। উপভোগ করুন।


অনুরূপ প্রক্রিয়াটি চ্যানি.ওয়ার্ডপ্রেস.কম
2012/

দেখতে. যাইহোক, আমি তার উপায়টি বেশ বিভ্রান্তিকর বলে মনে করি এবং আমার দিকটি আরও খাটো (19/23 এর চেয়ে 8 টি পদক্ষেপ)। সম্ভবত আমি তাকে সঠিকভাবে পাচ্ছি না তবে আমি মনে করি তিনি তার দ্বিতীয় বুলেটে এসএনএন এবং গিট কমান্ডগুলি মিশ্রিত করেছেন।
কোডিংডেভ

আহ, হ্যাঁ, পার্থক্যটি হ'ল আপনার প্রক্রিয়াটি এসভিএন রেপোর গোড়ায় গিট আমদানি করে, এটি এটি একটি সাবফোল্ডারে আমদানি করে, এজন্য কয়েকটি git svnপ্রিপস প্রয়োজন।
TWiStErRob

Step ধাপে, গিট একীভূত হওয়া কি পুরানো হওয়া উচিত? আমার কাছে মনে হচ্ছে আপনি মাস্টারের একটি ডিসকমিট তৈরি করছেন যা আপনি পরিবর্তন করেন নি ?!
আলেকজান্ডার

@ আলেকজান্দার 'গিট রিবেস মাস্টার' ব্যবহার করে আমরা দ্রুত-ফরোয়ার্ড মার্জটি পাই, এটি দুই পিতা-মাতার একত্রীকরণ ব্যতিরেকে লিনিয়ার মার্জ। আমরা এখানে একটি রৈখিক ইতিহাস পেতে চাই।
কোডিংডেভ


3

আমার আমার বিদ্যমান গিট সংগ্রহস্থলটি একটি খালি এসভিএন সংগ্রহস্থলে প্রতিশ্রুতিবদ্ধ করা দরকার।

আমি এটি এইভাবে পরিচালনা করেছিলাম:

$ git checkout master
$ git branch svn
$ git svn init -s --prefix=svn/ --username <user> https://path.to.repo.com/svn/project/
$ git checkout svn
$ git svn fetch
$ git reset --hard remotes/svn/trunk
$ git merge master
$ git svn dcommit

এটি সমস্যা ছাড়াই কাজ করে। আমি আশা করি এটা কারো সাহায্যে লাগবে.

যেহেতু নিজেকে এসভিএন সংগ্রহস্থলের (আমার originব্যক্তিগত / জনসাধারণের কী প্রমাণীকরণ ব্যবহার করে) আলাদা আলাদা ব্যবহারকারীর সাহায্যে আমাকে নিজের অনুমোদন দিতে হয়েছিল, তাই আমাকে --usernameসম্পত্তিটি ব্যবহার করতে হয়েছিল ।


আপনি ইনস্টল করতে হতে পারে git-svnআগে এই সম্ভব, দেখতে stackoverflow.com/questions/527037/git-svn-not-a-git-command
flexponsive

2

আপনি আপনার প্রধান সংগ্রহস্থলের এবং "রপ্তানি" সময়ে সময়ে SVN করার পুনর্বিবেচনা করার জন্য শুধু প্রয়োজন যেমন গীত সঙ্গে কাজ অবহিত করে রাখতে চাই, তাহলে আপনি ব্যবহার করতে পারে দর্জি সুসংগত SVN সংগ্রহস্থলের রাখা। এটি বিভিন্ন উত্স নিয়ন্ত্রণ সিস্টেমের মধ্যে সংশোধনীগুলি অনুলিপি করতে পারে এবং গিটে আপনি যে পরিবর্তনগুলি করেন তা দিয়ে এসভিএন আপডেট করে।

আমি গিট-টু-এসভিএন রূপান্তর চেষ্টা করিনি, তবে এসভিএন -> এসভিএন উদাহরণের জন্য এই উত্তরটি দেখুন


2

তবুও আরও একটি ক্রম কাজ করেছে (প্রতিটি পদক্ষেপে কিছু মন্তব্য সহ):

  1. ইনস্টল git-svnএবং subversionটুলকিট:

    sudo apt-get install git-svn subversion
    
  2. ভিতরে স্যুইচ করুন PROJECT_FOLDER

    cd PROJECT_FOLDER
    
  3. সাবভারশন সার্ভারে প্রকল্পের পথ তৈরি করুন (দুর্ভাগ্যক্রমে বর্তমান git-svnপ্লাগইনে টরটোইজএসভিএন এর সাথে তুলনা করে একটি ত্রুটি রয়েছে)। এটি সরাসরি সোর্স কোডটিতে সঞ্চয় করতে অক্ষম PROJECT_FOLDER। পরিবর্তে, ডিফল্টরূপে, এটি এতে সমস্ত কোড আপলোড করবে PROJECT_FOLDER/trunk

    svn mkdir - প্যারেন্টস প্রোটোকল: /// পাথ / থেকে / রেপো / PROJECT_FOLDER / ট্রাঙ্ক-এম "গিট রেপো স্থানধারক তৈরি করছে"

এটি সেই জায়গা যেখানে trunkপথের শেষে বাধ্যতামূলক

  1. ফোল্ডারের git-svnঅভ্যন্তরে প্লাগইন প্রসঙ্গটি শুরু করুন.git

    git svn init -s protocol:///path/to/repo/PROJECT_FOLDER
    

    এটি সেই জায়গা যেখানে trunkপথের শেষে অপ্রয়োজনীয়

  2. একটি খালি Subversionসংগ্রহস্থল তথ্য আনুন

    git svn fetch
    

    এই পদক্ষেপটি git-svnপ্লাগইনের সাথে সাবভার্সন সার্ভারকে সিঙ্ক্রোনাইজ করতে সহায়তা করে । এটি সেই মুহুর্তে যখন git-svnপ্লাগইন remotes/originপথটি স্থাপন করে এবং trunkসার্ভারের পাশের সাবফোল্ডারের সাথে এটি যুক্ত করে ।

  3. git-svnপ্লাগইন প্রক্রিয়াটিতে যুক্ত হওয়ার আগে রিবসে পুরানো গিট কমিটস ঘটেছিল (এই পদক্ষেপটি is চ্ছিক )

    git rebase origin/trunk
    
  4. কমিট করার জন্য নতুন / সংশোধিত ফাইল যুক্ত করুন (এই পদক্ষেপটি গিট ক্রিয়াকলাপগুলির জন্য নিয়মিত এবং is চ্ছিক )

    git add .
    
  5. স্থানীয় গিট সংগ্রহস্থলে নতুন করে যুক্ত হওয়া ফাইলগুলি প্রতিশ্রুতিবদ্ধ (এই পদক্ষেপটি is চ্ছিক এবং কেবলমাত্র পদক্ষেপ 7 ব্যবহার করা হলে তা প্রযোজ্য):

    git commit -m "Importing Git repository"
    
  6. সমস্ত প্রকল্পকে ধাক্কা দিয়ে ইতিহাস সাব্ভারশন সার্ভারে পরিবর্তন করে:

    git svn dcommit
    

1

আপনি একটি নতুন এসভিএন সংগ্রহস্থল তৈরি করতে পারেন। আপনার গিট প্রকল্পটি রফতানি করুন (.git ফাইলগুলি সজ্জিত করে)। এটিকে এসভিএন সংগ্রহস্থলে যুক্ত করুন (গিটে আপনার এতক্ষণ যা ছিল তা দিয়ে সংগ্রহস্থল শুরু করা)। তারপরে একটি নতুন গিট প্রকল্পে এসভিএন সংগ্রহস্থল আমদানির জন্য নির্দেশাবলী ব্যবহার করুন।

তবে এটি আপনার পূর্ববর্তী গিট ইতিহাস হারাবে।


1

আপনার যদি কোনও নির্দিষ্ট এসভিএন ব্যবহার না করতে হয় এবং আপনি গিটহাব ব্যবহার করছেন তবে আপনি তাদের এসভিএন সংযোজকটি ব্যবহার করতে পারেন।

আরও তথ্য এখানে: সাবট্রিশনের সাথে গিটহাবের সাথে সহযোগিতা করা


এসভিএন কী? ( "... কোনও নির্দিষ্ট এসভিএন এবং ..." ) এ। এসভিএন সংস্করণ? এসভিএন ক্লায়েন্ট? অথবা অন্য কিছু?
পিটার মর্টেনসেন 21

1

আমি স্ক্যাটার নামক ওয়ার্ডপ্রেস সম্প্রদায়টিতে ব্যবহৃত একটি দুর্দান্ত সরঞ্জাম ভাগ করতে চাই

গিট ওয়ার্ডপ্রেস প্লাগইনস এবং কিছুটা স্যানিটি স্ক্যাটার

এটি ব্যবহারকারীদের স্বয়ংক্রিয়ভাবে ওয়ার্ডপ্রেস.আরভিউ এসভিএন-তে তাদের গিট সংগ্রহস্থল প্রেরণ করতে সক্ষম করে। তত্ত্বগতভাবে, এই কোডটি যে কোনও এসভিএন সংগ্রহস্থলে প্রয়োগ করা যেতে পারে।


লিঙ্কটি কার্যকরভাবে ভেঙে গেছে বলে মনে হচ্ছে ( "ইভানসোলোমন.মে সার্ভারটি সাড়া দিতে খুব বেশি সময় নিচ্ছে।" )।
পিটার মর্টেনসেন 21

1

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

  1. প্রয়োজনীয় প্যাকেজগুলি:

    $ sudo apt-get install git subversion mercurial python-subversion
    
  2. নিম্নলিখিতগুলিতে যোগ করে মার্চুরিয়ালটি কনফিগার করা দরকার ~/.hgrc:

    [extensions]
    hgext.convert=
    
  3. কিছু অস্থায়ী ওয়ার্কিং ডিরেক্টরি তৈরি করুন (মাইগ্রেট করার জন্য আমার কাছে বেশ কয়েকটি রিপোজিটরি ছিল তাই আমি এসভিএন এবং গিট সংস্করণগুলির জন্য পৃথক রাখতে ডিরেক্টরি তৈরি করেছি):

    $ mkdir svn
    $ mkdir git
    
  4. একটি খালি স্থানীয় এসভিএন সংগ্রহস্থল করুন:

    $ svnadmin create svn/project
    
  5. বিদ্যমান গিট সংগ্রহস্থলটি ক্লোন করুন:

    $ git clone server/path/project.git git/project
    
  6. মার্চুরিয়ালকে এটি করতে দিন:

    $ hg convert --dest-type svn git/project svn/project
    
  7. এখন এসভিএন সংগ্রহস্থলে সম্পূর্ণ কমিটের ইতিহাস থাকা উচিত, তবে মূল টাইমস্ট্যাম্পগুলির সাথে নয়। যদি এটি কোনও সমস্যা না হয় তবে পরবর্তী অংশটি 11 তম এড়িয়ে যান।

  8. অল্প কাজ করে, প্রতিটি প্রতিশ্রুতির তারিখ এবং সময় পরিবর্তন করা যেতে পারে । যেহেতু আমার সংগ্রহশালাগুলি মোটামুটি ছোট, তাই এটি নিজেই করা আমার পক্ষে সম্ভব ছিল। প্রথমে, pre-revprop-changeপ্রয়োজনীয় সম্পত্তিটি পরিবর্তিত করার জন্য নিম্নলিখিত বিষয়বস্তুগুলির সাথে এসভিএন সংগ্রহস্থলে একটি হুক তৈরি করুন :

    #!/bin/bash
    exit 0;
    

    এই স্ক্রিপ্টটি কার্যকর করতে হবে:

    $ chmod +x svn/project/hooks/pre-revprop-change
    
  9. মার্চুরিয়াল এসভিএন সংগ্রহস্থলের একটি ওয়ার্কিং কপি তৈরি করেছে, যার নাম প্রজেক্ট- ডাব্লিউসি, সুতরাং এটিতে স্যুইচ করুন এবং কমিটের সময়গুলি সম্পাদনা করুন:

    $ cd project-wc
    $ svn propedit svn:date --revprop -r 1
    

    সঠিক তারিখ এবং সময় প্রবেশ করুন (সময় অঞ্চলগুলিতে মনোযোগ দিন!) এবং সংরক্ষণ করুন। "সম্পত্তি এসএনএন-র জন্য নতুন মান সেট করুন: 1 পুনর্বিবেচনার তারিখ" বলে আপনার একটি বার্তা পাওয়া উচিত।
    এখন ধুয়ে নিন এবং প্রতিটি অন্যান্য সংশোধনের জন্য পুনরাবৃত্তি করুন।

  10. সবকিছু ঠিকঠাক দেখাচ্ছে কিনা তা নিশ্চিত করার জন্য ptionচ্ছিকভাবে কমিটের ইতিহাস পরীক্ষা করুন:

    $ svn log -r 1:HEAD
    

    তারপরে একটি স্তর ফিরে যান:

    $ cd ..
    
  11. সংগ্রহস্থলটি ডাম্প করুন:

    $ svnadmin dump svn/project > project.dump
    
  12. এবং আপনার সাবভারশন সার্ভারে ডাম্প লোড করুন। সম্পন্ন!

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


1

তিনটি পদ্ধতি আছে :

  1. অন্যান্য উত্তর হিসাবে পুনর্বাসন

  2. কমিট আইডি: স্যাভন ফার্স্ট কমিট আইডি এবং গিট প্রথম কমিট আইডি সন্ধান করুন, তাদের .git / তথ্য / গ্রাফ্টগুলিতে প্রতিধ্বনিত করুন: echo "git_id svn_id}" > .git/info/graftsতারপরেgit svn dcommit

  3. প্রতিটি গিট কমিট পরীক্ষা করুন, ফাইলগুলিকে এসএনএন_রেপো, এসএনএন কমিটে অনুলিপি করুন

বশ ডেমো : গিথুব ডেমো

v1.x reb পুনরায় ব্যবহার করুন এবং আইডি প্রতিশ্রুতিবদ্ধ

v2.x: অনুলিপি ফাইলগুলি ব্যবহার করুন, তারপরে এসএনএন কমিট করুন


0

আমার ক্ষেত্রে, আমাকে এসভিএন থেকে একটি পরিষ্কার প্রকল্প শুরু করতে হয়েছিল

$ Project> git svn init protocol://path/to/repo -s
$ Project> git svn fetch

আপনার সমস্ত প্রকল্পের উত্স যুক্ত করুন ...

$ Project> git add .
$ Project> git commit -m "Importing project sources"
$ Project> git svn dcommit

0

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

git svn dcommit

it গিট এসএনএন ডিকমিট

প্রতিস্থাপনে অবিচ্ছিন্ন মান $ u ব্যবহার করুন / গুলি / লিবি / স্পেরল 5/vendor_perl/5.22/Git/SVN.pm লাইন 101 এ।

একচেটিয়াকরণ (।) বা স্ট্রিংয়ে /usr/lib/perl5/vendor_perl/5.22/Git/SVN.pm লাইন 101. রেফেস / রিমোটস / উত্স / HEAD: ' https://192.168.2.101/ এ স্ট্রাইটে অবিচ্ছিন্ন মান value u ব্যবহার করুন $ svn / PROJECT_NAME 'তে পাওয়া যায় নি'

আমি https://github.com/nirvdrum/svn2git/issues/50 থ্রেডটি পেয়েছি এবং পরিশেষে আমি যে সমাধানটি নীচের ফাইলে 101 101 /usr/lib/perl5/vendor_perl/5.22/Git/SVN.pm এ প্রয়োগ করেছি তা পেয়েছি

আমি প্রতিস্থাপন

$u =~ s!^\Q$url\E(/|$)!! or die

সঙ্গে

if (!$u) {
    $u = $pathname;
} 
else {
       $u =~ s!^\Q$url\E(/|$)!! or die
      "$refname: '$url' not found in '$u'\n";
}

এটি আমার সমস্যাটি স্থির করেছে।


-1

আপনি কি কমিট করতে চাই না যদি প্রত্যেক কমিট আপনি গীত ইন SVN সংগ্রহস্থলে? আপনি যদি কেবল পাইপটি বেছে বেছে বেছে প্রেরণ করতে চান? ঠিক আছে, আমার আরও ভাল সমাধান আছে।

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

তারপরে আমি একটি আলাদা এসভিএন লোকাল ওয়ার্কিং কপি রাখি যা আলাদা ফোল্ডারে রয়েছে in এটিই আমি এসভিএন থেকে ফিরে কমিট করেছিলাম এবং তার জন্য আমি কেবল এসভিএন কমান্ড লাইন ইউটিলিটি ব্যবহার করি।

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

এইভাবে আমাকে কোনও রিবিসিং করতে হবে না, কারণ রিবেসিং হ'ল ফ্রিবিজিংয়ের মতো।

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