গিট ব্রাঞ্চিং মডেলগুলি আপনার জন্য কী কাজ করে?


378

আমাদের সংস্থা বর্তমানে একটি সাধারণ ট্রাঙ্ক / রিলিজ / হটফিক্সেস ব্রাঞ্চিং মডেল ব্যবহার করছে এবং ব্রাঞ্চিং মডেলগুলি আপনার সংস্থা বা উন্নয়ন প্রক্রিয়ার জন্য সবচেয়ে ভাল কাজ করে সে সম্পর্কে পরামর্শ চাই।

  1. ওয়ার্কফ্লোস / ব্রাঞ্চিং মডেল

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

  2. বনাম রিবাজিং মার্জ করা (ক্রমবর্ধমান বনাম অনুক্রমিক ইতিহাস)

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

  3. আমি একটি প্রাকৃতিক কর্মপ্রবাহ খুঁজছি

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

  4. মার্জ কোন্দল তৈরি করা (চেরি-পিকের কারণে) কীভাবে এড়ানো যায়?

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

  5. সাময়িক শাখাগুলিতে কীভাবে পচে যায়?

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

  6. কোড পর্যালোচনা এবং স্নাতক হওয়ার মতো যথাযথ পদ্ধতি অবশ্যই সুন্দর হবে।

    তবে আমরা কেবল এগুলি পরিচালনা করার জন্য জিনিসগুলিকে পর্যাপ্ত পরিমাণে আটকে রাখতে পারি না - কোনও পরামর্শ? ইন্টিগ্রেশন শাখা, চিত্র?

নীচে সম্পর্কিত প্রশ্নের একটি তালিকা রয়েছে:

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


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

প্লাস্টিক এসসিএম ব্লগ তাদের মতামত আলোচনায় ফেলেছিল, এটি অন্তত অন্তর্দৃষ্টিযুক্ত: codicesoftware.blogspot.com/2010/08/…
হাইকিউ সিজে

1
যখন ব্যবহার "একত্রীকরণ --no-FF", কিছু আদেশ সহকারে এই পরীক্ষা সতর্ক হতে হবে sandofsky.com/blog/git-workflow.html
Doppelganger

1
@ ডপপেলাগঞ্জার আপনার পোস্টে লিঙ্কে বর্ণিত সমস্যাটিতে কীভাবে বিশেষত --no-ff অবদান রাখছে তা সম্পর্কে আমি আগ্রহী হব আমার কাছে বর্ণিত সমস্যাটি চেকপয়েন্টে দ্বিখণ্ডিত হওয়ার ব্যর্থতা এবং সেই ক্ষেত্রে সহায়তা করার জন্য গিট দোষের ব্যর্থতা - তবে আমি "--no-ff" কীভাবে কোনও কিছু পরিবর্তন করে তা দেখতে ব্যর্থ হয়েছি, এটি ব্যবহার না করার বিপরীতে। লেখক অভিযোগ করেছেন যে --no-ff এর সাথে একীভূত হওয়া কোনও ফাইলকে সংশোধন করে না - তবুও এটি ছাড়া ফাইলটিও সংশোধিত হবে না, আপনি কেবল নিজের ইতিহাসে পুরানো প্রতিশ্রুতি দেখতে পাবেন, তাই না?
17:58

অন্যান্য ব্রাঞ্চিং মডেল: ক্যাকটাস মডেল ব্যারো . github.io/2016/02/… , মাইনলাইন মডেল বিটসনবাইটস.ইইউ / এস্টেবল- মেইনলাইন- ব্র্যাঙ্কিং- মডেল- ফর-জিইট । এই উভয় ব্রাঞ্চিং মডেল গিটফ্লোয়ের চেয়ে অন্য পদ্ধতির প্রস্তাব দেয়।
ম্যাথিউ মোমাল

উত্তর:


90

ডিভিসিএস-এ উপলব্ধ নতুন বিকাশকারীদের সবচেয়ে উদ্বেগজনক বৈশিষ্ট্য হ'ল প্রকাশনা প্রক্রিয়া সম্পর্কে :

  • আপনার যা প্রয়োজন রিমোট রেপো আমদানি করতে (আনতে / টানতে) করতে পারেন
  • আপনি যে কোনও (খালি) রেপো প্রকাশ করতে (পুশ) করতে পারেন

