কোডিং অগ্রগতিকে খুব বেশি ওভারহেড ছাড়াই অর্থবহ কমিটে বিভক্ত করা


23

কোনও স্থির বা কোনও বৈশিষ্ট্যে কাজ করার সময়, আমি মাঝে মাঝে অন্যান্য ক্ষুদ্র সমস্যাগুলিতে হোঁচট খেয়ে যাই যেগুলি কয়েক সেকেন্ডের ব্যবধানে উড়ে যেতে পারে can আমি যখন এগুলি তাত্ক্ষণিকভাবে করি এবং তারপরে সমাপ্ত বৈশিষ্ট্য / সংশোধন করি, তখন প্রতিশ্রুতিতে একাধিক জিনিস অন্তর্ভুক্ত থাকে। উদাহরণস্বরূপ "add feature X and code clean up"বা "fix bug X and improved logging"। এটিকে দুটি কমিটে ভাগ করে নেওয়া ভাল। একই ফাইলটিতে দুটি পরিবর্তন ঘটে গেলে আমি কেবল একটি ফাইল যুক্ত করতে পারি না, প্রতিশ্রুতি দিতে পারি, অন্যটি যুক্ত করতে পারি এবং তারপরে আবারও প্রতিশ্রুতিবদ্ধ। সুতরাং আমি নিম্নলিখিত তিনটি বিকল্প দেখতে পাচ্ছি:

  1. কোনও কিছুর উপর কাজ করার সময় ইচ্ছাকৃতভাবে অ-সম্পর্কিত জিনিসগুলি উপেক্ষা করুন।

  2. দুটি পরিবর্তন সহ ফাইলটি অনুলিপি করুন, এটিকে ফিরিয়ে দিন, একটি পরিবর্তন অন্তর্ভুক্ত করুন, প্রতিশ্রুতিবদ্ধ করুন, অন্য পরিবর্তন অন্তর্ভুক্ত করুন, আবার প্রতিশ্রুতিবদ্ধ।

  3. ছোট ছোট সম্পর্কহীন জিনিসগুলি পরিবর্তন করবেন না তবে এগুলি একটি টুডো তালিকায় যুক্ত করুন এবং পরে করুন।

নিম্নলিখিত কারণগুলির কারণে আমি তিনটি বিকল্পের মধ্যে সত্যই পছন্দ করি না:

  1. কেউ যদি ছোট সমস্যাগুলি সমাধান না করে তবে কোডের মান ক্ষতিগ্রস্থ হতে পারে। আমি যদি খুব সচেষ্ট না হয়ে সচেতনভাবে কিছু উন্নত করার সুযোগটি হাতছাড়া করি তবে আমার খারাপ লাগছে।

  2. এটি ম্যানুয়াল কাজের বৃদ্ধি করে এবং ত্রুটিযুক্ত প্রবণ।

  3. এটি অতি-ক্ষুদ্র ক্ষুদ্র টোডোসের জন্য ঠিক না, তবে একটি টুডু তালিকায় একটি ছোট আইটেম যুক্ত করা এবং পরে এটি পুনর্বিবেচনা করা প্রায়শই কেবল তাত্ক্ষণিকভাবে ঠিক করার চেয়ে অনেক বেশি সময় নেয়।

আপনি কিভাবে এই ধরনের পরিস্থিতি পরিচালনা করবেন?


7
গিট কি আপনাকে পুরো ফাইলগুলির চেয়ে পৃথক লাইনে চেক করার অনুমতি দেয় না?
কিলিয়ান ফট


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

1
@ গ্যাनेट: স্পষ্টতই কোনও ডুপ নয়। ওপি কমিটের সঠিক আকার সম্পর্কে জিজ্ঞাসা করছে না - তিনি ছোট ছোট কমিট করতে চান do তিনি কেবল এটি করার জন্য আরও কার্যকর উপায়ের সন্ধান করছেন।
ডক ব্রাউন

2
@ গ্যাनेट: শীর্ষ ফাইলের উত্তরে কোনও ফাইলের বিভিন্ন পরিবর্তন কীভাবে পরিচালনা করতে হয় এবং কীভাবে সেগুলিকে পৃথক কমিটে বিভক্ত করা যায় সে সম্পর্কে কিছুই বলা যায় না
ডক ব্রাউন

উত্তর:


11

আমি মনে করি যে প্রোগ্রামিং করার সময় আপনাকে খুব বাস্তববাদী হতে হবে। এমনকি যদি নিখুঁত স্কিম, কর্মপ্রবাহ বা বাস্তবায়ন প্রণয়ন করা সম্ভবও হতে পারে তবে কখনও কখনও আপনার কাজটি করা দরকার। আমি যা করি তা এখানে:

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

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

এটি ঘটে যায় যে জিনিসগুলি পৃথক করা কেবল ব্যবহারিক নয় এবং আমি মূল কাজের পাশাপাশি সামান্য সমন্বয়ও করব commit

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


7

