গিট শাখা, কাঁটাচামচ, আনয়ন, মার্জ, পুনরায় এবং ক্লোন মধ্যে পার্থক্য কি?


502

আমি গিটে একটি শাখা, কাঁটাচামচ এবং একটি ক্লোনের মধ্যে পার্থক্য বুঝতে চাই?

একইভাবে, আমি যখন এর git fetchবিপরীতে একটি করি তখন এর অর্থ কীgit pull ?

এছাড়াও, rebaseতুলনা করে কী বোঝায়merge ?

আমি কীভাবে পৃথক পৃথকভাবে স্কোয়াশ করতে পারি?

তারা কীভাবে ব্যবহৃত হয়, কেন তারা ব্যবহার করা হয় এবং তারা কী উপস্থাপন করে?

গিটহাব কীভাবে চিত্রায়িত হবে?


19
আপনি কি মাইকেল ডুরান্টের উত্তর হিসাবে গ্রহণযোগ্য উত্তরটি পরিবর্তন করতে পারবেন?
স্যারাইড

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

উত্তর:


366

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

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

http://eagain.net/articles/git-for-computer-scientists/

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

সম্পাদনা: যেহেতু গিটহাবের মতো সাইটগুলি ব্যবহার করে "কাঁটাচামচ" এর আধুনিক সংজ্ঞা সম্পর্কে আমি অবগত ছিলাম না, আরও তথ্যের জন্য দয়া করে মন্তব্যগুলি এবং আমার নীচে মাইকেল ডুরান্টের উত্তরটি দেখুন।


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

5
আমি মনে করি এটি সত্য। আমি কেবল কখনও দেখেছি "কাঁটাচামচ" কোনও প্রকল্পের একটি নতুন, সম্ভাব্য প্রতিযোগিতামূলক সংস্করণ তৈরির প্রসঙ্গে ব্যবহৃত।
স্যারাইড

32
আপনি বলতে পারেন যে কাঁটাচামচ একটি শাখা যা উজানের দিকে একীভূত হওয়ার আশা করা যায় না
মাসনঙ্ক

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

4
গিথুবের মডেল সম্পর্কে আরও তথ্যের জন্য মাইকেল ডুরান্টের উত্তর লোককে দেখতে বলার জন্য আমি আমার উত্তর আপডেট করেছি।
স্যারাইড

531

git

এই উত্তরে গিটহাব অন্তর্ভুক্ত রয়েছে কারণ অনেক লোকেরা এটি সম্পর্কে জিজ্ঞাসা করেছে।

স্থানীয় সংগ্রহস্থল

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

গিট একটি ফাইলের প্রতিটি সংস্করণ সংরক্ষণ করে যা পুরো ফাইলটি সংরক্ষণ করে পরিবর্তিত হয়। এটি এই ক্ষেত্রে এসভিএন থেকেও আলাদা কারণ আপনি ডেল্টা পরিবর্তনের মাধ্যমে 'পুনরায় তৈরি' না করে যে কোনও স্বতন্ত্র সংস্করণে যেতে পারেন।

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


শাখা

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

কাঁটাচামচ: একটি শাখার সাহায্যে আপনি শাখাটি নিয়ন্ত্রণ এবং পরিচালনা করেন, অন্যদিকে কাঁটাচামচ দিয়ে অন্য কেউ কোডটি স্বীকার করে আবার নিয়ন্ত্রণ করে।

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

মাস্টারগুলিতে একটি শাখা 'ইন' আনার স্ট্যান্ডার্ড উপায় হ'ল একটি merge। ইতিহাস 'ক্লিন আপ' করতে শাখাগুলিকে "পুনর্বাসিত" করা যেতে পারে। এটি বর্তমান অবস্থায় প্রভাবিত করে না এবং এটি একটি 'ক্লিনার' ইতিহাস দেওয়ার জন্য করা হয়।

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

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

শাখা ট্র্যাকিং

