প্রতিটি গিট কমিটগুলি কি প্রকল্পের কাজটি ছেড়ে যেতে হবে?


36

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

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

উত্তর:


50

আমি সাধারণত এই নিয়মটি অনুসরণ করি:

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

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

40

বিকাশের সময় আপনার স্বাচ্ছন্দ্যময় করে তোলে তার জন্য আপনার স্থানীয় ক্লোন ব্যবহার করুন।

আমি নিয়মিত ভাঙ্গা কোডটি প্রতিশ্রুতিবদ্ধ করি এবং আমি যখন অন্য বিকাশকারীদের কাছে কোডটি উপলব্ধ করতে প্রস্তুত থাকি তখন আমি একটি দুর্দান্ত বৈশিষ্ট্য ব্যবহার করি:

git rebase -i HEAD~4

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

তারপরে আমি সেই একটি পারমাণবিক প্রতিশ্রুতি বা ধাক্কা দিতে পারি বা আমার নতুন বৈশিষ্ট্যটি সত্যই প্রস্তুত হলে আমি কী করব তা বিদ্যমান সিভিএস রেপোতে আমার কাজ পেতে 'git cvsexportcommit' ব্যবহার করছে is


3
আমি এই উত্তরটির বুদ্ধি নিয়ে প্রশ্ন তুলছি কারণ এটি নির্ভর করে rebaseযা বেশ বিতর্কিত: তুমি শাল্ট নয় মিথ্যা: গিট রিবেস, সংশোধন, স্কোয়াশ, এবং অন্যান্য মিথ্যা
স্লেড

8
@ আর্টবি: তবে এক্ষেত্রে মেমেটেক কেবল নিজের কাছে মিথ্যাবাদী (আইওডাব্লু পাবলিক ইতিহাসের পুনর্লিখন নয়), এবং এটি খুব বিতর্কিত নয়
জার্গ ডব্লু মিত্তাগ

4
@ আর্টবি নিবন্ধটি প্রকাশিত কমিটগুলি উল্লেখ করছে। উত্তরগুলি অপ্রকাশিত কমিটিকে বোঝায়।
d0001

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

8
@ আর্টবি - আমি ইন্টারনেটে আপনি যা পড়েছেন তার সমস্ত কিছু বিশ্বাস করার এবং কেন (বা কেন নয়) বুঝতে না পেরে আপনি ইন্টারনেটে যা কিছু পড়েন (বা করছেন না) তার বুদ্ধি নিয়ে আমি প্রশ্ন করি।
mattnz

6

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

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

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


2

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

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


1

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

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


1

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

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


1

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

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

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

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


0

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

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

আমার কাছে, এটি সমস্তই আপনার দলের সাথে একমত হওয়া যা গ্রহণযোগ্য is কিছু দল এমনকি একটি শাখায় ভাঙা কোড গ্রহণ করবে না, অন্যরা করবে।

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