গিট স্টেজিং: মঞ্চ কখন? পরে যদি সংশোধন ঘটে তবে কি করবেন


9

আমি বরং গিতের বিস্তৃত বিশ্বে নতুন। আমি ম্যানুয়ালটি পড়েছি এবং অনুশীলন করেছি তবে এর কয়েকটি দিক সম্পর্কে আমি বিভ্রান্ত হয়েছি, যা অনুসন্ধানের পরে আমি বুঝতে পারি না।

আমি আশ্চর্য হচ্ছি:

  • একটি প্রকল্পে (প্রথম প্রতিশ্রুতি পোস্ট করুন), উত্স ফাইলগুলি মঞ্চ করার সঠিক মুহূর্তটি কখন? প্রতিশ্রুতি দেওয়ার আগে? যোগ / মুছা বা সংশোধন করার পরে ঠিক?

  • যদি দুটি কমিটের মাঝামাঝি মধ্যে ফাইলগুলি মঞ্চস্থ করা হয় এবং তারপরে সেগুলি সংশোধিত হয়, গিটের সাথে কী ঘটে? বিষয়বস্তু পরিবর্তনের বিষয়ে যখন এটি বর্ণিত হয়েছিল এবং তখন থেকে এটি কী হয়ে থাকে সে সম্পর্কে কি যত্নের প্রয়োজন?

  • আমি যদি একটি নতুন ফাইল তৈরি করি, এটি মঞ্চস্থ করি এবং তারপরে এটি মুছতে চাই, কেন গিট আমাকে "-f" পতাকা ব্যবহার করতে বলবে এবং একটি সরল "গিট-আরএম ফাইল.সেক্সট" কাজ করবে না?

আমি "মঞ্চটি কী বোঝায়" এবং গিটারের ম্যানুয়াল এবং অন্যান্য টিউটোরিয়ালের বিভিন্ন বিষয়গুলি পড়েছি তবে যেমনটি বলেছিলাম, আমি এখনও উপরোক্ত বিষয়গুলি বুঝতে পারি না।

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

ধন্যবাদ.


1
আমি যখনই কিছু ছোট ছোট কাজ শেষ করি (কমিটের জন্য খুব ছোট) বা কিছু পরিবর্তন আসার আগে আমি নিশ্চিত নই আমি ফাইলগুলি স্টেজ করি। আপনার জন্য কাজ করে যাই হোক না কেন। একটি সরঞ্জাম (উদাহরণস্বরূপ, গিট গুই বা গিট কোলা) আপনাকে উভয় পর্যায়ে এবং অযাচিত পরিবর্তনগুলি প্রদর্শন করে ( git diffএবং git diff --cachedভাল, তবে কখনও কখনও আমি আরও চাই) Find
মার্টিনাস

উত্তর:


4

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

পরাভব

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

git

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

সুতরাং মঞ্চের অঞ্চলে আপনি একটি স্ন্যাপশট তৈরি করতে পারেন যা এতে পরিবর্তন Aএবং ফাইলের একটি সংস্করণ অন্তর্ভুক্ত করে Cযা কেবলমাত্র পরিবর্তনগুলি প্রতিফলিত করে A

নির্দিষ্ট প্রশ্নের জন্য

  • আপনি যে কোনও মুহুর্তে মঞ্চস্থ করতে পারেন। আমি কমিটিকে লঞ্চ করার আগে আমি ব্যক্তিগতভাবে মঞ্চস্থ করতে পছন্দ করি।

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

  • গিট এখানে সতর্ক, যা সম্ভবত ভাল জিনিস।

সাধারণ প্রতিশ্রুতি কৌশল: দানাদার প্রতিশ্রুতিবদ্ধ

আমি মনে করি "কখন আমার মঞ্চ করা উচিত" প্রশ্নটি সম্পর্কে কথা বলার সময়, কারও অভ্যাস করার অভ্যাস সম্পর্কেও কথা বলা উচিত।

সেন্ট্রালাইজড ভিসিএস

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

git