এই শাখাগুলি নাম দেওয়া হয়েছে origin/branch_name(ন্যায়বিচারের বিপরীতে branch_name)। আপনি যখন দূরবর্তী সংগ্রহস্থলগুলিতে / থেকে কোডটি চাপছেন এবং টানছেন তখন এটি আসলে সেই প্রক্রিয়া যার মাধ্যমে ঘটে। উদাহরণস্বরূপ, আপনি যখন git pushএকটি শাখা কল করেন , তখন building_groupsআপনার শাখাটি প্রথমে যায় origin/building_groupsএবং তারপরে এটি দূরবর্তী সংগ্রহস্থলে যায়। একইভাবে, আপনি যদি git fetch building_groupsএটি করেন তবে পুনরুদ্ধার করা ফাইলটি আপনার origin/building_groupsশাখায় স্থাপন করা হবে । তারপরে আপনি এই শাখাটি আপনার স্থানীয় অনুলিপিতে মার্জ করতে বেছে নিতে পারেন। আমাদের অনুশীলনটি হ'ল সর্বদা একটি git fetchএবং একটি ম্যানুয়াল মার্জ করার পরিবর্তে সর্বদা একটি git pull(যা উপরের দু'টি এক ধাপে করে)।

নতুন শাখা আনা হচ্ছে।

নতুন শাখা নেওয়া: ক্লোনটির প্রাথমিক পর্যায়ে আপনার সমস্ত শাখা থাকবে। তবে, যদি অন্য বিকাশকারীরা শাখা যোগ করে সেগুলিকে সেখানকার দূরবর্তী স্থানে ঠেলে দেয় তবে স্থানীয়ভাবে এগুলি নীচে টেনে আনতে সক্ষম হওয়ার জন্য সেই শাখাগুলি এবং তাদের নামগুলি সম্পর্কে 'জানার' উপায় হওয়া দরকার। এটি একটি এর মাধ্যমে সম্পন্ন হয়েছে git fetchযা ট্র্যাকিং শাখাগুলি (যেমন, origin/) ব্যবহার করে সমস্ত নতুন এবং পরিবর্তিত শাখা স্থানীয়ভাবে সংগ্রহস্থলগুলিতে পাবে । একবার fetchসম্পাদনা করা গেলে , git branch --remoteট্র্যাকিং শাখাগুলি git checkout [branch]তালিকাবদ্ধ করতে এবং কোনও প্রদত্ত একটিতে স্যুইচ করতে পারেন।

মার্জ

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

যখন করছেন checkoutএর masterএটি একটি করতে সুপারিশ করা হচ্ছে git pull origin masterদূরবর্তী মাস্টার খুব সর্বশেষ সংস্করণ পেতে আপনার স্থানীয় মাস্টার মধ্যে মিশে গিয়ে তৈরি। যদি রিমোট মাস্টার পরিবর্তিত হয়, অর্থাৎ moved forward, আপনি এমন তথ্য দেখতে পাবেন যা সেই সময়ের মধ্যে এটি প্রতিফলিত করে git pull। যদি এটি হয় (মাস্টার পরিবর্তিত) আপনার পরামর্শ দেওয়া হয় git checkout your_branchএবং তারপরে rebaseএটি মাস্টার করার জন্য যাতে আপনার পরিবর্তনগুলি আসলে 'নতুন' মাস্টারের উপরে 'রিপ্লেড' হয়। তারপরে আপনি পরবর্তী অনুচ্ছেদে বর্ণিত হিসাবে মাস্টার আপ টু ডেট পাচ্ছেন।

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

একবার আপনি কোনও দ্বন্দ্ব নিরসন করলে আপনি আবার একবারে git addএবং git commitমার্জগুলি চালিয়ে যাওয়ার জন্য এই পরিবর্তনগুলি করবেন (আপনাকে গাইড করার জন্য এই প্রক্রিয়া চলাকালীন গিটের কাছ থেকে প্রতিক্রিয়া পাবেন)।

প্রক্রিয়াটি ভালভাবে কাজ না করলে আপনি দেখতে পাবেন যে git merge --abortজিনিসগুলি পুনরায় সেট করতে খুব সহজ।

ইন্টারেক্টিভ রিবেসিং এবং স্কোয়াশিং / পুনঃক্রম / কমিটগুলি অপসারণ

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

