অমীমাংসিত পরিবর্তন কেন করবেন না?


15

একটি traditionalতিহ্যবাহী ভিসিএসে, আমি বুঝতে পারি যে আপনি কেন অমীমাংসিত ফাইল প্রতিশ্রুতিবদ্ধ করবেন না কারণ আপনি বিল্ডটি ভেঙে ফেলতে পারেন। যাইহোক, আমি বুঝতে পারি না কেন আপনি ডিভিসিএসে অমীমাংসিত ফাইল প্রতিশ্রুতিবদ্ধ করবেন না (তাদের মধ্যে কিছু আসলে আপনাকে ফাইল প্রতিরোধ করতে বাধা দেবে )।

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

মার্জ প্রক্রিয়া চলাকালীন প্রতিশ্রুতিবদ্ধ করতে সক্ষম হওয়ার বিভিন্ন সুবিধা রয়েছে (যেমনটি আমি দেখছি):

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

আপনি সম্ভবত একক পরিবর্তনের পরিবর্তে মার্জ হিসাবে রূপসীতার একটি সেট সেট করতে পারেন। এটি আপনাকে এখনও যেমন সরঞ্জাম ব্যবহারের অনুমতি দেয় git rerere

তাহলে কেন অমীমাংসিত ফাইলগুলি দিয়ে প্রতিশ্রুতি দেওয়া / রোধ করা হচ্ছে? Traditionতিহ্য ছাড়া অন্য কোনও কারণ আছে কি?


1
কাদের দ্বারা এটি ভ্রষ্ট করা বা প্রতিরোধ করা হয়েছে?
পিডিআর

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

1
সুতরাং "অমীমাংসিত ফাইলগুলি" দ্বারা, আপনি কি আসলে "অমীমাংসিত মার্জ" মানে?
pdr

@ পিডিআর নং, hgপ্রকৃতপক্ষে এমন ফাইলগুলির একটি তালিকা বজায় রাখে যা "সমাধান" (ব্যবহার করে hg resolve) হিসাবে পতাকাঙ্কিত বা না করা হয়েছে । Uএই তালিকায় যদি কোনও ফাইল থাকে তবে তা আপনাকে প্রতিশ্রুতিবদ্ধ হতে দেবে না।
বিস্ফোরণ বড়ি

1
hg resolveসংঘাতের সাথে একত্রীকরণের জন্য বিশেষভাবে ব্যবহৃত হয়; দেখতে selenic.com/mercurial/hg.1.html#resolveNote that Mercurial will not let you commit files with unresolved merge conflicts. You must use hg resolve -m ... before you can commit after a conflicting merge.
মাইক পার্টরিজ

উত্তর:


6

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

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


5
আমি জানি না যে আমি যে কোনও প্রতিশ্রুতি টানতে সক্ষম হয়েছি এবং এটি কাজ করার সাথে একমত আছি .. একটি ডিভিসিএসে প্রতিশ্রুতি দেওয়ার অনেকগুলি বিষয় হল আপনার অগ্রগতি প্রতিশ্রুতিবদ্ধ , সুতরাং জিনিসগুলি বেশিরভাগ সময়ই ভাঙ্গা বা অসম্পূর্ণ হতে বাধ্য ।
বিস্ফোরণ বড়ি

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

1
গিট বান্ডেলযুক্ত কমিটকে সমর্থন করে।
বদ্বীপ

3

আমি গিতের সাথে সর্বাধিক পরিচিত, তাই আমি সেই দৃষ্টিকোণের জন্য উত্তর দিচ্ছি।

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

এখন, গিট এমন কিছু সরঞ্জাম সরবরাহ করে যা এটিকে সহজ করতে পারে, আপনি যে ধরণের প্রতিশ্রুতি মঞ্জুরি দেওয়ার পরামর্শ দেন were উদাহরণস্বরূপ, ধাক্কা দেওয়ার আগে আপনি একত্রীকরণের সমস্ত সমষ্টি স্কোয়াশ করতে পারেন। এটি সাধারণ মার্জ কমিটের সমান হতে পারে s

আপনার সুবিধার তালিকা সম্পর্কে নির্দিষ্ট উদ্বেগ:

  1. আসল মার্জ পরিবর্তনগুলি ইতিহাসে। আপনার অতিরিক্ত তথ্য কেন দরকার? সীমাবদ্ধ অঞ্চলে বিরোধগুলি সীমাবদ্ধ করার বিষয়ে ডিভিসিএসগুলি খুব ভাল। একবার আপনি কোন পরিবর্তনটি রাখতে হবে তা বেছে নেওয়ার পরে, পূর্ববর্তী অনুলিপিটির সাথে মার্জ কমিট নোডের অনুলিপি তুলনা করলে আপনাকে ঠিক এটি দেবে।
  2. যদি মার্জটি খুব বড় হয় তবে আপনি পর্যায়ক্রমে কমিট করতে পারেন। এটি একটি বৈধ উদ্বেগ, তবে আপনার এখানে কখনও প্রথম স্থান পাওয়া উচিত নয়। শাখাগুলি ধারাবাহিকভাবে প্রবাহের পরিবর্তনগুলিতে টানতে হবে যাতে এটি কখনও ঘটে না। rebaseএকবারে একবারে কমিট করার মতো চেরি বাছাইয়ের সরঞ্জামগুলিও আপনাকে কিছু পরিস্থিতিতে এখানে সহায়তা করতে পারে।
  3. আপনি যদি কোনও ভুল করে থাকেন তবে ফিরে রোল করা আরও সহজ হবে (পুরো সংশ্লেষটি আবার না করে)। উপরে দেখুন - আপনার দ্বন্দ্বগুলি এই নিয়ন্ত্রণহীন হওয়া উচিত নয়।

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


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