এর থেকে, আপনি আপনার প্রশ্নগুলি আরও সহজ করার জন্য কয়েকটি বিধি সম্মান করতে পারেন:

এখন:

কর্মপ্রবাহ / শাখা মডেল :

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

কেবলমাত্র একজন "ইন্টিগ্রেটার" "কেন্দ্রীয়" রেপোতে সরকারী বৈশিষ্ট্য শাখা স্থাপন করা উচিত, যা বিকাশকারীরা তাদের কাজের অংশটি পুনঃব্যবসায় / মার্জ করার জন্য ফিচারটি আনতে পারে যা এই বৈশিষ্ট্যটির সাথে খাপ খায়।

বনাম রিবাজিং মার্জ করা (ক্রমবর্ধমান বনাম অনুক্রমিক ইতিহাস) :

আমার যে উত্তরটি আপনি উল্লেখ করেছেন তা পছন্দ করি (" বাড়ির বিকাশের জন্য গিট ব্যবহারের জন্য ওয়ার্কফ্লো বর্ণনা ")

আমি একটি প্রাকৃতিক কর্মপ্রবাহ খুঁজছি :

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

মার্জ কোন্দল তৈরি করা (চেরি-পিকের কারণে) কীভাবে এড়ানো যায়?

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

প্রত্যাবর্তনে একই প্রতিশ্রুতি প্রয়োগ করা হবে (এটি কীভাবে করবেন?)

git revert এটির যত্ন নেওয়া উচিত, তবে এটি আদর্শ নয়।

সাময়িক শাখাগুলিতে কীভাবে পচে যায়?

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

  • প্রয়োজনে বেশ কয়েকটি শাখা (স্পষ্ট চিহ্নিত বৈশিষ্ট্য অনুসারে)
  • একটি শাখার মধ্যে কমিটের একটি সুসংগত সেট ( গিট চেকিনগুলি ছাঁটা দেখুন )

কোড পর্যালোচনা এবং স্নাতক হওয়ার মতো সঠিক পদ্ধতি?

ইন্টিগ্রেশন শাখা (একটি উত্সর্গীকৃত সংহতকরণ) রেপো বিকাশকারীকে এতে সহায়তা করতে পারে:

  • তার উন্নয়নটি রিমোট ইন্টিগ্রেশন শাখার শীর্ষে রিবেস করুন (টান --rebase)
  • স্থানীয়ভাবে সমাধান করুন
  • বিকাশটিকে সেই রেপোতে ঠেকান
  • ইন্টিগ্রেটারের সাথে যাচাই করে নিন যার ফলে কোনও গোলমাল হচ্ছে না;)

@ ইউনসিলসিজে: আপনি দেখতে পাচ্ছেন, এটি আপনার "চূড়ান্ত প্রশ্নের" ঠিক চূড়ান্ত উত্তর নয় ;)
ভনসি

আমি বুঝতে পেরেছি, এবং আমার কাছে বিদ্রূপেরও ভাল ধারণা রয়েছে, ঠিক আছে ;-)
হাইকিউ সিজে

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

2
@ ইউনসিলসিজে: "কঠোরভাবে ক্রমবর্ধমান ইতিহাস অর্জনের জন্য আপনার চেকিনগুলি ছাঁটাই করা এখনও আমার কাছে কঠিন": গিট ১..7 এর সাথে এটি আরও সহজ এবং এটি rebase --interactive --autosquashঅন্য প্রতিশ্রুতিবদ্ধ বার্তার একই প্রারম্ভের সাথে স্বয়ংক্রিয়ভাবে সমস্ত প্রতিশ্রুতি সরিয়ে নেবে। যদি সেই কমিটিগুলি একটি টিকিট নম্বর ব্যবহার করে (উদাহরণস্বরূপ), সেই সময়কার টিকিটের সাথে সম্পর্কিত এই সংশোধনগুলি যথাযথভাবে করা না হলেও, অটোসক্যাশগুলি সেই কমিটগুলিকে দ্রুত পুনরায় অর্ডার করার অনুমতি দেয়।
ভনসি

1
@UncleCJ: সর্বদা প্রয়োজন নেই, কিন্তু এটি এর ট্রেস পালন সাহায্য: "কঠোরভাবে অনুক্রমিক ইতিহাস (প্রয়োজনীয় বা না ?! হয়)" ক্রিয়ামূলক নির্ভরতা ( stackoverflow.com/questions/881092/... ) এবং শব্দার্থিক দ্বন্দ্ব ( stackoverflow.com/questions / 2514502 /… )
ভনসি