এটি করার ক্ষেত্রে মূল্যায়ন করার মূল বিষয়টি হ'ল একাধিক কমিটি একই ফাইল বা একাধিকবার ফাইলের বিপরীতে রয়েছে কিনা (সেই ক্ষেত্রে স্কোয়াশ কমিট করার চেয়ে ভাল)। এটি ইন্টারেক্টিভ রিবেসিং সরঞ্জাম দিয়ে করা হয়। এই সরঞ্জামটি আপনাকে স্কোয়াশ করে, কমিটগুলি মুছে ফেলতে, বার্তাগুলি পুনরায় পাঠাতে দেয় example উদাহরণস্বরূপ, git rebase -i HEAD~10( দ্রষ্টব্য: এটি একটি ~নয়,- ) নিম্নলিখিতগুলি নিয়ে আসে:

গিতে ইন্টারেক্টিভ রিবেসিং

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

কাটাচামচ

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

এই দ্বিতীয় পদ্ধতিটি কাঁটাচামচ ব্যবহার করে, কারও কাছে रिपাইজিটরির ব্যবহারকারীর তালিকা বজায় রাখতে হবে না


GitHub

গিটহাব (একটি রিমোট রিপোজিটরি) এমন একটি রিমোট উত্স যা আপনি সাধারণত এই প্রতিশ্রুতিবদ্ধ (বা যুক্ত হয়ে থাকেন) যদি প্রতিশ্রুতিবদ্ধ পরিবর্তনগুলিকে ধাক্কা দিয়ে টানেন এবং স্থানীয় এবং দূরবর্তী আসলে আলাদা আলাদা। রিমোট রিপোজিটরিটি ভাবার আরেকটি উপায় হ'ল এটি একটি .gitডিরেক্টরি কাঠামো যা দূরবর্তী সার্ভারে থাকে।

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

কাঁটাযুক্ত সংগ্রহস্থলের নামের চিত্র

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

এক সাথে কোডে কাজ করা একটি দলের পক্ষে আরও সাধারণ হ'ল रिपোটারিটি 'ক্লোন' করা (ভাণ্ডারের মূল পর্দার 'অনুলিপি' আইকনে ক্লিক করুন)। তারপরে, স্থানীয়ভাবে টাইপ করুন git cloneএবং পেস্ট করুন। এটি আপনাকে স্থানীয়ভাবে সেট আপ করবে এবং আপনি (ভাগ করা) গিটহাব অবস্থানটি ধাক্কা দিতে এবং টানতে পারবেন।

ক্লোনের যোগান দেয়

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

কল্পনা

মূল ধারণাগুলির ভিজ্যুয়ালাইজেশন
http://marklodato.github.com/visual-git-guide/index-en.html এবং http://ndpsoftware.com/git-cheatsheet.html#loc=index এ দেখা যাবে

যদি আপনি কীভাবে পরিবর্তনগুলি কাজ করছে তার একটি ভিজ্যুয়াল প্রদর্শন চান তবে আপনি জিইউআই দিয়ে ভিজ্যুয়াল সরঞ্জামটিকে gitg( gitxম্যাকোএসের জন্য) পরাজিত করতে পারবেন না যে আমি 'পাতাল রেল মানচিত্র' (যেমন লন্ডন আন্ডারগ্রাউন্ড) বলছি, কে কী করেছে তা দেখানোর জন্য দুর্দান্ত, কীভাবে জিনিসগুলি পরিবর্তন হয়, ডাইভার্জ হয়ে যায় এবং একত্রী হয় ইত্যাদি

আপনি নিজের পরিবর্তনগুলি যুক্ত করতে, প্রতিশ্রুতিবদ্ধ করতে ও পরিচালনা করতে এটি ব্যবহার করতে পারেন!

Gitg / gitx ইন্টারফেসের চিত্র

যদিও gitg / gitx মোটামুটি ন্যূনতম, জিইউআই সরঞ্জামগুলির সংখ্যা প্রসারিত অবিরত রয়েছে। অনেক ম্যাক ব্যবহারকারী ব্রাদারবার্ডের গিটক্সের কাঁটাচামচ ব্যবহার করে এবং লিনাক্সের জন্য, দুর্দান্ত বিকল্পটি একটি স্বজ্ঞাত কিন্তু শক্তিশালী ইন্টারফেস সহ স্মার্ট গিট:

স্মার্ট গিট জিইউআইয়ের চিত্র

