কর্মপ্রবাহ হিসাবে গিট স্ট্যাশ ব্যবহার করা কি একটি অ্যান্টিপ্যাটার্ন?


25

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

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

  • একটি প্রধান শাখায় কাজ করুন (যেমন master)
  • যেতে যেতে কমিট করুন Make
  • আপনার যদি পরিবর্তনগুলি পেতে বা শাখাগুলি স্যুইচ করার দরকার হয় তবে আপনার আপমুক্ত পরিবর্তনগুলি স্ট্যাশের উপরে চাপুন
  • আপনার আপডেটটি শেষ হয়ে গেলে, পরিবর্তনগুলি স্ট্যাশ থেকে সরিয়ে নিন।

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

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

গিট স্ট্যাশ ব্যবহার করা কি নিয়মিতভাবে অ্যান্টি-প্যাটার্ন হিসাবে বিবেচিত হবে? যদি তা হয় তবে কিছু নির্দিষ্ট সমস্যাগুলি কী হতে পারে? তা না হলে কী কী সুবিধা হবে?


2
আপনার সহকর্মীদের জিজ্ঞাসা করার চেষ্টা করতে পারেন কর্মক্ষেত্রের সাথে তাদের কোনও সমস্যা আছে কিনা। যদি সেগুলি না থাকে তবে আমি এটিকে ক্ষতিকারক মনে করব না।
অ্যালেক্সফক্সগিল 15

@ আলেক্সজি এটি একটি বৈধ পয়েন্ট। আমি এখানে "জিজ্ঞাসা করছি" লোকেরা খুঁজে পেয়েছে কি "গোটচস" আছে কিনা।
joshin4colours

3
যদি আমি এটি সঠিকভাবে বুঝতে পারি ... If you need to get changes or switch branches, push your uncommitted changes onto the stash- স্ট্যাশটির জন্য ঠিক কী।

3
@ মিশেলটি আমার স্থানীয় শাখা সবকিছুর অনুমতি দেয়। শর্তহীনভাবে।
মার্টিনাস

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

উত্তর:


31

থেকে গীত এস সি এম বুক :

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

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

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

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

এটি সত্যিই এই পর্যন্ত ফোটে:

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

"ব্রোকন" কোড করার বিষয়ে

নীচের মতামত থাকাকালীন, আমি এই মতামতটি অভিজ্ঞতা থেকে এসেছি।

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

  1. নতুন শাখা তৈরি করুন
  2. হ্যাক হ্যাক হ্যাক
  3. ভাঙা কোড কমিট করুন
  4. কোডটি পোলিশ করুন এবং এটি কার্যকর করুন
  5. কাজের কোড কমিট করুন
  6. রিবেস এবং স্কোয়াশ
  7. পরীক্ষা
  8. পরীক্ষা পাস করার সময় ধাক্কা

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

@ রিবাল্ড এডি নীচে একটি মন্তব্যে বলেছেন:

প্রথমত, স্ট্যাশ "ব্রাঞ্চিং ওয়ার্কফ্লো" এর বাইরে নয় কারণ হুডের নীচে স্ট্যাশ কেবল অন্য একটি শাখা।

(অনেকের ক্রোধের ঝুঁকিতে)

লিনাস বলেছেন:

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

আমি কি মনে করি @ রিবল্ড এডি বলার চেষ্টা করছেন তা হ'ল git stashআপনি কোনও বৈশিষ্ট্যযুক্ত শাখার ওয়ার্কফ্লোতে ব্যবহার করতে পারেন - এবং এটি সত্য। এটির ব্যবহারটি git stashসমস্যা নয়। এটি মাস্টার প্রতিশ্রুতিবদ্ধ এবং ব্যবহারের সমন্বয় git stashএটি একটি বিরোধী নিদর্শন is

ব্যাখ্যা git rebase

@ রিবল্ড এডির মন্তব্য থেকে:

রিব্যাসিং অনেক বেশি অনুলিপি-পেস্ট করা এবং আরও খারাপ প্রতিশ্রুতিবদ্ধ ইতিহাস পরিবর্তন করে।

(জোর আমার)

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

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

ক্লিন কমিটের ইতিহাসে আরও একটি আকর্ষণীয় লিনাক্স কার্নেল থ্রেড রয়েছে ।

আবার, লিনাস থেকে:

আমি পরিষ্কার ইতিহাস চাই, তবে এর সত্যিকারের অর্থ (ক) পরিষ্কার এবং (খ) ইতিহাস।

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

