গিটে অঙ্গীকার করার আগে কেন আমি মঞ্চ চাই?


105

আমি সংস্করণ নিয়ন্ত্রণে নতুন এবং আমি বুঝতে পারি যে "প্রতিশ্রুতিবদ্ধ" আপনি কী কাজ করছেন তার নতুন 'বর্তমান' সংস্করণটি আপডেট করার সময় মূলত একটি ব্যাকআপ তৈরি করছে।

আমি যা বুঝতে পারি না তা হ'ল বাস্তবিক দৃষ্টিকোণ থেকে মঞ্চস্থকরণ কী। কেবল নামে বিদ্যমান এমন কিছু মঞ্চস্থ করা কি এটি কোনও উদ্দেশ্য করে? আপনি যখন প্রতিশ্রুতিবদ্ধ, এটি যাইহোক যাইহোক, প্রতিশ্রুতিবদ্ধ হবে?

সম্পাদনা: আমি মনে করি আমি পরিভাষা গুলিয়ে ফেলছি। কোনও 'স্টেজড' ফাইল কি 'ট্র্যাকড' ফাইলের মতো একই জিনিস?


6
নং ট্র্যাক করা ফাইলটি হ'ল এটি স্টোরের কাছে পরিচিত (সাধারণত পূর্বের প্রতিশ্রুতি থেকে)। একটি মঞ্চযুক্ত ফাইল হ'ল সূচকটিতে যুক্ত করা হয়েছে যা পরে প্রতিশ্রুতিবদ্ধতার জন্য ব্যবহৃত হবে।
মার্ক পিটারস

উত্তর:


83

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

আপনি স্টেজযুক্ত ফাইলগুলিকে --cachedঅনেকগুলি কমান্ডের মধ্যবর্তী ওয়ার্কিং কপি হিসাবে বিবেচনা করতে পারেন । উদাহরণস্বরূপ, git diff --cachedমঞ্চটি কীভাবে আলাদা হয় HEADতা আপনাকে দেখাবে যাতে আপনার অন্যান্য কার্যকরী পরিবর্তনের সাথে মিশ্রিত না হয়ে আপনি কী প্রতিশ্রুতিবদ্ধ হচ্ছেন তা দেখতে পান।


25
অন্যান্য সত্যিই সাধারণ ব্যবহার হ'ল যখন আপনার কিছু পরিবর্তন কখনও প্রতিশ্রুতিবদ্ধ না হয়; উদাহরণস্বরূপ, আপনি ভাল জিনিস স্টেজ করতে পারেন, এটি প্রতিশ্রুতিবদ্ধ করতে পারেন, তারপরে খারাপ জিনিসগুলি দিয়ে উড়িয়ে দিতে পারেন git reset --hard
ক্যাস্যাবেল

4
আপনার উদাহরণস্বরূপ, বেনজ্যাকসন, মঞ্চ + কমিট এবং একটি নির্বাচনী কমিটের মধ্যে পার্থক্য কী? আমি কোন পার্থক্য দেখছি না।
ইউজিনিও

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

4
আমি মনে করি না আপনি সত্যিই প্রশ্নের উত্তর দিয়েছেন। "তবে সর্বাধিক সুস্পষ্ট হ'ল আপনার কাজের পরিবর্তনগুলিকে ছোট, স্ব-অন্তর্ভুক্ত টুকরো টুকরো টুকরো করা। কেউ কেন তাদের ছোট ছোট পরিবর্তনগুলিকে পরিবর্তন করতে চায়? আপনার কোডটি সংশোধন করার আগে আপনি যদি একটি একক বাগ ফিক্স যুক্ত করতে বা প্রতিশ্রুতিবদ্ধ করতে যাচ্ছেন তবে আপনি কেন সেই বাগ বাগ সংশোধন করার পরিবর্তে কেবলমাত্র এটি সংশোধন করবেন না এবং তা করার পরে কমিট করার চেষ্টা করবেন না?
কিউইকম্ব 123

4
@ কিউইকম্বম্ব ১২৩ সাধারণত কারণ যে আপনি অন্য কোনও কিছুর উপর কাজ করার সময় যে বাগটি পেয়েছিলেন এবং আপনার নিজের লগ বার্তা এবং অন্য কোথাও ঠিক করা মার্জ / চেরি-পিক / রিবেসটি সংযুক্ত করার নমনীয়তার সাথে এটি তার নিজের কমিটে ঠিক করতে চান।
বেন জ্যাকসন