21

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

কার্নেল বিকাশের বিষয়ে আমার যদি আমার উপলব্ধি হয় (আমি এটিতে মনোযোগ দেব), কার্নেলটি বিকাশের জন্য প্রত্যেকের নিজস্ব গিট সংগ্রহস্থল রয়েছে। টরভাল্ডস দ্বারা দেখাশোনা করা লিনাক্স -২.6.২০১৮ এর একটি ভান্ডার রয়েছে, এটি রিলিজের সংগ্রহস্থল হিসাবে কাজ করে। লোকেরা "রিলিজ" শাখার বিরুদ্ধে কোনও বৈশিষ্ট্য বিকাশ করতে শুরু করতে চাইলে তারা এখান থেকে ক্লোন করে।

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

এখন এখানে এটি বিভ্রান্তিকর হয়। শাখার নামগুলি মোটেও সংগ্রহশালা জুড়ে সুসংগত হওয়া দরকার না। সুতরাং আমি ডাকতে পারি এবং আমার সংগ্রহস্থলটির একটি শাখার মালিকের git pull origin master:vanilla-codeকাছ থেকে একটি শাখা পেতে originপারি vanilla-code। আমি যা দিচ্ছি তা জোগান দিয়ে, এটি সত্যিই কিছু যায় আসে না - এটি এই অর্থে বিতরণ করা হয় যে সমস্ত সংগ্রহস্থলগুলি একে অপরের সমবয়সী এবং কেবল এসভিএন এর মতো বেশ কয়েকটি কম্পিউটারে ভাগ করা হয়নি।

সুতরাং, এই সমস্ত মাথায় রেখে:

  1. আমি মনে করি এটি প্রতিটি প্রোগ্রামারের উপর নির্ভর করে তারা কীভাবে তাদের শাখা প্রশাখাগুলি করে। আপনার যা দরকার তা রিলিজ ইত্যাদি ট্রাঙ্ক হতে পারে পরিচালনার জন্য একটি কেন্দ্রীয় ভান্ডার head। প্রকাশগুলি ট্যাগ বা শাখা হতে পারে এবং হটফিক্সগুলি সম্ভবত তাদের নিজেদের মধ্যে শাখা। আসলে, আমি সম্ভবত শাখা হিসাবে প্রকাশ করতাম যাতে আপনি তাদের প্যাচিং চালিয়ে যেতে পারেন।
  2. আমি একীভূত হবে এবং পুনরায় না। উদাহরণস্বরূপ, যদি আপনি কোনও ভাণ্ডার নেন, এটি ক্লোন করুন, শাখাটি তৈরি করুন এবং কিছু কিছু তৈরি করুন, originআপনার নিজের সংগ্রহশালায় সম্ভবত অন্য কোনও শাখা তৈরি করা উচিত এবং সর্বশেষে একত্রীকরণ masterকরা উচিত yourbranchযাতে অন্য কেউ আপনার পরিবর্তনগুলিকে সামান্য প্রচেষ্টা করে টানতে পারে সম্ভব. আমার অভিজ্ঞতায় সত্যিই রিবেস করার খুব কমই দরকার আছে।
  3. আমি মনে করি এটি গিটের কাজ করার পদ্ধতি এবং এটি কী করতে পারে তা বোঝার একটি বিষয়। এটি কিছুটা সময় নেয় এবং বেশ ভাল যোগাযোগ হয় - আমি অন্যান্য বিকাশকারীদের সাথে গিট ব্যবহার করা শুরু করার পরে কী ঘটছে তা আমি সত্যিই বুঝতে শুরু করেছিলাম এবং এখনও, কিছু জিনিস সম্পর্কে আমি নিশ্চিত নই।
  4. সংঘাত বিবাদগুলি দরকারী। আমি জানি, আমি জানি, আপনি এটি সব কাজ করতে চান তবে সত্যটি কোড পরিবর্তন এবং আপনার ফলাফলগুলিকে এমন কিছুতে মিশ্রিত করা দরকার যা কাজ করে। সংহত বিবাদগুলি আসলে আরও বেশি প্রোগ্রামিং। তাদের সম্পর্কে কী করা উচিত তার জন্য আমি কখনই একটি সহজ ব্যাখ্যা খুঁজে পাইনি, সুতরাং এটি এখানে: ফাইলে নোট করুন যেগুলি সংঘাতগুলি সংহত করেছে, গিয়ে তাদের কী হওয়া উচিত তা পরিবর্তন করে git add .এবং তারপরে git commit
  5. তবে এটি মামলা। যেমনটি আমি বলেছি, প্রতিটি ব্যবহারকারীর গিট রিপোজিটরিগুলি খেলতে তাদের নিজস্ব এবং শাখার নাম একই হওয়ার দরকার নেই । উদাহরণস্বরূপ, আপনার যদি একটি মঞ্চের সংগ্রহস্থল থাকে তবে আপনি নামকরণের স্কিমা প্রয়োগ করতে পারেন, তবে কেবলমাত্র প্রকাশনের রেপোতে আপনার প্রতিটি বিকাশকারীর প্রয়োজন নেই।
  6. এটি মার্জ পর্যায় stage আপনি কেবলমাত্র রিলিজ শাখাগুলিতে মিশ্রিত হন যখন আপনি কোডটিকে পর্যালোচনা / মান পরীক্ষার পাস বিবেচনা করবেন।