সুতরাং ইতিহাস অংশ মোটামুটি সহজ। এখানে কেবল একটি প্রধান নিয়ম এবং একটি ছোটখাটো স্পষ্টতা:

  • আপনার কখনই অন্য ব্যক্তির ইতিহাস ধ্বংস করতে হবে না। আপনি অবশ্যই অন্য লোকদের করা কমিটকে রিবেস করবেন না। মূলত, যদি এটিতে আপনার সাইন-অফ না থাকে তবে এটি সীমাবদ্ধতার বাইরে: আপনি এটিকে পুনরায় শোধ করতে পারবেন না, কারণ এটি আপনার নয়।

    লক্ষ্য করুন যে এটি সত্যই অন্যান্য ব্যক্তির ইতিহাস সম্পর্কিত , অন্য লোকের কোড সম্পর্কে নয় । যদি তারা আপনাকে ইমেলযুক্ত প্যাচ হিসাবে স্টাফ প্রেরণ করে এবং আপনি এটি "গিট এমএস-এস" দিয়ে প্রয়োগ করেন তবে এটি তাদের কোড, তবে এটি আপনার ইতিহাস।

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

  • এই নিয়মের সামান্য স্পষ্টতা: একবার আপনি কোনও ইতিহাসে আপনার ইতিহাস প্রকাশ করলে অন্যান্য লোকেরা এটি ব্যবহার করতে পারে এবং তাই এখন এটি স্পষ্টভাবে আপনার ব্যক্তিগত ইতিহাস নয় ।

    সুতরাং ছোটখাটো স্পষ্টতই এটি হ'ল এটি কেবল "আপনার প্রতিশ্রুতিবদ্ধ" নয়, এটি আপনার গাছের কাছে ব্যক্তিগতও রয়েছে, এবং আপনি এটিকে বাইরে বের করেননি এবং এখনও এটি ঘোষণা করেননি।

...

প্রথম নিয়মগুলি বেশ সুস্পষ্ট এবং সহজ যদিও এখন "পরিষ্কার" অংশটি কিছুটা সূক্ষ্ম:

  • আপনার নিজের ইতিহাসকে পঠনযোগ্য রাখুন

    কিছু লোক প্রথমে তাদের মাথায় কাজ করে, এবং ভুল না করেই এটি করে। তবে এটি খুব বিরল, এবং আমাদের বাকিদের জন্য, আমরা আমাদের সমস্যাগুলি নিয়ে কাজ করার সময় "গিট রিবেস" ইত্যাদি ব্যবহার করি।

    সুতরাং "গিট রিবেস" ভুল নয়। তবে এটি ঠিক তখনই যদি এটি আপনার খুব নিজস্ব ব্যক্তিগত গিট ট্রি হয়।

  • আপনার বাজে কথা প্রকাশ করবেন না।

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

(জোর আমার)

উপসংহার

শেষ পর্যন্ত, ওপিতে কিছু বিকাশকারী এটি করছেন:

git checkout master
(edit files)
git commit -am "..."
(edit files)
git stash
git pull
git stash (pop|apply)

এখানে দুটি সমস্যা রয়েছে:

  1. বিকাশকারীরা মাস্টার প্রতিশ্রুতিবদ্ধ হয়। অবিলম্বে এটি লক করুন। সত্যিই, এটি সবচেয়ে বড় সমস্যা।
  2. বিকাশকারীরা ক্রমাগত git stashএবং git pullমাস্টার ব্যবহার করে যখন তাদের বৈশিষ্ট্য শাখা ব্যবহার করা উচিত।

গিটে আরও ভাল ওয়ার্কফ্লো থাকাকালীন git stash- বিশেষত টান দেওয়ার আগে - ব্যবহার করার ক্ষেত্রে কোনও ভুল নেই butgit stash

তাদের git stashএকটি লাল হেরিং ব্যবহার । এটি সমস্যা নয়। মাস্টার প্রতিশ্রুতিবদ্ধ সমস্যা।


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

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

1
@ রিবল্ড এডি: আমি আমার উত্তর পরিষ্কার করে দিয়েছি। এটি কিছু পরিষ্কার করা প্রয়োজন।
গ্রেগ বার্গার্ড্ট

আমি আমার নিজের উত্তরে আরও কিছু প্রসঙ্গ সরবরাহ করব।
রিবল্ড এডি

নীচে আমার উত্তর দেখুন - মাস্টার প্রতিশ্রুতিবদ্ধ যখন একটি বিরোধী প্যাটার্ন, এটি আসল সমস্যা নয়।
রিবল্ড এডি

7

