কেন এতগুলি প্রকল্প "গিট একীভূত" এর চেয়ে "গিট রিবেস" পছন্দ করে?


67

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

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

শোধন এর পয়েন্ট: একটি DVCS জন্য ডিফল্ট আচরণ হল একত্রীকরণ করে তৈরি করুন। কেন এত জায়গাগুলি এই মার্জ কমিটগুলি আড়াল করে এমন লিনিয়ার বিকাশের ইতিহাস দেখার আকাঙ্ক্ষার কথা বলে?


18
সরঞ্জামগুলি সর্বদা এটি সঠিক হয় না। ওরা যখন এটিকে ভুল করে, ওহে ছেলে, তারা কি এটিকে ভুল করে?
ওডে

2
@ ওডিড আপনি কি স্বয়ংক্রিয় একীভূত কমিটগুলি (যেমন তৈরি করেছেন git pull) হিসাবে উল্লেখ করছেন ? আমি দেখতে পাচ্ছি কেন এটি সমস্যাযুক্ত হতে পারে তবে আমার প্রশ্নটি সমস্ত মার্জ কমিট সম্পর্কে ।
জেস ব্রাউনিং

এর ঘন জটিল জটিল সংশ্লেষ কি সমস্যার একটি চিহ্ন? "মার্জ ও rebases সঠিক একই দ্বন্দ্ব, তাদের জন্য সৃষ্টি করা উচিত নয় সহজাত দ্বন্দ্ব যে একটি মানবিক সমাধান নয় (অর্থাত দুই কোডের একই লাইনে পরিবর্তন ডেভেলপারদের) ..."
মশা

আমার উত্তর পোস্ট করার পরে আমার একটি ধারণা ছিল যে আইএমও উত্তর হিসাবে ঠিক ফিট করে না: git pull --rebase == svn up(আলগা-সমান, কঠোর সমতুল্য নয়)
ইজকাটা

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

উত্তর:


64

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


5
আপনিই একমাত্র আমার প্রশ্নটি সঠিকভাবে বুঝতে পেরেছেন। আমি কীভাবে এটি আরও স্পষ্ট করতে পারি?
জেস ব্রাউনিং

12
হতে পারে "লিনিয়ার বিকাশের ইতিহাসের সুবিধা কী?"
কার্ল বিলেফেল্ট

11
"প্রায়শই, আপনি আপনার প্রকল্পগুলি প্রত্যন্ত শাখায় পরিষ্কারভাবে প্রয়োগ হয়েছে তা নিশ্চিত করার জন্য আপনি এটি করবেন - সম্ভবত এমন কোনও প্রকল্পে যা আপনি অবদান রাখার চেষ্টা করছেন কিন্তু আপনি রক্ষণ করছেন না don't এক্ষেত্রে আপনি নিজের কাজটি করবেন কোনও শাখায় এবং তারপরে মূল কাজটিতে আপনার প্যাচগুলি জমা দেওয়ার জন্য প্রস্তুত থাকাকালীন আপনার কাজটি উত্স / মাস্টারের উপর পুনরায় চালু করুন That এইভাবে, রক্ষণাবেক্ষণকারীকে কোনও সংহতকরণের কাজ করতে হবে না - কেবল একটি দ্রুত-অগ্রসর বা একটি পরিষ্কার প্রয়োগ। " git-scm.com/book/en/Git-Branching- রিবেসিং
অ্যান্ডিজ স্মিথ

12
আপনি এটি কেবল কসমেটিকের মতোই শব্দ করেন তবে এটি বাস্তবে বাস্তব: লাইন ক্রসিং এবং মার্জিংয়ের সাথে জটিল ডিএজি থেকে রৈখিক ইতিহাসে কী চলছে তা বোঝা অনেক সহজ।
ড্যানিয়েল হার্শকোভিচ

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

46

দুটি কথায়: git bisect

একটি লিনিয়ার ইতিহাস আপনাকে বাগের আসল উত্স চিহ্নিত করতে দেয়।


একটি উদাহরণ. এটি আমাদের প্রাথমিক কোড:

def bar(arg=None):
    pass

def foo():
    bar()

শাখা 1 এমন কিছু রিফ্যাক্টরিং করে argযা এখন আর বৈধ নয়:

def bar():
    pass

def foo():
    bar()

শাখা 2 এর একটি নতুন বৈশিষ্ট্য রয়েছে যা ব্যবহার করা দরকার arg:

def bar(arg=None):
    pass

def foo():
    bar(arg=1)

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

ওহ বিষ্ঠা. এটি এটি দেখে:

(master: green)
|             \_________________________
|                \                      \
(master: green)  (branch 1: green)     (branch 2: green)
|                 |                     |
|                 |                     |
(master/merge commit: green)            |
|                         ______________/
|                        /
(master/merge commit: red)
|
...days pass...
|
(master: red)

সুতরাং আমরা যখন git bisectবিল্ডটি ভেঙে ফেলেছে এমন প্রতিশ্রুতি সন্ধান করতে প্রেরণ করব , তখন এটি একীভূত অঙ্গীকারকে নির্দেশ করবে pin ঠিক আছে, এটি সামান্য সাহায্য করে, তবে এটি মূলত কমিটের প্যাকেজটির দিকে নির্দেশ করছে, একটিও নয়। সমস্ত পূর্বপুরুষ সবুজ। অন্যদিকে, প্রত্যাবর্তনের সাথে সাথে আপনি একটি রৈখিক ইতিহাস পান:

(master: green)
|
(master: green)
|
(all branch 1 commits: green)
|
(some branch 2 commits: green)
|
(branch 2 commit: red)
|
(remaining branch 2 commits: red)
|
...days pass...
|
(master: still red)

এখন, git bisectসঠিক বৈশিষ্ট্য প্রতিশ্রুতিতে নির্দেশ করতে চলেছে যা বিল্ডটি ভেঙে দিয়েছে। আদর্শভাবে, প্রতিশ্রুতিবদ্ধ বার্তাটি ব্যাখ্যা করবে যে অন্য রিফ্যাক্টর করার এবং বাগটি এখনই ঠিক করার জন্য যথেষ্ট উদ্দেশ্য কী ছিল।

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


এটি বলেছিল, আমি (বর্তমানে) একত্রিত হওয়া পছন্দ করি। একটি রিলিজ ব্রাঞ্চে রিবেসিং আপনাকে ব্যবহারের জন্য আপনার রৈখিক ইতিহাস দেবে git bisect, যখন প্রতিদিন কাজের জন্য সত্য ইতিহাস বজায় রাখবে।


2
এই ব্যাখ্যার জন্য ধন্যবাদ। আপনি এখনও কেন সংযোজনকে পছন্দ করেন তার উপর আপনি কী প্রসারিত করতে পারেন? আমি জানি যে প্রচুর লোকেরা বেশিরভাগ পরিস্থিতিতে রিবাজে মেশানো পছন্দ করে তবে আমি কেন তা বুঝতে পারি নি।
ফিলিপ

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

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

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

4
@ ইজকাটা আপনি বাইসেক্ট ব্যবহার করছেন কেন? কারণ বাগ / ভুল ঘটে। এটি একটি নম্র বাস্তবতা। সম্ভবত "মাউসটিকে বাম দিকে টেনে আনতে" আগে স্বয়ংক্রিয় / ম্যানুয়াল পরীক্ষার তালিকার একটি অংশ ছিল না এবং এখন আমরা লক্ষ্য করেছি যে সেই বৈশিষ্ট্যটি নষ্ট হয়েছে তবে আমরা জানি এটি কাজ করে used
ল্যান

16

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

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

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

ঠিক আছে, একীভূত হওয়ার সময় এসেছে, কিন্তু ... বাজে, এখন কী হবে? আমরা খুব ভালভাবে দুটি সফটওয়্যারের সেট থেকে একটিতে যেতে পারলাম, একীভূত হয়েছি, নবীন বগি সফ্টওয়্যারটির ভয়াবহভাবে ভাঙা টুকরো যেখানে আপনার অ্যাকাউন্ট ম্যানেজমেন্ট কাজ করে না এবং নতুন অ্যাকাউন্টগুলি ভেঙে গেছে এবং আমি এমনকি জানি না যে পুরানো বাগটি এখনও আছে কিনা? ।

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

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

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