28
  • মঞ্চ অঞ্চলটি কমিটিকে আরও কম করার নিয়ন্ত্রণ দেয়। কোডে কেবল একটি যৌক্তিক পরিবর্তন করুন, পরিবর্তিত ফাইলগুলি মঞ্চে যুক্ত করুন এবং শেষ পর্যন্ত যদি পরিবর্তনগুলি খারাপ হয় তবে পূর্ববর্তী প্রতিশ্রুতিতে চেকআউট করুন বা অন্যথায় পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করুন the এটি টাস্ককে ছোট ছোট কাজগুলিতে বিভক্ত করতে এবং ছোট প্রতিশ্রুতিবদ্ধ করার নমনীয়তা দেয় পরিবর্তন। মঞ্চক্ষেত্রের ক্ষেত্রের সাথে ছোট কাজগুলিতে ফোকাস করা সহজ।
  • এটি বিরতি নেওয়ার এবং বিরতি নেওয়ার আগে আপনি কত কাজ করেছেন তা ভুলে যাওয়ার অফার দেয়। মনে করুন একটি যৌক্তিক পরিবর্তন করতে আপনার তিনটি ফাইল পরিবর্তন করতে হবে এবং আপনি প্রথম ফাইলটি পরিবর্তন করেছেন এবং আপনি অন্য পরিবর্তনগুলি শুরু না করা পর্যন্ত আপনার দীর্ঘ বিরতি প্রয়োজন। এই মুহুর্তে আপনি প্রতিশ্রুতিবদ্ধ করতে পারবেন না এবং আপনি কোন ফাইলগুলি দিয়েছিলেন তা ট্র্যাক করতে চান যাতে ফিরে আসার পরে আপনার কতটা কাজ হয়েছে তা মনে করার চেষ্টা করার দরকার নেই। সুতরাং ফাইলটি মঞ্চে যুক্ত করুন এবং এটি আপনার কাজকে সাশ্রয় করবে। আপনি যখন ফিরে আসবেন ঠিক git diff --stagedতখনই যাচাই করুন এবং কোন ফাইলটি আপনি কোথায় পরিবর্তন করেছেন এবং কোথায় এবং অন্যান্য পরিবর্তনগুলি শুরু করবেন তা পরীক্ষা করুন।

13

মঞ্চ ধারণের একটি ব্যবহারিক উদ্দেশ্য ফাইল কমিটের যৌক্তিক পৃথকীকরণ।

মঞ্চায়ন আপনাকে ফাইল / ওয়ার্কিং ডিরেক্টরিতে সম্পাদনা করা চালিয়ে যাওয়ার অনুমতি দেয় এবং অংশগুলি চুক্তি করার সময় জিনিসগুলি প্রস্তুত বলে আপনি মনে করেন, আপনি যৌক্তিক সম্পর্কযুক্ত সম্পাদনাগুলির জন্য পৃথক পর্যায় ব্যবহার করতে পারেন।

ধরুন আপনি 4 ফাইল আছে fileA.html, fileB.html, fileC.htmlএবং fileD.html। আপনি সমস্ত 4 ফাইলগুলিতে পরিবর্তনগুলি করুন এবং কমিট করার জন্য প্রস্তুত হয় কিন্তু পরিবর্তন fileA.htmlএবং fileB.htmlকথাটি সম্পর্কিত হয় (উদাহরণস্বরূপ, উভয় ফাইলের মধ্যে একই নতুন বৈশিষ্ট্য বাস্তবায়ন) যখন পরিবর্তন fileC.htmlএবং fileD.htmlপৃথক ও কথাটি ফাইলগুলিতে পূর্ববর্তী সম্পর্কহীন হয়। আপনি প্রথমে ফাইলগুলি স্টেজ করতে fileA.htmlএবং fileB.htmlসেগুলি প্রতিশ্রুতিবদ্ধ করতে পারেন ।

git add fileA.html
git add fileB.html
git commit -m "Implemented new feature XYZ"

