অগ্রগতি রিফ্যাক্টরিং কীভাবে প্রতিশ্রুতিবদ্ধ?


23

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

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

আপনি কি মনে করেন? আমি কি সমাধান উপেক্ষা করছি?
আমি কি পরে গিটকে একীট কমিট বা অন্য কিছু করতে বলতে পারি? যতক্ষণ না তারা শাখায় থাকে ততক্ষণ আমি কম-কম্পাইলিং কমিট দিয়ে বেঁচে থাকতে পারিcleanup

সম্পাদন করা

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

সংক্ষেপে: স্থানীয় কমিটগুলি শেষ পর্যন্ত চাপ দেওয়া হবে। গ্লোবাল ইতিহাসে কম-কম্পাইলিং কমিটগুলি দেখানো উচিত নয়।


1
আপনি একক বৈশ্বিক অঙ্গীকারে একাধিক স্থানীয় কমিটগুলি সংগ্রহ করতে পারেন।

@ থরবজর্ন হ'ল নীচে জিমের সুপারিশ, বা গিটের মধ্যে একটি আলাদা প্রক্রিয়া?
ব্রায়ান

আমি তাই বিশ্বাস করি - সঠিক আদেশটি আমি মনে করতে পারি না।

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

1
@ বিটমাস্ক একটি পুনর্লিখন সম্পর্কে কীভাবে?
ডেভ হিলিয়ার

উত্তর:


21

git merge --squashকমান্ড আপনাকে তৈরি করতে বর্তমান শাখা যার প্রভাব অন্য শাখা মার্জ হিসাবে একই উপরে একটি একক কমিট পারেন। কমান্ডটি কার্যক্ষম গাছকে আপডেট করে এবং সূচকের পরিবর্তনগুলি স্থির করে, তাই আপনাকে পরবর্তী যা করতে হবে তা হল কমিট:

git checkout master
git merge --squash cleanup
git commit -m "Merge cleanup branch"

git rebase -iকমান্ড এছাড়াও করে স্কোয়াশ কিন্তু আরো কাজ প্রয়োজন পারবেন না।


14

পুনর্লিখন একটি রিফ্যাক্টরিং নয়

আমি বুঝতে পারি যে আপনি গিট কীভাবে ব্যবহার করবেন সে সম্পর্কে আগ্রহী, তবে আমি যুক্তি দিয়ে বলব যে আপনি গিটকে যেভাবে ব্যবহার করবেন তার চেয়ে আপনার রিফ্যাক্টরিংগুলি করার পদ্ধতি পরিবর্তনের বিষয়ে বিবেচনা করা উচিত (যদিও আমি মনে করি গিট আপনাকে সহায়তা করতে পারে)।

মার্টিন ফোলার রিফ্যাক্টরিং এরূপ হিসাবে সংজ্ঞায়িত করেছেন :

কোডের একটি বিদ্যমান সংস্থা পুনর্গঠনের জন্য একটি শৃঙ্খলাবদ্ধ কৌশল, এর বাহ্যিক আচরণ পরিবর্তন না করে এর অভ্যন্তরীণ কাঠামো পরিবর্তন করে tering

এর হৃদয় রূপান্তরগুলি সংরক্ষণ করে রাখা ছোট ছোট আচরণের একটি সিরিজ। প্রতিটি রূপান্তর (যাকে "রিফ্যাক্টরিং" বলা হয়) খুব কম করে, তবে রূপান্তরগুলির ক্রম একটি উল্লেখযোগ্য পুনর্গঠন তৈরি করতে পারে। যেহেতু প্রতিটি রিফ্যাক্টরিং ছোট, এটি ভুল হওয়ার সম্ভাবনা কম। সিস্টেমটি প্রতিটি ছোট রিফ্যাক্টরিংয়ের পরে সম্পূর্ণরূপে কাজ করে রাখা হয়, পুনর্গঠনের সময় কোনও সিস্টেম গুরুতরভাবে ভেঙে যাওয়ার সম্ভাবনা হ্রাস করে।

আপনি যদি এই পদ্ধতিটি প্রয়োগ করেন তবে আপনি নিয়মিতভাবে কমিট করতে পারেন (এবং চাপ দিন) can

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

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


5

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


3

আপনি গীত ব্যবহার করছেন, এইভাবে সংগঠনের অগত্যা না পরোক্ষভাবে না ঠেলাঠেলি আপনার পরিবর্তনগুলি ....

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

এছাড়াও, আপনি মাস্টারের চেয়ে আলাদা শাখায় কাজ করছেন। সুতরাং, আপনি যদি চান (এবং আমি এটি প্রস্তাব করি), আপনি আপনার শাখাটি আর চাপবেন না। একবার আপনি রিফ্যাক্টরিং শেষ করার পরে, কেবলমাত্র মাস্টার শাখাটি চেকআউট করুন, আপনার পরিবর্তনগুলি মার্জ করুন এবং মাস্টার শাখাটি পুশ করুন।

সম্পাদন করা

সেক্ষেত্রে আপনি git cherry-pickচারপাশে ব্যবহার করতে বা খেলতে পারেনgit rebase


একটি গুরুত্বপূর্ণ নোট, কিন্তু আমি এটি বিবেচনা। আমার সম্পাদনা দেখুন। ধন্যবাদ.
বিটমাস্ক

উপরে আমার সম্পাদনা দেখুন।
ক্রিশ্চিয়ান

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