আমার সম্পাদকের একটি প্লাগইন রয়েছে যা কোনও ফাইলের পৃথক অংশকে মজুত করে তোলে। আমি কল্পনা করি যে অন্যান্য প্রোগ্রামার সম্পাদকদের একই প্লাগইন থাকতে পারে, যদিও আপনি সর্বদা এটি ম্যানুয়াল পদ্ধতিতে করতে পারেন git add --patch | -p। তারপরে আমি বিচ্ছিন্নভাবে আমার ছোট্ট প্রতিশ্রুতি পরীক্ষা করতে আমার অন্যান্য পরিবর্তনগুলি সংরক্ষণ করতে গিট স্ট্যাশ ব্যবহার করি । তারপরে আমি প্রতিশ্রুতি দেওয়ার পরে, আমি কেবল একটি করি git stash popএবং যেখানেই ছেড়ে দিয়েছি। এই বৈশিষ্ট্যগুলির জন্য ডিজাইন করা হয়েছিল ঠিক সেটাই।


2

কৌশলটি পরিবর্তন করা নয় যতক্ষণ না আপনি পরিবর্তন যতটা চেষ্টা করার জন্য যতটা চেষ্টা করার জন্য প্রস্তুত হন।

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

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


1
ওপি দুটি পরিবর্তনকে একটি প্রতিশ্রুতিতে বিভক্ত করার পরামর্শ দেয়নি, একেবারে বিপরীত।
ডক ব্রাউন

1
@ ডকব্রাউন তিনি একক শাখায় 2 টি পরিবর্তনের মিশ্রণের পরামর্শ দিচ্ছেন, যদিও এটি পরে আনপিক করা অদৃশ্য হতে পারে, যদিও একক প্রতিশ্রুতিতে 2 টি পরিবর্তনের মতো স্পষ্টতই অগোছালো নয়।
gbjbaanb

ঠিক আছে, আমি আপনার চূড়ান্ত অনুচ্ছেদে আপনার মনে কী আছে তা আমি দেখতে পাচ্ছি।
ডক ব্রাউন

2

একটি বিকল্প যা আমি বেশ খানিকটা ব্যবহার করি তা হল TODOমন্তব্য যুক্ত করা, তারপরে git add --patchফাইলের প্রাসঙ্গিক অংশগুলি নির্বাচন করে প্রচুর ঘন ঘন "আংশিক" কমিটগুলি করা । তারপরে git rebase --interactiveপুনরায় অর্ডার করতে এবং আংশিক কমিটগুলিকে চূড়ান্ত বৈশিষ্ট্যে রূপান্তরিত করতে ব্যবহার করুন এবং তাদের ধাক্কা দেওয়ার আগে ফিক্সআপ কমিট করে।

এটি আপনার মূল প্রতিশ্রুতি পরিষ্কার রাখে এবং তবুও আপনাকে খুঁজে পাওয়া অন্যান্য সমস্যাগুলি অবিলম্বে ঠিক করার অনুমতি দেয়।

git rebaseআপনি কেবল স্থানীয় কমিটগুলি পুনর্লিখন করছেন বলে এই প্রসঙ্গে কোনও অসুবিধা নেই ।


1

আরেকটি বিকল্প হতে পারে আপনার বর্তমান পরিবর্তনগুলি "গিট স্ট্যাশ"। কর্মপ্রবাহটি দেখতে এই রকম হবে:

  1. বৈশিষ্ট্য এ সম্পর্কিত পরিবর্তনগুলি শুরু করুন
  2. বাগ বি আবিষ্কার করুন এবং অবিলম্বে এটি ঠিক করার সিদ্ধান্ত নিন
  3. আপনার রেপোতে কমান্ড লাইন থেকে সঞ্চালন করুন git stash (এর পরে আপনার কোডটি সেই বৈশিষ্ট্যে ফিরে আসবে যেখানে আপনি বৈশিষ্ট্য এ এ কাজ শুরু করার আগে ছিল )
  4. এই মুহুর্তে আপনার বৈশিষ্ট্য A এর জন্য অনির্ধারিত পরিবর্তনগুলি "স্ট্যাশ" এ সংরক্ষণ করা হয়েছে
  5. বাগ বি ঠিক করার জন্য কোড পরিবর্তনগুলি প্রয়োজনীয় করুন এবং রেপোতে একটি প্রতিশ্রুতিবদ্ধ করুন
  6. কমান্ড লাইন থেকে রান git stash pop
  7. ফিচার এ এর জন্য আপনার অনুমতি ছাড়াই করা পরিবর্তনগুলি এখন স্ট্যাশ থেকে পপ করা হয়েছে এবং বাগ বিয়ের জন্য (ইতিমধ্যে প্রতিশ্রুতিবদ্ধ) ফিক্সের পাশাপাশি আপনার অগ্রগতি কোডে পুনরুদ্ধার করা হয়েছে

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

0

পৃথকভাবে বাগ-ফিক্স সম্পর্কিত পরিবর্তনগুলি পর্যায়ক্রমে (এবং প্রতিশ্রুতিবদ্ধ)। গিট এক্সটেনশনগুলিতে এটি করা অত্যন্ত সহজ। কমান্ডলাইন থেকে, আমার মনে হয় আপনার করা দরকার git add -p

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