তারপরে পরবর্তী ধাপে আপনি মঞ্চায়ন করবেন এবং বাকী দুটি ফাইলে পরিবর্তন আনবেন।

git add fileC.html
git add fileD.html
git commit -m "Implemented another feature EFG"

7
এই উদাহরণে, আমি নিশ্চিত নই যে মঞ্চের সত্যিকার অর্থে প্রয়োজনীয়তা রয়েছে কিনা। সমস্ত 4 টি ফাইল সম্পাদনা করার পরে, আমি যদি কেবল ফাইলএইচটিএমএল এবং ফাইলবি। Html প্রতিশ্রুতিবদ্ধ করতে চাই, তবে আমি এটি সংরক্ষণ না করেই প্রতিশ্রুতিবদ্ধ। কমান্ড: git commit -m "Implemented new feature XYZ" fileA.html fileB.html গিট অ্যাড কমান্ডের প্রয়োজন ছাড়াই ঠিক কাজ করবে। আমি সাবভারশন দুনিয়া থেকে এসেছি যেখানে মঞ্চ মঞ্চ ধারণার ধারণা নয়, সুতরাং আমি গিট স্টেজিংয়ের উপযোগিতা সম্পর্কে নিশ্চিত নই
পবন

6

বেন জ্যাকসনের উত্তরটি প্রসারিত করতে , যা ঠিক আছে, আসল প্রশ্নটি ঘনিষ্ঠভাবে দেখি। ( কেন প্রশ্নগুলি বিরক্ত করার জন্য তার উত্তর দেখুন ; এটি কী চলছে তা সম্পর্কে আরও বেশি ))

আমি সংস্করণ নিয়ন্ত্রণে নতুন এবং আমি বুঝতে পারি যে "প্রতিশ্রুতিবদ্ধ" আপনি কী কাজ করছেন তার নতুন 'বর্তমান' সংস্করণটি আপডেট করার সময় মূলত একটি ব্যাকআপ তৈরি করছে।

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

আমি যা বুঝতে পারি না তা হ'ল বাস্তবিক দৃষ্টিকোণ থেকে মঞ্চস্থকরণ কী। কেবল নামে বিদ্যমান এমন কিছু মঞ্চস্থ করা কি এটি কোনও উদ্দেশ্য করে? আপনি যখন প্রতিশ্রুতিবদ্ধ, এটি যাইহোক যাইহোক, প্রতিশ্রুতিবদ্ধ হবে?

হ্যা এবং না. গিটের ডিজাইন এখানে কিছুটা অদ্ভুত। সংস্করণ নিয়ন্ত্রণ সিস্টেম বিদ্যমান রয়েছে যার জন্য পৃথক স্টেজিং পদক্ষেপের প্রয়োজন হয় না । উদাহরণস্বরূপ, মার্চুরিয়াল, যা অন্যথায় ব্যবহারের দিক দিয়ে গিটের মতো অনেক বেশি, সম্পূর্ণ নতুন ফাইলটি প্রবর্তনকারী প্রথমটির বাইরে পৃথক পদক্ষেপের প্রয়োজন হয় নাhg add । মার্চুরিয়াল দিয়ে আপনি hgকমান্ডটি ব্যবহার করেন যা কিছু প্রতিশ্রুতি নির্বাচন করে, তারপরে আপনি আপনার কাজটি করেন, তারপরে আপনি দৌড়ে যান hg commitএবং আপনি সম্পন্ন হয়ে যান। গিট দিয়ে আপনি 1 ব্যবহার করেন git checkout, তারপরে আপনি আপনার কাজ করেন, তারপরে আপনি চালান এবং তারপরে । অতিরিক্ত পদক্ষেপ কেন ?git addgit commitgit add

এখানে গোপনীয়তা হ'ল গিট যা কল করে, বিভিন্নভাবে, সূচক বা মঞ্চ অঞ্চল , বা কখনও কখনও — বিরল এই দিনগুলিতে — ক্যাশে । এগুলি একই জিনিসটির জন্য সমস্ত নাম।

সম্পাদনা: আমি মনে করি আমি পরিভাষা গুলিয়ে ফেলছি। কোনও 'স্টেজড' ফাইল কি 'ট্র্যাকড' ফাইলের মতো একই জিনিস?