মনে রাখবেন যে একটি জিইউআই সরঞ্জাম সহ, আপনি সম্ভবত কমান্ড লাইনে প্রচুর কমান্ড করবেন।

এর জন্য আমার আমার ~/.bash_aliasesফাইলে নিম্নলিখিত উপাধি রয়েছে (যা ~/.bashrcপ্রতিটি টার্মিনাল সেশনের জন্য আমার ফাইল থেকে ডাকা হয় ):

# git
alias g='git status'
alias gcob='git checkout -b '
alias gcom='git checkout master'
alias gd='git diff'
alias gf='git fetch'
alias gfrm='git fetch; git reset --hard origin/master'
alias gg='git grep '
alias gits='alias | grep "^alias g.*git.*$"'
alias gl='git log'
alias gl1='git log --oneline'
alias glf='git log --name-status'
alias glp='git log -p'
alias gpull='git pull '
alias gpush='git push '

এবং আমার ~/.gitconfigফাইলে আমার নিম্নলিখিত "গিট এলিয়াস" রয়েছে - এগুলি কেন?
সুতরাং সেই শাখার সমাপ্তি (টিএবি কী সহ) কাজ করে!

সুতরাং এইগুলি:

[alias]
  co = checkout
  cob = checkout -b

উদাহরণস্বরূপ ব্যবহার: git co [branch]<- শাখাগুলির জন্য ট্যাব সমাপ্তি কাজ করবে।

জিইউআই শেখার সরঞ্জাম Tool

কিছু বেস ধারণাগুলি শিখতে আপনি https://learngitbranching.js.org/ দরকারী খুঁজে পেতে পারেন । স্ক্রিন শট: ভিডিও: https://youtu.be/23JqqcLPss0এখানে চিত্র বর্ণনা লিখুন

অবশেষে, 7 কী জীবনকালীন!

  1. আপনি পরিবর্তন করেন, এগুলি যুক্ত করুন এবং প্রতিশ্রুতিবদ্ধ করুন (তবে ধাক্কা দেবেন না) এবং তারপর ওহ! আপনি বুঝতে পারেন আপনি মাস্টার হয়!

    git reset [filename(s)]
    git checkout -b [name_for_a_new_branch]
    git add [file(s)]
    git commit -m "A useful message"
    
    Voila!  You've moved that 'master' commit to its own branch !
  2. স্থানীয় শাখায় কাজ করার সময় আপনি কিছু ফাইল বিশৃঙ্খলা করে ফেলেছেন এবং আপনি সর্বশেষ সময়টি যা করেছিলেন তাতে ফিরে যেতে চান git pull:

    git reset --hard origin/master  # You will need to be comfortable doing this!
  3. আপনি স্থানীয়ভাবে পরিবর্তনগুলি শুরু করতে পারেন, আপনি অর্ধ ডজন ফাইল সম্পাদনা করুন এবং তারপরে ওহ ক্রাপ, আপনি এখনও মাস্টার (বা অন্য) শাখায় রয়েছেন:

    git checkout -b new_branch_name  # just create a new branch
    git add .                      # add the changes files
    git commit -m"your message"    # and commit them
  4. আপনি আপনার বর্তমান শাখায় একটি নির্দিষ্ট ফাইল গণ্ডগোল করছেন এবং মূলত সেই ফাইলটি 'রিসেট' করতে চান (পরিবর্তনগুলি হারাবেন) এটি কীভাবে আপনি শেষবারের রিমোটোরিটি থেকে শেষ বার টানছিলেন তা:

    git checkout your/directories/filename

    এটি আসলে ফাইলটি পুনরায় সেট করে (অনেক গিট কমান্ডের মতো এটি এখানে এটি কী করছে তার নাম দেওয়া হয়নি)।

  5. আপনি স্থানীয়ভাবে কিছু পরিবর্তন করেন, আপনি এটি নিশ্চিত করতে চান যে আপনি কোনও করার সময় সেগুলি হারাবেন না git resetবা rebase: আমি প্রায়শই পুরো প্রকল্পের একটি ম্যানুয়াল অনুলিপি তৈরি cp -r ../my_project ~/করি ( ) যখন আমি নিশ্চিত না যে আমি গিটের মধ্যে জড়িয়ে পড়ি বা গুরুত্বপূর্ণ হারাতে পারি পরিবর্তন।

  6. আপনি মুক্তি দিচ্ছেন তবে জিনিসগুলি গোলমেলে:

    git rebase --abort # To abandon interactive rebase and merge issues
  7. আপনার PS1প্রম্পটে আপনার গিট শাখা যুক্ত করুন ( https://unix.stackexchange.com/a/127800/10043 দেখুন ), উদাহরণস্বরূপ

    প্রম্পটের চিত্র

    শাখাটি হ'ল selenium_rspec_conversion


1
2/20/12 মার্জ বনাম রিবাজে তথ্য যুক্ত হয়েছে
মাইকেল ডুরান্ট

1
এটিকে আরও সম্পূর্ণ করতে ক্লোনগুলিতে 6/16/12 বিভাগ যুক্ত করা হয়েছে।
মাইকেল ডুরান্ট

4
এত লেখা !! আমি আমার সাধারণ সাবসার্শনটি আটকে রাখব :-)
জনি