"আপনার সংগ্রহস্থলটিকে সামঞ্জস্যপূর্ণ অবস্থায় রাখতে হবে"। আমি সত্য মনে করি না। স্থানীয় সংগ্রহস্থল একটি কাজের জায়গা, মাজার নয়। যদি এটি মার্জ করার মাঝামাঝি সময়ে প্রতিশ্রুতিবদ্ধ করতে সহায়তা করে, তবে এটি IMHO করুন। আপনি যদি আরও ভাল জানেন না বলে আপনি যদি এটি করেন তবে আমি আপনাকে এটি না করার পরামর্শ দেব। আপনি যদি একজন অভিজ্ঞ প্রোগ্রামার হন তবে আপনার পক্ষে সর্বোত্তম কাজ করা উচিত। আপনার স্থানীয় সংগ্রহস্থল আদি রাখার বিষয়ে কৌতূহল বোধ করবেন না।
ব্রায়ান ওকলে

1

আমার মূল অভিজ্ঞতাটি মার্চুরিয়ালের সাথে রয়েছে, যদিও আমি গিটটিও বিক্ষিপ্তভাবে ব্যবহার করি।

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

মার্চুরিয়ালে আপনাকে যা করতে হবে তা হ'ল একবার আপনার কাছে ফাইলগুলি যেভাবে প্রতিশ্রুতিবদ্ধ তা করতে চান:

hg resolve --mark --all
hg commit -m "I'm such a rebel"

--মার্কটি ... মার্জ সরঞ্জামের সাহায্যে আপনাকে অনুরোধ না করেই ফাইলগুলিকে সমাধান হিসাবে চিহ্নিত করবে। - সমস্ত বিরোধের সাথে সমস্ত ফাইল চিহ্ন নির্বাচন করার যত্ন নেবে।

আপনি যদি টান না দিয়ে ধাক্কা দিতে চান (এবং ফলস্বরূপ অন্যের পরিবর্তনগুলি একীভূত করতে হবে ) জেডির মতো করুন :

hg push --force

পরবর্তী লোকটি যারা টানবে তারা +1 মাথা পাবে (কোনও শঙ্কা দেওয়ার উদ্দেশ্যে নয়)

আমি নিশ্চিত যে গিটের সাথে একই জিনিস করার একটি উপায় আছে (যদিও এটি সম্ভবত আরও সংশ্লেষিত)।


1

আমি যখন গিটে একীভূত হই তখন আমি তত্ক্ষণাত সমস্ত পরিবর্তন (মার্জ সংঘাত সহ) প্রতিশ্রুতিবদ্ধ। তারপরে, আমার পরবর্তী প্রতিশ্রুতিগুলিতে আমি কোনও পাঠ্য সম্পাদকের মাধ্যমে মার্জ সংঘাতগুলি সমাধান করি। দ্বন্দ্ব নিরসনের পরে আমি চাইলে পুশ করি।

সত্যিই আমি বুঝতে পারি না অন্যরা কেন এটি করে না বা গিট এটি প্রয়োগ করে না।

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

প্রতিশ্রুতিবদ্ধ হওয়ার আগে সংঘাতের সমাধানের স্ট্যান্ডার্ড কর্মপ্রবাহের একটি বিশাল অপূর্ণতা হ'ল আপনার স্থানীয় অনুলিপি থেকে পরিবর্তনগুলি ছিটকে যেতে পারে massive কী বা ইত্যাদি

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


0

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

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

আমার দৃষ্টিকোণ থেকে অনুমান, অর্ধ গাধা জিনিস স্থানীয়ভাবে রাখুন, ভাল জিনিসটি তারের উপরে প্রেরণ করুন।


0

আপনার সরঞ্জামগুলির দাস হয়ে উঠবেন না।

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

তবে আপনার ভাঙা কোডটি উপরের দিকে ধাক্কা দেওয়া উচিত নয় ।


0

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

আমি দেখতে পাচ্ছি যে কোনও বৃহত / জটিল সংশ্লেষের ক্ষেত্রে আপনি আপনার কাজটি অগ্রগতিতে বাঁচাতে এবং একটি রেফারেন্স পয়েন্ট স্থাপন করতে চাইতে পারেন তবে আপনি এখনও সিস্টেমটিকে একটি বিশৃঙ্খল অবস্থায় রেখে যাবেন যা সমাধান করা দরকার।

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

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

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