না, তবে এগুলি সম্পর্কিত। একটি ট্র্যাক করা ফাইল হ'ল গিটের সূচীতে। সূচকটি সঠিকভাবে বুঝতে, কমিটগুলি বোঝার সাথে শুরু করা ভাল।


গিট সংস্করণ ২.২৩ থেকে আপনি এর git switchপরিবর্তে ব্যবহার করতে পারেন git checkout। এই বিশেষ ক্ষেত্রে, এই দুটি কমান্ড ঠিক একই জিনিস করতে। নতুন কমান্ডটি উপস্থিত রয়েছে কারণ git checkoutঅনেকগুলি জিনিস দিয়ে অতিরিক্ত স্টাফ করা হয়েছে; তারা দুটি পৃথক কমান্ড ছড়িয়ে বিভক্ত করেছেন, git switchএবং git restore, এটা সহজ এবং নিরাপদ গীত ব্যবহার করতে হবে।


কমিট করে

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

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

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

এর অর্থ হ'ল আপনি যখন কোনও নির্দিষ্ট প্রতিশ্রুতি পরীক্ষা করেন, তখন স্বয়ংক্রিয়ভাবে প্রতিটি ফাইলের দুটি কপি থাকে:

  • গিটের সর্বকালের জন্য হিমায়িত, বর্তমান প্রতিশ্রুতিতে গিট-আইয়েড অনুলিপি রয়েছে । আপনি এই অনুলিপিটি পরিবর্তন করতে পারবেন না (যদিও আপনি অবশ্যই আলাদা প্রতিশ্রুতি নির্বাচন করতে পারেন, বা একটি নতুন অঙ্গীকারবদ্ধ করতে পারেন)।

  • আপনার কার্যক্ষেত্রে একটি সাধারণ-ফর্ম্যাট কপি রয়েছে। আপনার কম্পিউটারে যে কোনও কমান্ড ব্যবহার করে আপনি এটি করতে ইচ্ছুক যে কোনও কিছু করতে পারেন।

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

সূচক

এই দুটি অনুলির মধ্যে, গিট প্রতিটি ফাইলের তৃতীয় অনুলিপি 2 সঞ্চয় করে। এই তৃতীয় অনুলিপি হিমায়িত বিন্যাসে রয়েছে , তবে প্রতিশ্রুতিবদ্ধ হ'ল অনুলিপিটির বিপরীতে, আপনি এটিকে পরিবর্তন করতে পারেন । এটি পরিবর্তন করতে, আপনি ব্যবহার করুন git add

git addকমান্ড মানে ফাইলের সূচক কপি কাজ-ট্রি কপি মেলে করা । এটি, আপনি গিটকে বলছেন: হ'ল হ'ল ফর্ম্যাটটি, ডি-ডুপ্লিকেট অনুলিপিটি এখন সূচকগুলিতে প্রতিস্থাপন করুন, আমার আপডেট ওয়ার্ক-ট্রি কপিটি সংকুচিত করে, এটিটিকে অনুলিপি করে, এবং এটি একটি নতুন প্রতিশ্রুতিতে হিমায়িত হওয়ার জন্য প্রস্তুত করে। আপনি যদি ব্যবহার না করেনgit add তবে সূচকটি বর্তমান কমিট থেকে হিমায়িত-বিন্যাসের অনুলিপিটি ধারণ করে।

যখন আপনি চালাতে git commit, গীত আপ প্যাকেজ যাই হোক না কেন সূচক হয় ডান তারপর নতুন স্ন্যাপশট হিসাবে ব্যবহার করার জন্য। যেহেতু এটি ইতিমধ্যে হিমায়িত বিন্যাসে রয়েছে এবং প্রাক-ডুপ্লিকেটেড, তাই গিটকে অতিরিক্ত অতিরিক্ত কাজ করতে হবে না।

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

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

গিট সূচী থেকে নতুন কমিট করার কারণে, আমরা জিনিসগুলি এভাবে রাখতে পারি: গিটের সূচকটি আপনার পরবর্তী পরিকল্পনার কথা বলেছে । এটি বিতর্কিত একীকরণের সময় গিটের সূচক যে প্রসারিত ভূমিকা গ্রহণ করে তা উপেক্ষা করে, তবে আমরা এখনই এটিকে উপেক্ষা করতে চাই। :-)