6
তাই না? একটি বিবর্তনকারী ব্যবহারকারী সাবভার্সন ব্যবহার করে একটি বই লিখতেও পারে। এটা আমার মতামত যে subversion কম কার্যকারিতা সহ একটি পুরানো প্রযুক্তি। আমি ব্যক্তিগতভাবে গিটটি ব্যবহার করা খুব সহজ খুঁজে পাই। ymmv
মাইকেল

3
বাহ, মাইকেল! জ্ঞান ভাগ করে নেওয়ার বিষয়ে এসও। দুর্দান্ত কাজের জন্য ধন্যবাদ, অবশ্যই +1
মিশিগেল

143

অলিভার স্টিলের চিত্র এখানে কীভাবে সমস্ত কিছু একসাথে ফিট করে:

এখানে চিত্র বর্ণনা লিখুন


6
এই চিত্রটি "গিট ক্লোন" যুক্ত করতে আপডেট করা যেতে পারে যা আমি নিশ্চিত যে বেশিরভাগ লোক যে কোনও ক্ষেত্রেই পরিচিত।
কনটাঙ্গো

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

আমি যা বুঝি তার থেকে, গিট টান আপনি যা যা জিজ্ঞাসা করেন তা দূর থেকে টেনে নিয়ে যায় (সুতরাং, আপনি যে ট্রাঙ্কের জন্য জিজ্ঞাসা করছেন) এবং আপনি যখন অনুরোধ করবেন তখন তত্ক্ষণাত্ আপনি যে শাখায় থাকবেন তা এটিকে মার্জ করুন। পুল হ'ল একটি উচ্চ-স্তরের অনুরোধ যা ডিফল্টরূপে 'আনয়ন' এর পরে 'মার্জ' বা 'brebase' এর সাথে একটি রিবেস চালায়। আপনি এটি ছাড়া করতে পারেন, এটি কেবল একটি সুবিধা।
কনতাঙ্গো

এই চিত্রটিতে গিট ক্লোনটি ঠিক কোথায় যাবে? এছাড়াও গিট মার্জ? আমি গিটে খুব নতুন কিন্তু আমি এই ছবিটি পছন্দ করি।
মিশেল

2
আমি ডায়াগ্রামের একটি আপডেট সংস্করণ করতে পারি কিনা তা আমি দেখতে পাব।
কনটাঙ্গো

8

কাঁটা বনাম ক্লোন - দুটি শব্দ যা উভয়ই অনুলিপি করে