সুতরাং আপনি সেখানে যান। হ্যাঁ, আধুনিক সিস্টেমগুলি এই ব্যথাটি কমিয়ে আনার জন্য ডিজাইন করা হয়েছে এবং এটি সহজে ব্যাক আউট এবং রিবেস এবং ডিবেস এবং ফ্রিবেস এবং হ্যাংলাইড এবং সমস্ত কিছু করতে সক্ষম হবে বলে মনে করা হচ্ছে।

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

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


5
আশ্চর্য কথায় কথায় কথায় স্যার!
সাউথপা হরে

10
এই উত্তরগুলি কেন মানুষ সংশ্লেষ করতে ভয় পায়, কেন মার্জ কমিটকে এত লোক খারাপ বলে বিবেচনা করে না।
জয়

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

1
আমি এই উত্তরটিকে অগ্রাহ্য করেছি কারণ এটি এখনও স্পষ্টতই এটি বিন্দুর বাইরে, ইমো।
ইউজিন

5
এটি রিবেস বনাম মার্জ-মার্জ মোটেও আঘাত হানে বলে মনে হচ্ছে না।
অ্যান্ডিজ স্মিথ

5

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

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

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


1
সুতরাং এটি কেবলমাত্র একটি মাত্রায় নতুন পরিবর্তনকে হ্রাস করা যা তারা 'ভুল জিনিস' হিসাবে বিবেচিত হয় কারণ তারা একমাত্র পরিবর্তন । যদি পুরানো সমস্ত পরিবর্তনগুলি মার্জটিতে অন্তর্ভুক্ত করা হয় তবে সমস্ত পরিবর্তনগুলি এখন তারা 'সঠিক জিনিস' কিনা তা নিয়ে স্তরের ভিত্তিতে রয়েছে।
অ্যান্ডিজ স্মিথ

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

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

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

4

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

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

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


4
এই উত্তরগুলি কেন মানুষ সংশ্লেষ করতে ভয় পায়, কেন মার্জ কমিটকে এত লোক খারাপ বলে বিবেচনা করে না।
জয়

সুতরাং, এই ট্রাঙ্কটি আপনি উল্লেখ করেছেন, এতে কি পুনর্বাসনে জড়িত? দয়া করে ব্যাখ্যা করুন।
অ্যান্ডিজ স্মিথ

@ অ্যান্ডিজস্মিথ "ট্রাঙ্ক" গিটের "মাস্টার" শাখার সমতুল্য এসএনএন এর শব্দ
ইজকাটা

@ ইজকাটা তাই এই উত্তরটি তখন মেশানো বা পুনরায় ব্যবহার করবেন না?
অ্যান্ডিজ স্মিথ

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

0

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


1
এই উপর এই বিস্তারিত?
আকাওয়াল

অবশ্যই :-) গিট প্রবাহে, আমরা নিয়মিতভাবে নতুন রিলিজ শাখা তৈরি করি। যদি তৈরির পরে, একটি বাগ বাগানের শাখায় স্থির হয়ে থাকে, আমরা git cherry-pick -x <commit>এটি রিলিজ শাখায় প্রয়োগ করতে ব্যবহার করি। অথবা, আমরা মুক্তির জন্য কিছু পূর্বাবস্থায় ফিরিয়ে নিয়ে যেতে চান পারে git revert <commit>। যদি <commit>একত্রীকরণ হয় তবে লোমশ হয়। এটা তোলে হয় আমি জানি, কিন্তু কাজ করা সহজ নয় যতটা সম্ভব। রিবেস ব্যবহার করার সময়, প্রতিটি 'মার্জ' হ'ল এক বিশাল কিন্তু নিয়মিত কমিট, সহজেই চের-বাছাইযোগ্য এবং ফিরিয়ে নেওয়া যায়।
ব্রুনো শ্যাপার

0

উত্তরের কোনওটিতে তিনটি কথা বলা হয়নি:

  • একটি শাখার মধ্যে পৃথক:

    • শাখায় স্বেচ্ছাসেবীর জোড়ের মধ্যে পার্থক্য করা খুব কঠিন হয়ে যায় যখন সেখানে মার্জ কমিট থাকে।
  • একবারে একটি আইটেম মার্জ করা:

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

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