এটুকুই আছে - তবে এটি এখনও বেশ জটিল! এটি বিশেষত জটিল কারণ গিটের সূচীতে ঠিক কী আছে তা দেখার সহজ উপায় নেই। 3 কিন্তু হয় একটি গীত কমান্ড যে আপনি বলে কি একটি উপায় চমত্কার উপযোগী এ, হচ্ছে, এবং যে কমান্ড git status


2 প্রযুক্তিগতভাবে, এটি আসলে কোনও কপি নয়। পরিবর্তে, এটি গিট-আইয়েড ফাইল, প্রি-ডি-সদৃশ এবং সমস্ত কিছুর একটি উল্লেখ reference গিটকে দ্রুত এগিয়ে নিতে মোড, ফাইলের নাম, একটি স্টেজিং নম্বর এবং কিছু ক্যাশে ডেটার মতো এখানে আরও কিছু জিনিস রয়েছে। তবে আপনি গিটের নিম্ন-স্তরের কয়েকটি কমান্ড- git ls-files --stageএবং git update-indexবিশেষত - এর সাথে কাজ না করলে আপনি এটিকে একটি অনুলিপি হিসাবে ভাবতে পারেন।

3git ls-files --stage কমান্ড আপনাকে নাম এবং গীত এর সূচীতে যে ফাইলের উপস্থাপনকারী সংখ্যার দেখাবে, কিন্তু সাধারণত এই খুব দরকারী যাহাই হউক না কেন নয়।


git status

git statusকমান্ড আসলে দুটি পৃথক চলমান করে কাজ করে git diffআপনার জন্য কমান্ড (এবং যেমন আপনি কহন যা শাখা তুমি আছো যেমন, কিছু অন্যান্য দরকারী স্টাফ করছেন)।

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

দ্বিতীয়টি git diffগিটের সূচীর সমস্ত ফাইলকে আপনার কার্য-গাছের ফাইলগুলির সাথে তুলনা করে। একই ফাইলগুলির জন্য , গিট কিছুই বলেন না। পৃথক পৃথক ফাইলগুলির জন্য , গিট আপনাকে বলবে যে এই ফাইলটি কমিট করার জন্য মঞ্চস্থ করা হয়নি । প্রথম ডিফের বিপরীতে, এই নির্দিষ্ট তালিকার মধ্যে সমস্ত নতুন ফাইল অন্তর্ভুক্ত নেই : যদি ফাইলটি untrackedআপনার কার্য-বৃক্ষে উপস্থিত থাকে তবে গিতের সূচীতে না থাকে, গিট কেবল এটি তালিকৃত ফাইলের তালিকায় যুক্ত করে

শেষে, এই তালিকায় থাকা ফাইলগুলিকে একটি তালিকায় জমা করে, সেই ফাইলগুলির নামগুলিও git statusঘোষণা করবে , তবে একটি বিশেষ ব্যতিক্রম রয়েছে: যদি কোনও ফাইলের কোনও ফাইলের নাম তালিকাভুক্ত থাকে, যা এই শেষ তালিকাটিকে দমন করে। নোট করুন যে একটি ট্র্যাক করা ফাইল তালিকাবদ্ধ করা - এটি একটি গিটের সূচীতে index এখানে একটি কার্যকারিতা নেই : ফাইলটি সূচীতে রয়েছে, সুতরাং এটি তুলনা করা যায় এবং প্রতিশ্রুতিবদ্ধ হয়, এমনকি এটি তালিকাভুক্ত থাকলেও । উপেক্ষা করা ফাইলটি কেবল "অচিহ্নযুক্ত ফাইল" অভিযোগ দমন করে। .gitignore.gitignore.gitignore


4git status - সংক্ষিপ্ত সংস্করণটি ব্যবহার করার সময় git status -suntঅনেকে তালিকৃত ফাইলগুলি পৃথকীকরণের মতো নয়, তবে নীতিটি একই। এই জাতীয় ফাইলগুলিকে একত্রিত করার সাথে সাথে git statusকেবল কখনও কখনও কেবল নামের নাম মুদ্রণের মাধ্যমে অবরুদ্ধ ফাইলগুলির নামের একগুচ্ছ সংক্ষিপ্তসার করতে দেয় । সম্পূর্ণ তালিকা পেতে, ব্যবহার করুন git status -uallবা git status -u

