মার্চুরিয়াল দিয়ে, আমি কীভাবে চাপ দেওয়ার আগে একের মধ্যে কয়েকটি ধারাবাহিক পরিবর্তন "সংকুচিত" করতে পারি?


96

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

আমার কাছে এখন 3 টি পরিবর্তনসেট রয়েছে যা উদাহরণস্বরূপ "বাস্তবায়ন বৈশিষ্ট্য এক্স" বার্তা সহ একটি পরিবর্তন হিসাবে আমি দূরবর্তী সংগ্রহস্থলে যেতে চাই।

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


40
স্পষ্টতই আপনার চেঞ্জসেটগুলি সংকুচিত করার চেষ্টা করে কথা বলার জন্য এটি আমার জায়গা নয়, তবে আপনি বিবেচনা করতে পারেন যে সংস্করণ নিয়ন্ত্রণের অর্ধেক মূল্য উত্তর দিচ্ছে মাস এবং বছর পরে "কেন" কেবল "কী" তা উত্তর দিচ্ছে না। কীভাবে কোনও বৈশিষ্ট্য এসেছে এবং কোন পর্যায়ে ভবিষ্যতের মূল্য হতে পারে তার সঠিক উপস্থাপনা। এটি ত্যাগ করা তাই মনে হচ্ছে ... unversioncontrolly।
Ry4an ব্রাস

এটি অন্য একটি প্রশ্নের জবাব দেয় ... 'হেসেডিট' এবং 'ধসের' মধ্যে পার্থক্য কী
sylvanaar

4
ধসের ফলে হিস্টেডিটের বৈশিষ্ট্যগুলির একটি উপসেট সরবরাহ করা হয় এবং হিস্টেডিটে আরও অনেক বেশি স্বজ্ঞাত ইউএক্স থাকে।
স্টিফান রুসেক

4
এটি মার্জড চেঞ্জসেট বার্তা সম্পাদনা করার জন্য একটি প্রক্রিয়াও সরবরাহ করে।
স্টিফান রুসেক

4
@ রিয়্যান: আসলে, স্কোয়াশিং / ভেঙে পড়া কিছু ক্ষেত্রে সংস্করণ নিয়ন্ত্রণের সাথে প্রাসঙ্গিকতা যুক্ত করে। স্কোয়াশ না করে, আমার প্রতিদিন দুটি কমিট থাকবে যা বৈশিষ্ট্য বা বাগ ফিক্সগুলির সাথে কিছুই করার নেই, তবে ল্যাপটপ থেকে ডেস্কটপে কোড পরিবর্তন করার জন্য এবং তার বিপরীতে are তারা কেবল সংস্করণ ইতিহাসে শব্দ যোগ করে।
জন রেনল্ডস

উত্তর:


39

সঙ্কুচিত এক্সটেনশন সম্পর্কে কীভাবে ?


20
ভবিষ্যতের পক্ষ থেকে শুভেচ্ছা! আমি ঠিক একই কার্যকারিতা জন্য googled এবং স্পষ্টতই আজকাল এইচজি এই বাক্সের বাইরে সমর্থন করে hg rebase --collapseরিবেস কমান্ডে hg উইকি দেখুন। যেহেতু এই প্রশ্নটি তৃতীয় সামগ্রিক অনুসন্ধান ফলাফল এবং স্ট্যাকওভারফ্লোতে প্রথম আমি ভেবেছিলাম যে তথ্যটি দরকারী হতে পারে।
a.peganz

4
ভবিষ্যতেও আরও শুভেচ্ছা !! রিবাজ এক্সটেনশানটি পুরোপুরি এক শাখাগুলি থেকে অন্য শাখায় স্থানান্তরিত লক্ষ্যবস্তুতে লক্ষ্যযুক্ত বলে মনে হয়। হ্যাঁ, একটি --collapse বিকল্প রয়েছে, তবে এখনও শাখা জুড়ে পরিবর্তনসেটের সেটটি সরানোর সময় কেবল প্রযোজ্য বলে মনে হয়। < Mercurial-scm.org/wiki/… > দেখুন
ব্র্যাড Oestreicher

4
আপনি ব্যবহার করতে পারেন hg rebaseসঙ্গে --collapseএকটি একক শাখা মধ্যে।
ইউইউডিডিএলআরএলআরএসস

52

Histedit এক্সটেনশন ঠিক আপনি যা খুঁজছেন হয়।

hg histedit -o

বা

hg histedit --outgoing