আমি ব্যক্তিগতভাবে কেবল stashসংক্ষিপ্ত, অপ্রত্যাশিত বাধাগুলির জন্য ব্যবহার করি , যেমন কেউ এমন একটি প্রশ্ন জিজ্ঞাসা করে যার জন্য আলাদা শাখায় পরিবর্তন প্রয়োজন requires আমি এটি করছি কারণ আমি আগে স্ট্যাশগুলি সম্পর্কে ভুলে গিয়েছি, তবে সেগুলি পরিষ্কারভাবে প্রয়োগ করা হবে না। বৈশিষ্ট্য শাখাগুলিতে নিয়মিত কমিটগুলি ভুলে যাওয়া আরও সহজ এবং একীভূত করা সহজ, তাই এখন আমি কেবল একটি ভাঙা প্রতিশ্রুতি দেওয়ার ঝোঁক রাখি, পরে git reset HEAD~1যদি আমি এটি না রাখতে চাই তবে একটি বা রিবেস করুন।

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


1

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

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

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

রিবেস কমান্ড, তবে, যখন পুনরায় খেলানো কমিটগুলির মধ্যে একটিতে মার্জ সংঘাত হয় তখন শাখার ইতিহাস ক্ষতি করতে পারে। Http://ryantablada.com/post/the-dangers-of-rebasing-a-branch থেকে

বাকি রিবেসটি মসৃণভাবে চলে যায়, পরীক্ষাগুলি সমস্ত উত্তীর্ণ বলে মনে হয়। একটি পিআর তৈরি করা হয়।

এবং তারপরে আরও কিছু কোড লেখা আছে যা মন্তব্যের জন্য নির্ভর করে For সমস্তপস্ট সম্পত্তি এবং সমস্ত কিছু ভেঙে গেছে। তবে আমরা কার কাছে গিয়ে সাহায্য চাইতে চাই? গিট দোষটি দেখায় যে কোডের লাইনটি কেবল সার্ভার সাইড ইঞ্জিনিয়ার লিখেছেন এবং তিনি হাত বাড়িয়ে দেন।

এখন আপনার ফ্রন্ট-এন্ড ইঞ্জিনিয়ার ছুটিতে, অসুস্থ ছুটিতে বা কে জানে। এই কোডটি দেখতে কেমন হওয়া উচিত তা কেউ বুঝতে পারে না!

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

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

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

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

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


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

সুতরাং আপনি বলছেন যে মার্জগুলি ইতিহাসকে ধ্বংস করতে পারে ?! মনে হচ্ছে এটি অত্যধিক শাখা থাকা এড়াতে কেবল আরও ন্যায়সঙ্গত!
রিবল্ড এডি

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

এখন আপনি যা বলছেন তা আগে যা বলেছেন তার সাথে দ্বন্দ্ব রয়েছে। আপনি যে নিবন্ধটি উদ্ধৃত করেছেন তা কি পড়েছেন? আপনি কি সেই প্রসঙ্গে বুঝতে পারেন যে কোনও রিবেসে ইতিহাস হারাবে?
রিবল্ডেডি

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

1

git stashএকটি সরঞ্জাম। এটি নিজেই কোনও প্যাটার্ন নয়, বা কোনও অ্যান্টি-প্যাটার্নও নয়। এটি একটি সরঞ্জাম, অনেকটা হাতুড়ি যেমন একটি সরঞ্জাম। নখ চালাতে হাতুড়ি ব্যবহার করা একটি নিদর্শন এবং স্ক্রু চালানোর জন্য হাতুড়ি ব্যবহার করা একটি বিরোধী নিদর্শন। তেমনিভাবে, সেখানে ওয়ার্কফ্লো এবং পরিবেশ রয়েছে যেখানে git stashব্যবহারের সঠিক সরঞ্জাম এবং ওয়ার্কফ্লো এবং পরিবেশ যেখানে এটি ভুল।

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

গিট তবে একটি কেন্দ্রীয় সার্ভারের সাথে সম্পর্ক ছড়িয়ে দেবে। সমস্ত বিকাশকারীকে করানো commit, pull(বা rebaseআপনি যদি এর মধ্যে থাকেন তবে), pushসমস্ত সময় একটি বিড়বিড় করতে পারে।

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

এই জন্য, git stashব্যবহার করার উপযুক্ত সরঞ্জাম হবে।

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

এবং হ্যাঁ, আপনি কল করেছিলেন যে এটি একটি দুর্দান্ত কর্মপ্রবাহ নয় এবং এটিতে সমস্যা রয়েছে। তবে সমস্যাটি টুলটির সাথে নয় git stash। সমস্যাটি ভূমিকা বা বেমানান নীতিগুলির জন্য স্বতন্ত্র শাখার অভাব ।

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

git stashএকটি বিরোধী নিদর্শন নয়। git stashসবাই মাস্টারের কাছে প্রতিশ্রুতি দেওয়ার সময় শাখাগুলির বিকল্প হিসাবে ব্যবহার করা একটি বিরোধী নিদর্শন - তবে তা নয় git stash

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

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