দয়া করে এই চিত্রটি দেখুন। (মূলতঃ http://www.dataschool.io/content/images/2014/Mar/github1.png থেকে )।

.-------------------------.     1. Fork     .-------------------------.
| Your GitHub repo        | <-------------- | Joe's GitHub repo       |
| github.com/you/coolgame |                 | github.com/joe/coolgame |
| ----------------------- | 7. Pull Request | ----------------------- |
| master -> c224ff7       | --------------> | master -> c224ff7 (c)   |
| anidea -> 884faa1 (a)   |                 | anidea -> 884faa1 (b)   |
'-------------------------'                 '-------------------------'
    |                 ^
    | 2. Clone        |
    |                 |
    |                 |
    |                 |
    |                 |
    |                 | 6. Push (anidea => origin/anidea)
    v                 |
.-------------------------.
| Your computer           |  3. Create branch 'anidea'
| $HOME/coolgame          |
| ----------------------- |  4. Update a file
| master -> c224ff7       |
| anidea -> 884faa1       |  5. Commit (to 'anidea')
'-------------------------'

(a) - after you have pushed it
(b) - after Joe has accepted it
(c) - eventually Joe might merge 'anidea' (make 'master -> 884faa1')

কাঁটাচামচ

  • আপনার রিমোট রেপোতে একটি অনুলিপি (মেঘ) যা এটির সাথে লিঙ্ক করে
  • তারপরে একটি অনুলিপি আপনি আপনার স্থানীয় রেপো এবং এফ *% $ আপ করতে পারেন
  • আপনার হয়ে গেলে আপনি আপনার রিমোটে ফিরে যেতে পারেন
  • তারপরে জো-কে জিজ্ঞাসা করতে পারেন তিনি যদি টান-অনুরোধে ক্লিক করে তার প্রকল্পে এটি ব্যবহার করতে চান

ক্লোন

  • আপনার স্থানীয় রেপোতে একটি অনুলিপি (হার্ডড্রাইভ)

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

6

অন্যকে যুক্ত করার জন্য, কাঁটাচালনার জন্য নির্দিষ্ট একটি নোট।

প্রযুক্তিগতভাবে, রেপো ক্লোনিং করা এবং রেপো কাঁটাচাই করা একই জিনিস তা অনুধাবন করা ভাল। না:

git clone $some_other_repo

এবং আপনি নিজেকে পিছনে ট্যাপ করতে পারেন --- আপনি সবেমাত্র কিছু অন্য রেপো কাঁটাচামচ করেছেন।

ভিসিএস হিসাবে গিট আসলে ক্লোনিং ফোরিং সম্পর্কে । এছাড়াও থেকে "শুধু ব্রাউজিং" এই ধরনের cgit যেমন দূরবর্তী UI ব্যবহার, সেখানে খুব সামান্য Git রেপো যে সঙ্গে যুক্ত নয় না হয় forking সময়ে রেপো ক্লোনিং।

যাহোক,

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

    যে বিষয়গুলি: রেপো সম্ভবত অন্য কমান্ডের সাথে তৈরি হয়েছিল git clone, এটি সম্ভবত কারওর ল্যাপটপের বিপরীতে সার্ভারে কোথাও হোস্ট করা হয়েছে এবং সম্ভবত কিছুটা আলাদা ফর্ম্যাট রয়েছে (এটি একটি "বেয়ার রেপো", অর্থাৎ কাজ করা গাছ ছাড়া) সবই কেবল প্রযুক্তিগত বিবরণ।

    এটি সম্ভবত বিভিন্ন শাখা, ট্যাগ বা কমিটের বিভিন্ন সেট ধারণ করবে এটি সম্ভবত এটিই প্রথম স্থানে করেছিল।

    (আপনি "কাঁটাচামচ" ক্লিক করার পরে গিথুব কী করেন, কেবল যোগ করা চিনির সাথে ক্লোনিং করে: এটি আপনার জন্য রেপোকে ক্লোন করে, আপনার অ্যাকাউন্টের নীচে রাখে, "কোথাও" থেকে "কোথাও" রেকর্ড করে, "আপস্ট্রিম" নামক রিমোট যুক্ত করে এবং সবচেয়ে গুরুত্বপূর্ণ, চমৎকার অ্যানিমেশন খেলুন।)

  • যখন কেউ বলে আমি রেপো এক্সকে ক্লোন করেছি , তখন তার অর্থ তারা নিজের ল্যাপটপ বা ডেস্কটপে স্থানীয়ভাবে রেপির ক্লোন তৈরি করেছে যা এটি অধ্যয়ন করে, এটির সাথে খেলতে, এতে অবদান রাখতে বা এতে উত্স কোড থেকে কিছু তৈরি করতে।

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


দ্রষ্টব্য: "সুরক্ষিতভাবে" যতক্ষণ না আপনি চেইনের সাধারণ অংশটি পুনরায় লিখবেন না, এবং যতক্ষণ না পরিবর্তনগুলি বিরোধী নয়।

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