আমি আশা করি এটি সাহায্য করবে. আমি ভনকে বুঝতে পারি ঠিক যেমন একটি খুব অনুরূপ ব্যাখ্যা পোস্ট করেছে ... আমি যথেষ্ট দ্রুত টাইপ করতে পারি না!

বাণিজ্যিক সেটিংয়ে গিট কীভাবে ব্যবহার করবেন সে সম্পর্কে আরও কিছু চিন্তাভাবনা সম্পাদনা করুন , কারণ মন্তব্যগুলি থেকে এটি ওপির সাথে প্রাসঙ্গিক বলে মনে হচ্ছে:

  • রিলিজ রিপোজিটরি, আমরা এটি বলব product.git, বেশিরভাগ প্রবীণ প্রোগ্রামার / প্রযুক্তিগত লোকেরা আসলে পণ্যটি নিজেরাই দেখাশোনা করার জন্য দায়ী by ওএসএস-এ রক্ষণাবেক্ষণকারীদের ভূমিকার সাথে তারা সাদৃশ্যপূর্ণ।
  • এই প্রোগ্রামারগুলি সম্ভবত নতুন সংস্করণগুলির আংশিক নেতৃত্ব বিকাশে রয়েছে, সুতরাং তারা নিজের কোডও করতে পারে এবং ভেরো रिपোরিটরিগুলি বজায় রাখতে পারে। তারা সত্যিই নতুন বৈশিষ্ট্যগুলির জন্য স্টেজিং সংগ্রহস্থলগুলি পরিচালনা করতে পারে এবং তাদের নিজস্ব সংগ্রহশালাও থাকতে পারে।
  • তাদের নীচে পৃথক বিট বিকাশের জন্য প্রোগ্রামাররা দায়বদ্ধ। উদাহরণস্বরূপ, কেউ ইউআই কাজের জন্য দায়ী হতে পারে। তারা অতএব UI.git সংগ্রহস্থল পরিচালনা করে।
  • তাদের নীচে প্রকৃত প্রোগ্রামাররা যারা তাদের পুরো দিনের কাজ হিসাবে বৈশিষ্ট্যগুলি বিকাশ করে।