গিট-এ স্থানীয়ভাবে প্রতিশ্রুতিবদ্ধ হয়, কেবলমাত্র তাদের একটি সার্ভারে ঠেলে দেওয়া সর্বজনীন করে তোলে। সুতরাং প্রতিশ্রুতিবদ্ধ এক অর্থে সস্তা । সাবস্ট্রেশন অর্থে প্রতিশ্রুতিবদ্ধ হওয়া git commitঅনুসরণকারীদের সাথে তুলনীয় git push। এই পার্থক্যটি গুরুত্বপূর্ণ।

আপনি একই ফাইলটিতে অন্য লাইনগুলি পরিবর্তন করে থাকলেও গিট আপনাকে কোডের একক লাইন প্রতিশ্রুতিবদ্ধ করতে দেয়। এটি আপনাকে অনেক সুবিধা দেয় যেহেতু আপনি উদাহরণস্বরূপ 100 লাইনটিতে একটি সুরক্ষা বাগফিক্স প্রতিশ্রুতিবদ্ধ করতে পারেন যখন নতুন বৈশিষ্ট্য প্রবর্তন করতে 300-50 রেখা পরিবর্তন করা হয়েছে।

  • আপনি বিভিন্ন কমিটে বিভিন্ন পরিবর্তন আলাদা করতে পারেন। এটি আপনার সংস্করণ ইতিহাসে এগুলিকে দুর্দান্তভাবে পৃথক করে এবং এমনকি আপনাকে অন্যটি নয় তবে একটিতে উল্টাতে দেয়।
  • আপনার প্রতিশ্রুতিবদ্ধভাবে অগত্যা আপনার কার্যকরী কপির একটি "সংকলন" অবস্থা প্রতিবিম্বিত করতে হবে না (যদিও আমি এটি সেভাবে রাখার চেষ্টা করি)।

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

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

অর্থাৎ আপনি masterকেবল শাখায় মার্জ করার অভ্যাসটি রাখতে পারেন , যদি শাখাটি ভাল অবস্থায় থাকে। মাইলফলক এবং রিলিজ ট্র্যাক করতে আপনি ট্যাগ ব্যবহার করতে পারেন।

এখন মঞ্চায় ফিরে আসুন: প্রতি প্রতি প্রতিশ্রুতি কয়েক লাইন প্রতিশ্রুতিবদ্ধ করার পরে আপনি সরাসরি প্রত্যাবর্তনের আগে মঞ্চস্থ হবেন। (কমপক্ষে এটি আমি এটি করি)।


git add -pখুব সুন্দর।
ভোরাক

2

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

একটি প্রকল্পে (প্রথম প্রতিশ্রুতি পোস্ট করুন), উত্স ফাইলগুলি মঞ্চ করার সঠিক মুহূর্তটি কখন? প্রতিশ্রুতি দেওয়ার আগে? যোগ / মুছা বা সংশোধন করার পরে ঠিক?

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

যদি দুটি কমিটের মাঝামাঝি মধ্যে ফাইলগুলি মঞ্চস্থ করা হয় এবং তারপরে সেগুলি সংশোধিত হয়, গিটের সাথে কী ঘটে? বিষয়বস্তু পরিবর্তনের বিষয়ে যখন এটি বর্ণিত হয়েছিল এবং তখন থেকে এটি কী হয়ে থাকে সে সম্পর্কে কি যত্নের প্রয়োজন?

এটি আপনাকে রেপোর বর্তমান অবস্থার এবং (শেষ প্রতিশ্রুতি + পর্যায়ের পরিবর্তনগুলির) মধ্যে পার্থক্য দেখাবে। আপনি যখন কিছু নতুন পরিবর্তন মঞ্চায়িত করবেন, এটি কেবলমাত্র (শেষ প্রতিশ্রুতি + পর্যায়ক্রমিক পরিবর্তনগুলি) অবস্থা পুনরায় গণনা করবে।

আমি যদি একটি নতুন ফাইল তৈরি করি, এটি মঞ্চস্থ করি এবং তারপরে এটি মুছতে চাই, কেন গিট আমাকে "-f" পতাকা ব্যবহার করতে বলবে এবং একটি সরল "গিট-আরএম ফাইল.সেক্সট" কাজ করবে না?

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

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