5 একটি ফাইল তালিকাবদ্ধকরণ en-masse করে অনেকগুলি ফাইল ক্রিয়াকলাপকে যুক্ত করে git add .বা git add *অচিহ্নযুক্ত ফাইলটি এড়িয়ে যায়। এই অংশটি খানিকটা জটিল হয়ে যায়, যেহেতু আপনি git add --forceসাধারণত এমন একটি ফাইল যুক্ত করতে পারেন যা এড়ানো যায়। কিছু অন্যান্য সাধারণ-ছোটখাট বিশেষ কেস রয়েছে, এর সবগুলিই এটিকে যুক্ত করে: ফাইলটি .gitignoreআরও সঠিকভাবে বলা হতে পারে .git-do-not-complain-about-these-untracked-files-and-do-not-auto-add-themবা সমানভাবে অপ্রতিরোধ্য কিছু হতে পারে । তবে এটি খুব হাস্যকর, তাই .gitignoreএটি।


git add -u, git commit -aইত্যাদি

এখানে জানার জন্য বেশ কয়েকটি সহজ শর্টকাট রয়েছে:

  • git add .বর্তমান ডিরেক্টরি এবং যে কোনও উপ ডিরেক্টরিতে সমস্ত আপডেট হওয়া ফাইল যুক্ত করবে । এটি সম্মান করে .gitignore, সুতরাং বর্তমানে যদি একটি ফাইল যা তালিকার চিহ্নবিহীন রয়েছে তার অভিযোগ না করা হয় git status, তবে এটি স্বয়ংক্রিয়ভাবে যুক্ত হবে না।

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

  • git add -Aএটি git add .আপনার কাজের গাছের শীর্ষ স্তর থেকে দৌড়ানোর মতো (তবে পাদটীকা 6 দেখুন)।

এগুলি ছাড়াও, আপনি দৌড়াতে পারেন git commit -aযা মোটামুটি 7 রান করার সমান git add -uএবং তারপরে git commit। যে, এটি আপনাকে একই আচরণ দেয় যা মার্চুরিয়ালে সুবিধাজনক।

আমি সাধারণত git commit -aপ্যাটার্নের বিপরীতে পরামর্শ দিই: আমি দেখতে পাই যে git statusপ্রায়শই ব্যবহার করা ভাল হয় , আউটপুটটি ঘনিষ্ঠভাবে লক্ষ্য করা যায় এবং যদি আপনি যেটা প্রত্যাশা করেননি স্ট্যাটাসটি যদি তা না হয় তবে এটি কেন ঘটেছে তা খুঁজে বের করুন। ব্যবহার করে git commit -a, দুর্ঘটনাক্রমে কোনও ফাইল সংশোধন করা এবং আপনি যে প্রতিশ্রুতিবদ্ধ হতে চাননি এমন পরিবর্তন প্রতিশ্রুতিবদ্ধ তা খুব সহজ। তবে এটি বেশিরভাগ স্বাদ / মতামতের বিষয়।


6 আপনার Git সংস্করণ চেয়েও পুরনো তাহলে গীত 2.0 সাবধান এখানে: git add -uশুধুমাত্র বর্তমান ডিরেক্টরি ও উপ-ডিরেক্টরির কাজ করে, যার ফলে আপনি আপনার কাজ-গাছের শীর্ষ স্তরের প্রথম আরোহণ উচিত নয়। git add -Aবিকল্প একটি অনুরূপ সমস্যা হয়েছে।

7 আমি মোটামুটি সমতুল্য বলি কারণ git commit -aএকটি অতিরিক্ত সূচক তৈরি করে এবং প্রতিশ্রুতিবদ্ধ করতে অন্য সূচকটি ব্যবহার করে বাস্তবে কাজ করে। যদি প্রতিশ্রুতি কাজ করে তবে আপনি যেমন করছেন তেমন প্রভাব পান git add -u && git commit। যদি প্রতিশ্রুতিটি কার্যকর না হয় - যদি আপনি গিটটি যে কোনওভাবেই এটি করতে পারেন — তাহলে কোনও ফাইলই git addপরে তৈরি করা হয় না, কারণ গিট অস্থায়ী অতিরিক্ত সূচকটি ফেলে দেয় এবং মূল সূচকটি ব্যবহার করে ফিরে যায় ।

