ট্রাঙ্ক থেকে কীভাবে সঠিকভাবে একটি এসভিএন ট্যাগ তৈরি করবেন?


282

আমি সাবভার্সনে আমার প্রথম প্রকল্পটি তৈরি করছি । এখনও পর্যন্ত

 branches
 tags
 trunk

আমি মনে করি আমার তাত্ক্ষণিকভাবে শাখাগুলিকে একক করা এবং আবার শুরু করা দরকার। আপডেট শাখাগুলি আদর্শ।

আমি ট্রাঙ্কে কাজ করছি এবং বিষয়বস্তুগুলিকে ট্যাগগুলিতে নিম্নরূপে সরিয়ে নিয়েছি।

mkdir tags/1.0
cp -rf trunk/* tags/1.0
svn add tags/1.0
svn commit -m " create a first tagged version"

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

স্বতন্ত্র ফাইলগুলির জন্য আমার কি এসএনএন কপি ব্যবহার করা উচিত?

mkdir tags/1.0
svn add tags/1.0
svn copy trunk/file1 tags/1.0
svn copy trunk/file2 tags/1.0
svn copy trunk/file3 tags/1.0
svn commit -m " create a first tagged version"

আমার কি সম্পূর্ণ ডিরেক্টরিতে এসএনএন কপি ব্যবহার করা উচিত?

svn copy cp -rf trunk tags/1.0
svn commit -m " create a first tagged version"

10
দুর্ভাগ্যক্রমে আমি এই ক্ষেত্রে সমস্ত পছন্দ করি না ... গিটটি খুব জঘন্য জাদু।
ojblass

উত্তর:


186

আপনি সঠিক যে ট্যাগ ফোল্ডারে ফাইল যুক্ত করা "ঠিক" নয়।

আপনি সঠিকভাবে অনুমান করেছেন যে copyএটি ব্যবহারের অপারেশন; এটি সাবভারশনকে এই ফাইলগুলির ইতিহাস ট্র্যাক করতে দেয় এবং এগুলিও (আমি ধরে নিই) এগুলি আরও দক্ষতার সাথে সঞ্চয় করতে দেয়।

আমার অভিজ্ঞতায় পুরো প্রকল্পের অনুলিপি ("স্ন্যাপশট") করা ভাল, যেমন রুট চেক-আউট অবস্থান থেকে সমস্ত ফাইল। সেই সময়টিতে কোনও নির্দিষ্ট সময়ে পুরো প্রকল্পের রাজ্যের সত্য উপস্থাপনা হিসাবে স্ন্যাপশটটি নিজে থেকেই দাঁড়াতে পারে।

"বই" এর এই অংশটি দেখায় যে কমান্ডটি সাধারণত কীভাবে ব্যবহৃত হয়।


15
বইটির 1.1 সংস্করণটি ভয়াবহভাবে পুরানো। এখানে আরও ভাল লিঙ্কটি রয়েছে: এসএনএনবুক.আরড- বিবিএন
কুইন টেলর

1
অনুলিপি করা ফাইলগুলি কোনও অতিরিক্ত স্থান ব্যয় করে না
কার্লোস

424

ব্যবহার করুন:

svn copy http://svn.example.com/project/trunk \
      http://svn.example.com/project/tags/1.0 -m "Release 1.0"

সাধারণভাবে সংক্ষেপে:

cd /path/to/project
svn copy ^/trunk ^/tags/1.0 -m "Release 1.0"

36
আমি এটি উত্তর হিসাবে চিহ্নিত। মাত্র একটি অতিরিক্ত নোট। আপনি ট্রাঙ্কের একটি পূর্ববর্তী সংশোধন এবং এটি "ট্যাগ" করতে পারেন। কমান্ড: svn অনুলিপি -আর 123 " svn.example.com/project/trunk " " svn.example.com/project/tags/1.0 " -m "ট্যাগিং, কিন্তু পুরানো সংশোধন (123) ব্যবহার করে" "
গ্রানাডা কোডার

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

4
কেবলমাত্র একটি এফওয়াইআই, আপনার ইউআরএল এইচপি বা https সহ আপনার সংগ্রহস্থলের সাথে মেলে কিনা তা নিশ্চিত করুন।
নরম্যান এইচ

2
প্রথম লাইনের শেষে \ কেন?
ফ্র্যাক্টালাইস্তে

1
@ জনি আমি উপরের কমান্ডটি "-ম" বিকল্প ব্যতীত চালাতে পারছি না। আমি ম্যাক টার্মিনাল ব্যবহার করছি।
আব্দুররহমান মুবীন আলী

14

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

দেখে মনে হচ্ছে ডিজাইন অনুসারে সত্যিকারের যথাযথ মেটা ট্যাগ তৈরির জন্য এসএনএন-এর কোনও উপায় নেই।


4
"সর্বশেষ পরিবর্তিত রেভ" ব্যবহার করা সম্ভব: echo "{ 'svnRev': \"`svn info | awk '/Last Changed Rev:/{print $4}'`\" }" >svnver.txt`
18446744073709551615

এইভাবে, (অবশ্যই) বিভিন্ন সংশোধন সংখ্যা সহ দুটি শাখা এখনও একই সফ্টওয়্যার সংস্করণ তৈরি করে।
18446744073709551615

1
হ্যাঁ, আপনি সর্বশেষ পরিবর্তিত রেভ সম্পর্কে ঠিক বলেছেন, তবে এটি সত্য রূপান্তরিত করে না যে নকশার দ্বারা সাবভার্সনে কোনও বাস্তব ট্যাগ নেই।
আলেকজান্ডার আমেলকিন

@ 18446744073709551615: আপনি বিকল্পটি awkব্যবহার করে সরাসরি --show-itemsvn info --show-item last-changed-revision
এসএনএন

12

কেবল এটি ব্যবহার করুন:

svn  copy  http://svn.example.com/project/trunk  
           http://svn.example.com/project/branches/release-1
           -m  "branch for release 1.0"

(অবশ্যই সমস্ত এক লাইনে)) আপনার সর্বদা পুরো ট্রাঙ্ক ফোল্ডার এবং সামগ্রীগুলির একটি শাখা তৈরি করা উচিত। ট্রাঙ্কের উপ-অংশগুলি শাখা করা অবশ্যই সম্ভব তবে এটি কখনও কখনও ভাল অনুশীলন হবে না। আপনি চান যে শাখাটি এখন ট্রাঙ্কের মতো আচরণ করবে, এবং এর জন্য আপনাকে পুরো ট্রাঙ্কটি শাখা করতে হবে।

আমার ব্লগে এসভিএন ব্যবহারের আরও ভাল সংক্ষিপ্তসার দেখুন: এসভিএন এসেন্সিয়েন্টস এবং এসভিএন এসেন্সিয়ালস 2


আপনি যদি কেবল ট্রাঙ্ক থেকে চেকপুট করি এবং আমার স্ক্রিপ্টটি ভিতরে রাখি তবে এটির মতো দেখতে কেমন হবে তা কী আপনি বর্ণনা করতে পারেন।
আহলব্রিচ

আপনি যদি ট্রাঙ্ক ফোল্ডারটি পরীক্ষা করে দেখে থাকেন তবে আপনার সংগ্রহস্থলের http ঠিকানাটি ব্যবহার করা দরকার। ট্রাঙ্ক ফোল্ডারটি পরীক্ষা করা প্রস্তাবিত প্যাটার্ন হওয়ায় আমি এটি উপস্থাপনের উত্তর আপডেট করেছি।
AgilePro

এই উত্তর কীভাবে গৃহীত উত্তর থেকে আলাদা?
ড্যানিয়েল ডাব্লিউ।

11

কচ্ছপ ব্যবহার করতে পারে:

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-branchtag.html


1
আমি এর উপরে একটি বৃহত্তর সিস্টেম তৈরি করতে যাচ্ছি তাই আমাকে প্রদত্ত মূল ফাংশনগুলিতে ফোকাস করা দরকার।
ojblass

2
ধন্যবাদ! কমান্ড লাইনটি সঠিক হতে পারে তবে এটি আরও কার্যকর।
রায় 301

7

@ ভিক্টর হুগো এবং @ ইউনুইন্ড সঠিক, এবং বিজয়ের সমাধান খুব সহজ। তবে আপনার এসভিএন প্রকল্পে বহিরাগত থেকে সাবধান। আপনি যদি বাহ্যিক গ্রন্থাগারগুলি উল্লেখ করেন তবে আপনি বাহ্যিক রেফারেন্স সহ ডিরেক্টরিগুলি ট্যাগ করার সময় বাহ্যিকের পুনর্বিবেচনা রেফারেন্স (কোনও ট্যাগ, বা হেড, বা নম্বর) অপরিবর্তিত থাকবে।

ট্যাগিংয়ের এই দিকটি পরিচালনা করতে কোনও স্ক্রিপ্ট তৈরি করা সম্ভব, সেই বিষয়ে আলোচনার জন্য, এই এসও নিবন্ধটি দেখুন: বহিরাগতদের সাথে একটি এসভিএন চেকআউট ট্যাগ করা


5

সাবভার্সন রিপোজিটরি ট্যাগ করার জন্য অন্য বিকল্পটি হ'ল ট্যাগটি এসএনএন-তে যুক্ত করা: লগ সম্পত্তি এই জাতীয়:

   echo "TAG: your_tag_text" > newlog
   svn propget $REPO --revprop -r $tagged_revision >> newlog
   svn propset $REPO --revprop -r $tagged_revision -F newlog
   rm newlog

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

   svn log | awk '/----/ {
                      expect_rev=1;
                      expect_tag=0;
                  }
                  /^r[[:digit:]]+/ {
                      if(expect_rev) {
                          rev=$1;
                          expect_tag=1;
                          expect_rev=0;
                      }
                  }
                  /^TAG:/ {
                      if(expect_tag) {
                          print "Revision "rev", Tag: "$2;
                      }
                      expect_tag=0;
                  }'

এছাড়াও, আপনাকে যদি প্রয়োজন হয় তবে আপনি নির্বিঘ্নে ট্যাগগুলি মুছতে পারেন। তাই ট্যাগগুলি একটি সম্পূর্ণ মেটা-তথ্যে পরিণত হয় এবং আমি এটি পছন্দ করি।


0
svn copy http://URL/svn/trukSource http://URL/svn/tagDestination -m "Test tag code" 
  $error[0].Exception | Select-object Data

ইউআরএল পথ পরিবর্তন করার জন্য আপনাকে যা করতে হবে তা সমস্ত। এই কমান্ডটি নতুন dir "ট্যাগডেস্টেশন" তৈরি করবে। দ্বিতীয় লাইনটি আপনাকে কোনও ত্রুটি ঘটলে সম্পূর্ণ ত্রুটির বিবরণ জানাতে দেওয়া হবে। না তৈরি হলে এসএনএন এনভি ভেরিয়েবল তৈরি করুন । পরীক্ষা করতে পারেন (সিএমডি: - সেট, পাওয়ারশেল: - গেট-চাইল্ড আইটেম এনভ :) ডিফল্ট পাথ হ'ল "সি: \ প্রোগ্রাম ফাইলস ort কচ্ছপ এসভিএন \ বিন \ টরটোইসপ্রোক.এক্সে"


-4

এটা চেষ্টা কর. এটা আমার জন্য কাজ করে:

mkdir <repos>/tags/Release1.0
svn commit <repos>/tags/Release1.0 
svn copy <repos>/trunk/* <repos>/tag/Release1.0
svn commit <repos/tags/Release1.0 -m "Tagging Release1.0"

1
এটি অবশ্যই যেতে ভুল উপায়। ট্যাগটি (প্রকাশ 1.0) সোর্স ডিরেক্টরি (ট্রাঙ্ক) এর অনুলিপি হওয়া উচিত, নির্বিচারে তৈরি ডিরেক্টরি নয়। আপনি যদি সেভাবে এটি করেন তবে আপনি উত্স ডিরেক্টরিটির ইতিহাস নিজেই হারাবেন এবং কেবল বংশধর নোডের (ফাইল এবং ডিরেক্টরি) ইতিহাস রাখবেন।
আলেকজান্ডার আমলকিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.