বহির্গামী পরিবর্তনগুলির একটি তালিকা এনে দেবে। তালিকা থেকে আপনি পারেন

  • একটি একক চেঞ্জসেট তৈরি করে 2 বা ততোধিক চেঞ্জসেটগুলি ভাঁজ করুন
  • ইতিহাস থেকে সেগুলি সরিয়ে চেঞ্জসেটগুলি ফেলে দিন
  • আপনার পছন্দ মত পরিবর্তনগুলি পুনঃক্রম করুন।

histedit আপনাকে ভাঁজ করা পরিবর্তনগুলির নতুন প্রতিশ্রুতিবদ্ধ বার্তার জন্য অনুরোধ করবে যা এটি "\ n *** \ n" পৃথক করে দুটি বার্তায় ডিফল্ট হয়েছে।

এমকিউ এক্সটেনশন ব্যবহার করে আপনিও অনুরূপ ফলাফল পেতে পারেন তবে এটি আরও অনেক কঠিন।

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


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

21

হ্যাঁ, আপনি এটি প্যাচগুলি দিয়ে করতে পারেন: ধরে নেওয়া যাক আপনার কাজটি 100 সহ 110 এর মধ্যে চেঞ্জসেটে অন্তর্ভুক্ত

  1. একটি প্যাচ তৈরি করুন:

    % hg export -o mypatch 100:110 --git

  2. 99 এ আপডেট করুন:

    % hg update 99

  3. - কোন-প্রতিশ্রুতি সহ প্যাচটি প্রয়োগ করুন (অন্যথায় আপনি আপনার সমস্ত পরিবর্তনগুলি ফিরে পাবেন):

    % hg import --no-commit mypatch

  4. একবারে সমস্ত পরিবর্তন প্রতিশ্রুতিবদ্ধ:

    % hg commit

  5. আপনার এখন দুটি মাথা রয়েছে (১১০ এবং ১১১) যা তারা আপনার কার্যনির্বাহী ডিরেক্টরিতে উত্পন্ন ফাইলগুলির আকারের সমতুল্য হতে পারে - পুরানোগুলি ছিটকে দেওয়ার আগে তাদের বিচক্ষণতার জন্য আলাদা হতে পারে:

    % hg strip 100

ঠিক আছে, এখন আমি এগুলি সবই বানিয়ে ফেলেছি, এটি দীর্ঘ মনে হচ্ছে, তবে আমি নিজে এটি বেশ কয়েকবার করে ফেলেছি, আমি এটি খুব বেশি বিরক্তিকর বলে মনে করি না ...


4
দুর্দান্ত উত্তর, তবে একটি পূর্বশর্ত রয়েছে: এমকিউ এক্সটেনশন সক্ষম করতে হবে
ক্রিস কেলি

বাইনারি ফাইলগুলিতেও পরিবর্তনগুলি অন্তর্ভুক্ত করতে, --git বিকল্পটি ব্যবহার করার বিষয়টি নিশ্চিত করুন: উদাহরণস্বরূপ: "এইচজি এক্সপোর্ট -o মাইপ্যাচ 100: 110 --git" আরও তথ্যের জন্য, দয়া করে দেখুন: stackoverflow.com/a/12537738/ 367663 আমি উত্তরটি সংশোধন করার জন্য স্বাধীনতা নিয়েছি।
খার্লোস ডমিংয়েজ

4
অতিরিক্ত জটিল বলে মনে হচ্ছে, কেন না hg strip --keepএবং তারপরে একটি প্রতিশ্রুতিতে সমস্ত কিছু করা হয়?
জি ডেমেকি

@ জি ডিমেকি কারণ এটি একটি সম্ভাব্য অত্যন্ত ক্ষয়ক্ষতিপূর্ণ অপারেশন ..? যদিও এমকিউ হ'ল ওভারকিল (এবং এমনকি এটি সুপারিশ করা হয় না) ব্যতীত যখন এ জাতীয় কর্মপ্রবাহের প্রয়োজন হয়।
ব্যবহারকারী 2864740

@ ব্যবহারকারী ২2864647৪০ আপনি ঠিকই বলেছেন, কারণ আমি কোনও বুধবার বিশেষজ্ঞ নই। তবে ডিফল্টরূপে ডিরেক্টরিতে hg stripএকটি ব্যাকআপ রাখবে .hg/strip-backup/। আমার ধারণা এটি নিরাপদ হিসাবে না git reflogতবে এখনও একরকম উদ্ধার সরবরাহ করে।
জি ডেমেকি

19