আপনি যদি git commit --onlyএখানে ব্যবহার করেন তবে অতিরিক্ত জটিলতা রয়েছে । এই ক্ষেত্রে, গিট একটি তৃতীয় সূচক তৈরি করে এবং জিনিসগুলি খুব জটিল হয়, বিশেষত যদি আপনি প্রাক-প্রতিশ্রুতি হুক ব্যবহার করেন। এটি আলাদা git addঅপারেশন ব্যবহার করার অন্য কারণ reason


5

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

---------------- Day 1 --------------------
Message: Complete Task A
Index of files changed: File1, File2

Message: Complete Task B
Index of files changed: File2, File3
-------------------------------------------

---------------- Day 2 --------------------
Message: Correct typos
Index of files changed: File3, File1
-------------------------------------------
...
...
...and so on

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

এই সাব-টাস্কগুলির প্রতিটি (এখানে টাস্ক এ এবং টাস্ক বি) স্বতন্ত্র কমিট are git addকমান্ড 'ফাইল -এর সূচী পরিবর্তিত তালিকায় ফাইল যোগ করা হয়েছে। এই প্রক্রিয়াটিকে স্টেজিংও বলা হয়। git commitকমান্ড রেকর্ড / পরিবর্তন এবং একটি বার্তা লিখে তার সাথে সংশ্লিষ্ট সূচক তালিকা চূড়ান্ত করেছে।

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

উদাহরণস্বরূপ, সেই কাল্পনিক লগ ফাইলে দ্বিতীয় প্রবেশের জন্য, আমি এটি করতাম:

git pull
# Make changes to these files
git add File3 File4
# Verify changes, run tests etc..
git commit -m 'Correct typos'
git push

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


2

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

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

আপনি এখানে আরও উদাহরণ পেতে পারেন: সূচকের ব্যবহার

এবং সর্বোত্তম অংশটি হ'ল সুবিধাটি কর্মপ্রবাহের এই তালিকাটি দিয়ে থামবে না stop যদি কোনও অনন্য ওয়ার্কফ্লো উপস্থিত হয় তবে আপনি প্রায় নিশ্চিত হয়ে উঠতে পারবেন যে মঞ্চের স্থানটি আপনাকে সহায়তা করবে।


1

আমি @ জেন জ্যাকসন এবং @ তপাশী তাবাসসুম উর্মি উল্লিখিত অনুসারে কমিটিকে আরও ছোট করে তুলতে মঞ্চটি ব্যবহার করার বিষয়টি দেখতে পাচ্ছি এবং মাঝে মাঝে আমি এটির জন্য এটি ব্যবহার করি, তবে আমি আমার প্রতিশ্রুতিগুলি আরও বড় করতে মূলত এটি ব্যবহার করি! এখানে আমার বক্তব্য:

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

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

আমি এটি করার জন্য অন্যান্য উপায়গুলি দেখতে পাচ্ছি (গিট ইতিহাসকে সহজ করার জন্য) যা আপনি নিজের পছন্দ অনুসারে ব্যবহার করতে পারেন:

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

0

এটি একটি চেকবক্সের মতো যা কোন ফাইলগুলি কমিট করতে হবে তা চয়ন করার ক্ষমতা সরবরাহ করে।

উদাহরণস্বরূপ, যদি আমি সম্পাদনা করেছি fileA.txtএবং fileB.txt.কিন্তু আমি fileA.txtকেবল পরিবর্তন করতে চাই । কারণ আমি এখনও শেষ হয়নি fileB.txt

আমি সহজেই ব্যবহার করতে পারি git add fileA.txtএবং প্রতিশ্রুতিবদ্ধ করতে পারি git commit -m "changed fileA.txt"এবং কাজটি চালিয়ে fileB.txtযাওয়ার পরে এবং শেষ করে আমি fileB.txtসহজেই প্রতিশ্রুতিবদ্ধ

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