তাহলে কি হয়? ঠিক আছে, প্রত্যেকে "আপস্ট্রিম" উত্স থেকে রিলিজের সংগ্রহস্থল (যা সম্ভবত পূর্ববর্তী দিনের বিকাশের সাম্প্রতিকতম উপাদান থাকবে) থেকে প্রতিটি দিনের শুরুতে টান দেয়। প্রত্যেকে সরাসরি এটি করে। এটি তাদের সংগ্রহস্থলের একটি শাখায় যাবে, সম্ভবত তাকে "মাস্টার" বলা হয় বা আপনি যদি আমাকে "সর্বশেষ" বলে থাকেন তবে। প্রোগ্রামারটি তখন কিছু কাজ করবে। এই কাজ এমন কিছু হতে পারে যা তারা নিশ্চিত না, তাই তারা একটি শাখা তৈরি করে, কাজটি করে। যদি এটি কাজ না করে তবে তারা শাখাটি মুছতে এবং ফিরে যেতে পারে। যদি এটি হয় তবে তাদের বর্তমানে যে প্রধান শাখায় কাজ করছেন তা তাদের মার্জ করতে হবে। আমরা বলব এটি একটি ইউআই প্রোগ্রামার কাজ করছে latest-uiযাতে সে git checkout latest-uiঅনুসরণ করেgit merge abc-ui-mywhizzynewfeature। তারপরে তিনি তার প্রযুক্তিগত সীসা (ইউআই লিড) বলছেন আরে, আমি এই জাতীয় কোনও কাজ শেষ করেছি, আমার কাছ থেকে টানুন। ইউআই লিড তাই করে git pull user-repo lastest-ui:lastest-ui-suchafeature-abc। ইউআই লিড এর পরে সেই শাখায় এটি দেখে এবং বলে, আসলে এটি খুব ভাল, আমি এটিতে একীভূত করব ui-latest। তারপরে তিনি তার নীচের সবাইকে তাদের ui-latestশাখাগুলিতে বা যে নাম দিয়েছিলেন তা তাঁর কাছ থেকে টানতে বলবেন এবং তাই ডেভস দ্বারা বৈশিষ্ট্যটি অনুসন্ধান করা হবে। দলটি যদি খুশি হয় তবে ইউআই লিড টেস্টিং লিডকে তার কাছ থেকে টানতে এবং পরিবর্তনগুলিকে একীভূত করতে চাইতে পারে। এটি প্রত্যেকের (পরিবর্তনের মূলধারার) কাছে প্রচার করে যারা এটি পরীক্ষা করে বাগ রিপোর্ট জমা দেয় ইত্যাদি Finally পরিশেষে, বৈশিষ্ট্যটি যদি পরীক্ষার মাধ্যমে পাস করে তবে শীর্ষস্থানীয় কোনও প্রযুক্তিগত নেতৃত্ব এটি প্রোগ্রামের বর্তমান ওয়ার্কিং কপির সাথে মিশে যেতে পারে, যার বিন্দুতে সমস্ত পরিবর্তনগুলি আবার নীচে প্রচারিত হয়। ইত্যাদি।

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


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

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

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

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

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

9

একটি মডেল যা আমি ভাল ফলাফলের সাথে ব্যবহার করেছি তা নিম্নলিখিত:

একটি "আশীর্বাদযুক্ত" রেপো প্রত্যেকে মূলত ক্লায়েন্ট-সার্ভার টোপোলজিকে ধাক্কা দেয় এবং সেখান থেকে টেনে নিয়ে যায়।

এখানে কোনও মাস্টার শাখা নেই তাই কোনও বিকাশকারী কোনও কোডকে "মূলরেখায়" ঠেকাতে না পারে।

সমস্ত বিকাশ বিষয় শাখায় ঘটে। এর জন্য কে দায়ী তা সহজেই সনাক্ত করার জন্য আমরা নামগুলির নামকরণ করেছি: jn / new বৈশিষ্ট্য বা জেএন / ইস্যু -1234

হোয়াইটবোর্ডে শাখা এবং কানবান / স্ক্রাম কার্ডের মধ্যে প্রায় 1-থেকে -1 ম্যাপিং রয়েছে।

একটি শাখা ছাড়তে এটি আশীর্বাদী রেপোতে চাপানো হয় এবং কানবান-কার্ড পর্যালোচনার জন্য প্রস্তুত হয়ে যায়।

তারপরে, যদি শাখাটি পর্যালোচনা দ্বারা গৃহীত হয়, তবে এটি একটি রিলিজের প্রার্থী।

একটি রিলিজ ঘটে যখন গ্রহণযোগ্য শাখাগুলির একটি সেট একত্রে একত্রিত হয়ে একটি সংস্করণ সংখ্যার সাথে ট্যাগ করা হয়।

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

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


2

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

আমি যখন কোনও নতুন বৈশিষ্ট্য বা বাগফিক্সে কাজ করি তখন আমি এটি একটি শাখায় করি। আমি শাখায় ইউনিট-টেস্টও করি। যদি সবকিছু ঠিকঠাক কাজ করে তবেই কেবল আমি মাস্টারটিতে আবার মার্জ / রিবেস করব।

আমি চেষ্টা করি এবং সাধারণ শাখার নামকরণের সম্মেলনগুলিও ব্যবহার করি, যেমন:

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