আপনি যদি টার্টোইজএইচজি ব্যবহার করে থাকেন তবে ব্যবহারটি কেবল দুটি সংশোধনী নির্বাচন করতে পারে (পরবর্তী-পরবর্তীগুলি নির্বাচন করতে সিটিআরএল ব্যবহার করুন), ডান ক্লিক করুন এবং "সংক্ষিপ্ত ইতিহাস" নির্বাচন করুন ।

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

আপনার যদি আর পুরানো পরিবর্তন তালিকার প্রয়োজন না হয় তবে আপনি কেবল তা ছিনিয়ে নিতে পারেন: এর জন্য এমকিউ এক্সটেনশন ব্যবহার করুন। আবার, টর্টোইজএইচএইচ: প্রথম পরিবর্তনের তালিকায় ডান ক্লিক করুন যা এর বংশধরদের সমস্ত সাথে ছিনিয়ে নেওয়া দরকার, "ইতিহাসের পরিবর্তন করুন -> স্ট্রিপ"


18

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

hg qimport -r <first>:<last> 
    -- where <first> and <last> are the first and last changesets 
    -- in the range of revisions you want to collapse

hg qpop <first>.diff
    -- remove all except for the first patch from the queue
    -- note: mq names patches <#>.diff when it imports them, so we're using that here

hg qfold <next>.diff
    -- where <next> is <first>+1, then <first>+2, until you've reached <last>

hg qfinish -a
    -- apply the folded changeset back into the repository

(কিউফোল্ড স্টেপ করার আরও ভাল উপায় হতে পারে তবে আমি এটি সম্পর্কে অবগত নই, কারণ আমি সাধারণত এই অপারেশনের জন্য টরটোইজ এইচজি ব্যবহার করি।)

এটি প্রথমে কিছুটা জটিল বলে মনে হচ্ছে তবে একবার আপনি এমকিউ ব্যবহার করা শুরু করলে এটি বেশ সোজা এবং প্রাকৃতিক - প্লাস আপনি এমকিউ দিয়ে সমস্ত ধরণের অন্যান্য জিনিস করতে পারেন যা বেশ কার্যকর হতে পারে!


4

hg collapseএবং hg histeditসেরা উপায়। অথবা, বরং সবচেয়ে ভাল উপায় হ'ল যদি তারা নির্ভরযোগ্যভাবে কাজ করে ... আমি histeditতিন মিনিটের মধ্যে স্ট্যাক ডাম্পের সাথে ক্র্যাশ হয়ে গেলাম । Collapseযে খুব ভাল না।

ভেবেছিলাম আমি আরও দুটি বিকেএম শেয়ার করতে পারি:

  1. hg rebase --collapse

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

  2. foo/.hgকার্য ডিরেক্টরি ( bar) এবং এর ফাইলগুলিতে সংগ্রহস্থল ( ) সরান । প্রায় অন্য উপায় না.

কিছু লোক দুটি ক্লোন গাছ তৈরি করার, এবং তাদের মধ্যে ফাইলগুলি অনুলিপি করার বিষয়ে কথা বলেছেন। বা তাদের মধ্যে প্যাচিং। পরিবর্তে .hgডিরেক্টরিগুলি সরানো সহজ easier

hg clone project work
... lots of edits
... hg pull, merge, resolve
hg clone project, clean
mv work/.hg .hg.work
mv clean/.hg work/.hg
cd work
... if necessary, pull, nerge, reconcile - but that would only happen because of a race
hg push

এটি ততক্ষণ কাজ করে যতক্ষণ না সত্য সংগ্রহস্থল, .hgগাছগুলি কার্যকারী ডিরেক্টরি এবং এর ফাইলগুলির থেকে পৃথক।

তারা যদি স্বাধীন না হয় ...


2015 এ histeditএই কাজের জন্য খুব ভাল বিকল্প is আমি গিট রিবেস -২ করার সময় আমি এখনও এটি বিশ্বাস করি না, তবে এটি ক্রাশ হয় না ... যদি কোনও কিছু ভয়াবহভাবে ভুল হয়ে যায় তবে কমপক্ষে নতুন সংস্করণগুলি আপনাকে একটি অস্থায়ী শাখায় ফেলে রাখবে যাতে কেবলমাত্র চেঞ্জসেটগুলি ছিনিয়ে নেওয়া হবে নতুন শাখা প্রতিশ্রুতিবদ্ধ পরে হয়।
ব্যবহারকারী 2864740

2

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

http://martinfowler.com/bliki/MercurialSquashCommit.html


এটি কিছুটা জটিল দেখায়, তবে লিঙ্কটির জন্য ধন্যবাদ। সত্যিকার অর্থে আমি এমন কিছু যাদুবিদ্যার প্রসারের জন্য প্রত্যাশা করছি যা আমি যা করতে চাই ঠিক তেমনই করবে, যেমন আনয়ন এবং ট্রান্সপ্ল্যান্টটি টানা এবং চেরি-পিকিং চ্যাঙ্গসেটগুলি দিয়েছিল।
লুকাস

0

শুধু hg strip --keepকমান্ড দিচ্ছেন না কেন ?

তারপরে আপনি একটি প্রতিশ্রুতি হিসাবে সমস্ত পরিবর্তন করতে পারেন।


@ স্ট্রাবেরি একটি উত্তর দেয় না ?? মনে হয় এটি লেখকের প্রশ্নের সঠিক উত্তর দেয়। আপনি কি আপনার বক্তব্যটি বিশদভাবে বলতে পারবেন?
জি ডেমেকি

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

4
@ স্ট্রাবেরি আসলে এটি প্রাচীন থ্রেড। তবে গৃহীত উত্তরটি পুরানো, কারণ মার্চুরিয়ালের আর এই কাজের জন্য পৃথক তৃতীয় পক্ষের বর্ধনের দরকার নেই।
জি ডেমেকি

0

হিস্টেডিট আপনি যা চান তা করবে তবে এটি সম্ভবত ওভারকিল। আপনার কেবলমাত্র যদি প্রয়োজন হয় তবে কিছু পরিবর্তনসেটগুলি একসাথে ভাঁজ করা হবে সঙ্কুচিত এক্সটেনশনটি কাজটি করবে।


4
যদিও এটি ইউআই ব্যবহার ও বোঝার জন্য অনেক সহজ সরবরাহ করে যা এটি ব্যবহারের যথেষ্ট কারণের চেয়ে বেশি তবে এটি মার্জড চেঞ্জসেট বার্তা সম্পাদনা করার জন্য একটি প্রক্রিয়াও সরবরাহ করে, যা আমি সর্বদা করতে চাই যখন আমি সবসময়ই করতে চাই মার্চ চেঞ্জসেটগুলি।
স্টিফান রুসেক

এবং কেবলমাত্র ইউআই বোঝার সমস্যাটি আসলেই বুঝতে পারে না .. যাইহোক, অতীতে হিস্টেডিট 'মেসেজ' পরিবর্তন করার পাশাপাশি 'ভাঁজ' করার সময় বার্তা পরিবর্তন করার অনুমতি দেয়। হেসটেডিট নিখুঁত; যদি কিছু হয় তবে ধসের এক্সটেনশন অপব্যবহারযোগ্য।
ব্যবহারকারী 2864740

0

ধরুন আপনার দুটি অপ্রকাশিত THISএবং THATমার্চুরিয়ালে প্রতিশ্রুতিবদ্ধ এবং তাদের THISবিন্দুতে একক প্রতিশ্রুতিতে যোগদান করতে পছন্দ করুন ::

... --> THIS --> ... --> THAT --> ... --> LAST

আপনার কমিট প্রকাশিত হয়নি তা পরীক্ষা করুন ::

$ hg glog -r "draft() & ($THIS | $THAT)"

প্রতিশ্রুতিবদ্ধ আপডেট LAST::

$ hg up

এবং THISএমকিউ :: তে আমদানি কমিট করে ::

$ hg qimport $THIS::.

সমস্ত প্যাচ আন-প্রয়োগ করুন এবং কেবলমাত্র প্রথমে প্রয়োগ করুন THIS::

$ hg qpop -a
$ hg qpush
$ hg qapplied
... THIS ...

এর সাথে যোগ দিন THAT::

$ hg qfold $THATNAME

দ্রষ্টব্য নাম THATNAMEব্যবহার ::

$ hg qseries

সমস্ত প্যাচ প্রয়োগ করুন এবং তাদের সংগ্রহস্থল ইতিহাসে সরান ::

$ hg qpush -a
$ hg qfinish -a

বিষয়বস্তুতে আমার ব্লগ পোস্টটি মার্চুরিয়ালে দুটি কমিটিতে যোগদান করছে


0

হ্যাঁ, strip --keepলেখকের প্রশ্নের জন্য কাজ করে। তবে এটি অন্যদের থেকে কিছুটা আলাদা ছিল, উদাহরণস্বরূপ, যদি আপনার 1 থেকে 30 সংস্করণ থাকে তবে কেবল 12-15 সংস্করণটি সঙ্কুচিত করতে চান। অন্যান্য সমাধানগুলি কাজ করে তবে তা হয় না strip --keep

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