গিট এবং মার্কুরিয়াল - তুলনা করুন এবং বিপরীতে


520

কিছু সময়ের জন্য আমি আমার ব্যক্তিগত প্রকল্পগুলির জন্য সাবস্ট্রেশন ব্যবহার করছি।

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

আমি পুরো ডিভিসিএস জিনিসটিকে ঘূর্ণি দিতে চাই, তবে আমি কোনও বিকল্পের সাথে খুব বেশি পরিচিত নই।

মার্চুরিয়াল এবং গিটের মধ্যে কিছু পার্থক্য কী?

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


5
আরও দেখুন stackoverflow.com/questions/995636/...
VonC

উত্তর:


451

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

এই # লেখার জন্য মার্চুরিয়াল সম্পর্কে সহায়তার জন্য # জরুরী আইআরসি চ্যানেলের সমস্ত লোককে ধন্যবাদ



সারসংক্ষেপ

এখানে টেবিলের জন্য কিছু সিনট্যাক্স, পিএইচপিমার্কডাউন / মাল্টিমার্কডাউন / মার্কডাউন মার্কুকুর এক্সটেনশন এর মতো কিছু ভাল লাগবে would

  • সংগ্রহস্থল কাঠামো: মার্চুরিয়াল অক্টোপাসকে একত্রীকরণের অনুমতি দেয় না (দু'জনের বেশি বাবা-মায়ের সাথে), বা অ-প্রতিশ্রুতিবদ্ধ অবজেক্টগুলিকে ট্যাগ করতে পারে না।
  • ট্যাগ্স: মার্চুরিয়াল .hgtagsপ্রতি-সংগ্রহের ট্যাগগুলির জন্য বিশেষ নিয়মযুক্ত সংস্করণযুক্ত ফাইল ব্যবহার করে এবং এতে স্থানীয় ট্যাগগুলির জন্য সমর্থনও রয়েছে .hg/localtags; গিট ট্যাগগুলিতে refs/tags/নেমস্পেসে থাকা রেফ থাকে এবং ডিফল্টরূপে আনার সময় স্বয়ংক্রিয়ভাবে ফাঁকা থাকে এবং স্পষ্টভাবে ধাক্কা দেওয়ার প্রয়োজন হয়।
  • শাখাগুলি: বুধবার্কে বুনিয়াদি কর্মপ্রবাহ বেনামে মাথার উপর ভিত্তি করে ; গিটটিতে হালকা ওজনের নামযুক্ত শাখা ব্যবহার করা হয় এবং এতে বিশেষ ধরণের শাখা থাকে ( রিমোট-ট্র্যাকিং শাখা) branches ) যা দূরবর্তী সংগ্রহস্থলে শাখা অনুসরণ করে।
  • পরিবর্ধন ও পরিবর্তন নামকরণ করার এবং রেঞ্জ: Mercurial উপলব্ধ সংস্করণ সংখ্যা , সংগ্রহস্থলের স্থানীয় এবং ভিত্তিগুলোকে আপেক্ষিক পুনর্বিবেচনা (টিপ থেকে কাউন্টিং, অর্থাত্ বর্তমান শাখা) এবং এই উপর পুনর্বিবেচনা রেঞ্জ স্থানীয় সংখ্যায়ন; গিট শাখা টিপের সাথে সম্পর্কিত রিভিশনকে নির্দেশ করার একটি উপায় সরবরাহ করে এবং পুনর্বিবেচনা রেঞ্জগুলি টোপোলজিকাল (সংশোধনের গ্রাফের উপর ভিত্তি করে)
  • মার্চুরিয়াল পুনরায় নামকরণ ট্র্যাকিং ব্যবহার করে , যখন গিট পুনরায় নাম সনাক্তকরণ ব্যবহার করে ফাইলের নামগুলি
  • নেটওয়ার্ক: মার্চুরিয়াল এসএসএইচ এবং এইচটিটিপি "স্মার্ট" প্রোটোকল এবং স্ট্যাটিক এইচটিটিপি প্রোটোকল সমর্থন করে; আধুনিক গিট এসএসএইচ, এইচটিটিপি এবং জিআইটি "স্মার্ট" প্রোটোকল এবং এইচটিটিপি (এস) "বোবা" প্রোটোকলকে সমর্থন করে। উভয়েরই অফ-লাইন পরিবহনের জন্য বান্ডিল ফাইলগুলির জন্য সমর্থন রয়েছে।
  • মার্চুরিয়াল এক্সটেনশন (প্লাগইন) এবং প্রতিষ্ঠিত এপিআই ব্যবহার করে; গিটের স্ক্রিপ্টযোগ্যতা এবং প্রতিষ্ঠিত ফর্ম্যাট রয়েছে।

কিছু জিনিস রয়েছে যা গিট থেকে মার্চুরিয়ালের চেয়ে পৃথক, তবে এমন আরও কিছু জিনিস রয়েছে যা এগুলিকে অনুরূপ করে তোলে। দুটি প্রকল্পই একে অপরের কাছ থেকে ধারণা ধার করে। উদাহরণস্বরূপ, মার্চুরিয়ালেhg bisect কমান্ড (পূর্বে দ্বিখণ্ডিত এক্সটেনশন ) git bisectগিটের কমান্ড দ্বারা অনুপ্রাণিত হয়েছিল , যখন ধারণাটি git bundleদ্বারা অনুপ্রাণিত হয়েছিল hg bundle

সংগ্রহস্থল কাঠামো, সংশোধনগুলি সংরক্ষণ করে

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

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

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

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

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

মার্চুরিয়ালে গিট বনাম সংগ্রহস্থলের কাঠামোটির দিকে তাকালে, কেউ দেখতে পাবে যে গিট আরও বেশি object

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

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

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

তথ্যসূত্র: শাখা এবং ট্যাগ

গিট রেফারেন্সে (শাখা, রিমোট-ট্র্যাকিং শাখা এবং ট্যাগগুলি) কমিটের DAG এর বাইরে থাকে (তাদের যেমন করা উচিত)। refs/heads/নেমস্পেসের ( স্থানীয় শাখা ) রেফারেন্সগুলি কমিটগুলি নির্দেশ করে এবং সাধারণত "গিট কমিট" দ্বারা আপডেট হয়; তারা শাখার ডগা (মাথা) দিকে ইঙ্গিত করে, এই কারণেই এই জাতীয় নাম। refs/remotes/<remotename>/নেমস্পেসের রেফারেন্স ( রিমোট ট্র্যাকিং শাখা ) প্রতিশ্রুতিবদ্ধ, দূরবর্তী সংগ্রহস্থলে শাখাগুলি অনুসরণ করে <remotename>এবং "গিট ফেচ" বা সমতুল্য দ্বারা আপডেট করা হয়। refs/tags/নেমস্পেসের ( ট্যাগগুলি ) রেফারেন্সগুলি সাধারণত কমিট (হালকা ওজনের ট্যাগ) বা ট্যাগ অবজেক্টগুলিতে (টীকায়িত এবং স্বাক্ষরিত ট্যাগগুলি) নির্দেশ করে এবং পরিবর্তিত করার উদ্দেশ্যে নয়।

ট্যাগ

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

মার্চুরিয়াল স্থানীয় ট্যাগগুলিকে সমর্থন করে , এতে সঞ্চিত রয়েছে hg/localtags, যা অন্যদের কাছে দৃশ্যমান নয় (এবং অবশ্যই স্থানান্তরযোগ্য নয়)

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

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

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

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

শাখা

গিট স্থানীয় শাখায় (শাখা টিপ, বা শাখা প্রধান) একটি অঙ্গীকারের একটি নামযুক্ত রেফারেন্স, যেখানে কেউ নতুন কমিট বাড়তে পারে। শাখাটি বিকাশের সক্রিয় লাইনকেও বোঝাতে পারে, অর্থাত্ শাখার ডগা থেকে সমস্ত কমে যাওয়া পৌঁছে যায়। স্থানীয় শাখাগুলি refs/heads/নেমস্পেসে থাকে, সুতরাং যেমন 'মাস্টার' শাখার পুরোপুরি যোগ্যতাসম্পন্ন নাম 'রেফ / হেড / মাস্টার'।

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

মার্চুরিয়ালে বেনামে শাখা রয়েছে (শাখা প্রধান), এবং বুকমার্কগুলি ব্যবহার করতে পারেন ( বুকমার্ক এক্সটেনশনের মাধ্যমে )। এই ধরনের বুকমার্ক শাখাগুলি খাঁটি স্থানীয়, এবং সেইগুলি নামগুলি (সংস্করণ 1.6 অবধি) মার্চুরিয়াল ব্যবহার করে স্থানান্তরযোগ্য নয়। .hg/bookmarksদূরবর্তী সংগ্রহস্থলে ফাইলটি অনুলিপি করতে আপনি rsync বা scp ব্যবহার করতে পারেন । আপনি hg id -r <bookmark> <url>বুকমার্কের বর্তমান টিপটির সংশোধন আইডিটি পেতে ব্যবহার করতে পারেন।

যেহেতু 1.6 বুকমার্কগুলি ধাক্কা / টানানো যায়। BookmarksExtension পৃষ্ঠায় একটি অধ্যায় আছে রিমোট সংগ্রহস্থলগুলির সাথে ওয়ার্কিং । পার্থক্য রয়েছে যে মার্চুরিয়াল বুকমার্কের নামগুলি বিশ্বব্যাপী , তবে গিটে 'রিমোট' সংজ্ঞাটিও দূরবর্তী সংগ্রহস্থলের নাম থেকে স্থানীয় দূরবর্তী ট্র্যাকিং শাখার নামগুলির সাথে শাখার নামগুলি ম্যাপিংয়ের বর্ণনা দেয় ; উদাহরণস্বরূপ refs/heads/*:refs/remotes/origin/*ম্যাপিংয়ের অর্থ হল যে কেউ 'আদি / মাস্টার' রিমোট-ট্র্যাকিং শাখায় ('রিফ / রিমোটস / উত্স / মাস্টার') রিমোট রিপোজিটরিতে 'মাস্টার' শাখা ('রেফ / মাথা / মাস্টার') এর স্থিতি খুঁজে পাবে।

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

মার্কুরিয়ালের "নামযুক্ত শাখাগুলি" আমার মতে পরিবর্তে কমিট লেবেল বলা উচিত , কারণ এটি সেগুলি। এমন কিছু পরিস্থিতি রয়েছে যেখানে "নামী শাখা" একাধিক টিপস থাকতে পারে (একাধিক নিঃসন্তান প্রতিশ্রুতি), এবং সংশোধনের গ্রাফের কয়েকটি বিচ্ছিন্ন অংশও থাকতে পারে।

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

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

ঠেলাঠেলি করে শাখা

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

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

ডিফল্টরূপে ( push.defaultকনফিগারেশন ভেরিয়েবলের সাপেক্ষে ) "গিট পুশ" বা "গিট পুশ < রিমোট >" গিট মেলানো শাখাগুলি ধাক্কা দেবে , অর্থাত্ কেবল সেই স্থানীয় শাখাগুলির সমতুল্য রয়েছে যেগুলি ইতিমধ্যে আপনি রিমোট রিপোজিটরিতে উপস্থিত করেন যার মধ্যে আপনি ধাক্কা দেন। সমস্ত শাখাগুলি--all ধাক্কা দেওয়ার জন্য আপনি গিট-পুশ ("গিট পুশ - সমস্ত ") বিকল্প ব্যবহার করতে পারেন , প্রদত্ত একক শাখাকে ধাক্কা দিতে আপনি "গিট পুশ < রিমোট > < শাখা >" ব্যবহার করতে পারেন এবং আপনি "গিট পুশ <ব্যবহার করতে পারেন রিমোট > হেড " বর্তমান শাখাকে ধাক্কা দিতে ।

উপরের সমস্ত অনুমান করে যে গিট কনফিগার করা হয়নি যা কোন শাখাটি remote.<remotename>.push কনফিগারেশন ভেরিয়েবলের মাধ্যমে চাপতে হবে।

আনতে শাখা

নোট: এখানে আমি গীত পরিভাষা যেখানে "আনা" অর্থ দূরবর্তী সংগ্রহস্থল থেকে পরিবর্তন ডাউনলোড করার ব্যবহার ছাড়া স্থানীয় কাজের সঙ্গে যারা পরিবর্তন একীভূত। এটি " git fetch" এবং " hg pull" যা করে।

যদি আমি এটি সঠিকভাবে বুঝতে পারি তবে ডিফল্টরূপে মার্কুরিয়াল দূরবর্তী সংগ্রহস্থল থেকে সমস্ত মাথা নিয়ে আসে তবে আপনি " hg pull --rev <rev> <url>" বা " hg pull <url>#<rev>" মাধ্যমে একটি শাখা পেতে শাখাটি নির্দিষ্ট করতে পারেন । আপনি <পুনরায়> পুনর্বিবেচনা শনাক্তকারী, "নামযুক্ত শাখা" নাম (চ্যানেলজ এমবেড করা শাখা) বা বুকমার্কের নাম ব্যবহার করে নির্দিষ্ট করতে পারেন। বুকমার্ক নাম তবে (অন্তত বর্তমানে) স্থানান্তরিত হয় না। আপনার প্রাপ্ত সমস্ত "নামযুক্ত শাখা" সংশোধনগুলি স্থানান্তরিত হওয়ার অন্তর্ভুক্ত। "এইচজি পুল" শাখার টিপস সংরক্ষণ করে যা এটি বেনামে, নামবিহীন প্রধান হিসাবে নিয়ে আসে।

গিটে ডিফল্টরূপে ("গিট ক্লোন" দ্বারা নির্মিত 'উত্সের' জন্য রিমোট এবং "গিট রিমোট অ্যাড" ব্যবহার করে তৈরি করা রিমোটগুলির জন্য) " git fetch" (বা " git fetch <remote>") রিমোট রিপোজিটরি ( নামস্থান থেকে ) থেকে সমস্ত শাখা পেয়ে থাকে refs/heads/এবং এগুলিতে সংরক্ষণ করে refs/remotes/নামস্থান। এর অর্থ উদাহরণস্বরূপ যে রিমোট 'উত্স'-এ' মাস্টার '(পুরো নাম:' রেফ / মাথা / মাস্টার ') নামক শাখাটি' উত্স / মাস্টার ' রিমোট-ট্র্যাকিং শাখা (পুরো নাম:' রেফ / রিমোটের / উৎপত্তি / মাস্টার ')।

আপনি গিটের মাধ্যমে একক শাখা আনতে পারেন git fetch <remote> <branch>- গিট FETCH_HEAD এ অনুরোধ করা শাখা (এস) সংরক্ষণ করবে যা মার্চুরিয়াল নামবিহীন শিরোনামগুলির অনুরূপ।

এগুলি শক্তিশালী রেফস্পেক গিট সিনট্যাক্সের ডিফল্ট ক্ষেত্রেগুলির উদাহরণগুলি : রেফস্পেকগুলির সাহায্যে আপনি কোন শাখাটি আনতে চান এবং কোনটি সংরক্ষণ করতে হবে তা কনফিগার করতে পারেন এবং / অথবা কনফিগার করতে পারেন। উদাহরণস্বরূপ ডিফল্ট "সমস্ত শাখাগুলি আনুন" কেসটি '+ রেফ / হেড / *: রেফস / রিমোটস / অরিজিন / *' ওয়াইল্ডকার্ড রেফস্পেক দ্বারা প্রতিনিধিত্ব করা হয় এবং 'রেফ / হেড / <ব্র্যাঞ্চ>:' এর জন্য "একক শাখা আনুন" । রেফস্পেকগুলি স্থানীয় রেফসির নামগুলিতে রিমোট রিপোজিটরিতে শাখার নামগুলি (রেফ) ব্যবহার করতে ব্যবহৃত হয়। তবে গিটের সাথে কার্যকরভাবে কাজ করতে সক্ষম হওয়ার জন্য আপনার রেফস্পেকগুলি সম্পর্কে (অনেক বেশি) জেনে রাখা দরকার না (মূলত "গিট রিমোট" কমান্ডকে ধন্যবাদ)।

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

মার্কুরিয়াল এর "বুকমার্ক শাখা" বর্তমানে মূল বিতরণ ব্যবস্থার অভাব রয়েছে।

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

নামকরণ সংশোধন

গিটে নামকরণের বিভিন্ন উপায় রয়েছে (যেমন গিট রেভ-পার্স ম্যানপেজে বর্ণিত ):

  • সম্পূর্ণ SHA1 অবজেক্টের নাম (40-বাইট হেক্সাডেসিমেল স্ট্রিং), বা স্টোরের মধ্যে স্টোর
  • একটি প্রতীকী রেফ নাম, যেমন 'মাস্টার' ('মাস্টার' শাখার উল্লেখ করে), বা 'ভি 1.5.0' (ট্যাগকে উল্লেখ করে), বা 'উত্স / পরবর্তী' (রিমোট ট্র্যাকিং শাখার উল্লেখ)
  • ^পুনর্বিবেচনা প্যারামিটারের প্রত্যয় অর্থ কমিট অবজেক্টের প্রথম পিতা বা মাতা, ^nমানে মার্জ কমিটের পিতামাতা। ~nপুনর্বিবেচনা প্যারামিটারের প্রত্যয়টির অর্থ সরাসরি প্রথম-পিতামাতার লাইনে একটি কমিটের পূর্বসূরি- প্রতীকী রেফারেন্স থেকে অনুসরণ করে সংশোধন স্পেসিফায়ার গঠনের জন্য এই প্রত্যয়গুলি একত্রিত করা যেতে পারে, যেমন 'পু ~ 3 ^ 2 ~ 3'
  • "গিট বর্ণনা" এর আউটপুট, অর্থাত্ নিকটতম ট্যাগ, ড্যাশ এবং একটি সংখ্যক কমিটের পরে বিকল্প, তারপরে একটি ড্যাশ, একটি 'জি', এবং একটি সংক্ষিপ্ত বস্তুর নাম, উদাহরণস্বরূপ 'v1.6.5.1-75- g5bf8097 '।

এখানে রিফ্লোগ জড়িত সংশোধন স্পেসিফায়ারও রয়েছে, এখানে উল্লেখ করা হয়নি। প্রতিটি বস্তুকে গিতে, এটি কমিট, ট্যাগ, ট্রি বা ব্লব এর SHA-1 সনাক্তকারী থাকে; বিশেষ সংশ্লেষ যেমন যেমন 'পরবর্তী: ডকুমেন্টেশন' বা 'পরবর্তী: পুনর্নির্মাণ' নির্দিষ্ট সংশোধনীতে গাছ (ডিরেক্টরি) বা ব্লব (ফাইলের বিষয়বস্তু) উল্লেখ করতে।

মার্চুরিয়ালের বিভিন্ন নামকরণের বিভিন্ন উপায় রয়েছে (উদাহরণস্বরূপ, এইচজি ম্যানপেজে বর্ণিত ):

  • একটি সরল পূর্ণসংখ্যাকে একটি সংশোধন নম্বর হিসাবে গণ্য করা হয়। একটি মনে রাখতে হবে যে সংশোধন নম্বরগুলি প্রদত্ত ভান্ডারগুলিতে স্থানীয় ; অন্যান্য সংগ্রহস্থলে এগুলি আলাদা হতে পারে।
  • Gণাত্মক পূর্ণসংখ্যার টিপটি ক্রমানুসারে অফসেট হিসাবে গণ্য করা হয়, -1 টিপটিকে চিহ্নিত করা, -2 টিপটির পূর্বে সংশোধনকে চিহ্নিত করা এবং এর আগেও। তারা সংগ্রহস্থল স্থানীয়
  • একটি অনন্য রিভিশন সনাক্তকারী (40-অঙ্কের হেক্সাডেসিমাল স্ট্রিং) বা এর অনন্য উপসর্গ।
  • একটি ট্যাগের নাম (প্রদত্ত সংশোধনের সাথে সম্পর্কিত প্রতীকী নাম), বা একটি বুকমার্কের নাম (এক্সটেনশন সহ: প্রদত্ত মাথার সাথে প্রতীকী নাম, ভাণ্ডার থেকে স্থানীয়), বা একটি "নামযুক্ত শাখা" (কমিট লেবেল; "নামকরণ করা শাখা" দ্বারা প্রদত্ত সংশোধন) প্রদত্ত প্রতিশ্রুতিবদ্ধ লেবেলযুক্ত সমস্ত কমিটের টিপ (নিঃসন্তান প্রতিশ্রুতি), এর মধ্যে একাধিক টিপ থাকলে সবচেয়ে বড় সংশোধন নম্বর সহ)
  • সংরক্ষিত নাম "টিপ" একটি বিশেষ ট্যাগ যা সর্বদা সাম্প্রতিক সংস্করণটি সনাক্ত করে।
  • সংরক্ষিত নাম "নাল" নাল সংশোধন নির্দেশ করে।
  • সংরক্ষিত নাম "।" কাজের ডিরেক্টরি পিতামাতাকে নির্দেশ করে।

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

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

আরও দেখুন: এলিয়াদের ব্লগে (নতুনদের) বিভিন্ন ধরণের পুনর্বিবেচনার স্পেসিফায়ার নিবন্ধ।

ব্যক্তিগত মতামত: আমি মনে করি যে সংশোধন সংখ্যাগুলি ওভাররেটেড হয়েছে (কমপক্ষে বিতরণকৃত বিকাশ এবং / অথবা ননলাইনার / শাখা ইতিহাসের জন্য)। প্রথমত, বিতরণ করা সংস্করণ নিয়ন্ত্রণ ব্যবস্থার জন্য তাদের হয় স্থানীয়ভাবে সংগ্রহস্থল হতে হবে, বা একটি কেন্দ্রীয় সংস্থানকারী কর্তৃপক্ষ হিসাবে কোনও বিশেষ উপায়ে কিছু সংগ্রহস্থল চিকিত্সার প্রয়োজন। দ্বিতীয়ত, দীর্ঘতর ইতিহাস সহ বৃহত্তর প্রকল্পগুলিতে 5 টি সংখ্যার সংশোধন থাকতে পারে যাতে তারা 6-7 অক্ষর সংশোধন শনাক্তকারীদের সংক্ষিপ্ত করে কেবলমাত্র সামান্য সুবিধা দেয় এবং সংশোধনগুলি কেবলমাত্র আংশিকভাবে অর্ডার করা হয় (তবে আমি এখানে বলতে চাইছি) n এবং n + 1 সংশোধনগুলির পিতা বা মাতা হওয়ার দরকার নেই)।

সংশোধন ব্যাপ্তি

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

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

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

গীটের A...Bসংশোধনগুলির প্রতিসাম্যগত পার্থক্যের জন্য স্বরলিপিও রয়েছে ; এর অর্থ A B --not $(git merge-base A B), যার অর্থ A বা B উভয় থেকেই পৌঁছনীয়, তবে উভয়টিই (সাধারণ পূর্বপুরুষদের কাছ থেকে পৌঁছনীয়) এর থেকে সমস্ত প্রেরণাকে পারা যায় exc

Renames

মার্চুরিয়াল ফাইলের নামগুলি মোকাবেলায় পুনরায় নামকরণ ট্র্যাকিং ব্যবহার করে । এর অর্থ হ'ল কোনও ফাইলের নাম বদলে দেওয়া হয়েছিল এমন তথ্য কমিটের সময় সংরক্ষণ করা হয়; মার্চুরিয়ালে এই তথ্যটি ফাইললগ (ফাইল রেভলগ) মেটাডেটাতে "বর্ধিত ডিফ " আকারে সংরক্ষণ করা হয় । এর পরিণতি হ'ল আপনাকে hg rename/ hg mv... ব্যবহার করতে হবে বা hg addremoveঅনুরূপতা ভিত্তিক পুনরায় নাম সনাক্তকরণ করতে আপনাকে চালনা করতে হবে।

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

গিট এবং মার্কিউরিয়াল উভয়েরই --followকোনও একক ফাইলের ইতিহাস দেখানোর সময় পুনরায় নামগুলি অনুসরণ করতে বিকল্প ব্যবহার করতে হবে। git blame/ এ / তে কোনও ফাইলের লাইন-ভিত্তিক ইতিহাস দেখানোর সময় উভয়ই নাম পরিবর্তন করতে পারেন hg annotate

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

নেটওয়ার্ক প্রোটোকল

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

ম্যাসুরিয়াল সমর্থন এসএসএইচ এবং এইচটিটিপি প্রোটোকলের মাধ্যমে আনতে এবং ঠেলাঠেলি করে। এসএসএইচের জন্য গন্তব্য মেশিনে একটি অ্যাক্সেসযোগ্য শেল অ্যাকাউন্ট এবং এইচজি ইনস্টল করা / উপলব্ধ একটি অনুলিপি প্রয়োজন। এইচটিটিপি অ্যাক্সেসের জন্য hg-serveবা মার্চুরিয়াল সিজিআই স্ক্রিপ্ট চলমান প্রয়োজন, এবং মার্চুরিয়াল সার্ভার মেশিনে ইনস্টল করা প্রয়োজন।

গিট দূরবর্তী সংগ্রহস্থল অ্যাক্সেস করতে ব্যবহৃত দুটি ধরণের প্রোটোকল সমর্থন করে:

  • "স্মার্ট" প্রোটোকলগুলি , যার মধ্যে এসএসএইচ এবং কাস্টম গিট: // প্রোটোকল (বাই git-daemon) এর মাধ্যমে অ্যাক্সেস অন্তর্ভুক্ত রয়েছে, যা সার্ভারে গিট ইনস্টল করা প্রয়োজন। এই প্রোটোকলগুলির মধ্যে এক্সচেঞ্জটি ক্লায়েন্ট এবং সার্ভার নিয়ে থাকে যেগুলি কী কী বস্তুগুলিতে সাধারণ তা নিয়ে আলোচনা করে এবং তারপরে একটি প্যাকফিল উত্পাদন এবং প্রেরণ করে। আধুনিক গিট "স্মার্ট" এইচটিটিপি প্রোটোকলের জন্য সমর্থন অন্তর্ভুক্ত করে।
  • "বোবা" প্রোটোকল , যার মধ্যে HTTP এবং FTP (কেবল আনার জন্য) এবং HTTPS (ওয়েবডিএভি দিয়ে চাপ দেওয়ার জন্য) অন্তর্ভুক্ত রয়েছে, সার্ভারে ইনস্টল করা গিটের প্রয়োজন নেই, তবে তাদের প্রয়োজন যে সংগ্রহস্থল দ্বারা উত্পন্ন অতিরিক্ত তথ্য থাকে git update-server-info(সাধারণত একটি হুক থেকে চালানো হয়) )। বিনিময়টিতে ক্লায়েন্টকে কমিট চেইন হাঁটা এবং আলগা জিনিসগুলি এবং প্যাকফিলগুলি প্রয়োজনীয় হিসাবে ডাউনলোড করা থাকে। ক্ষতিটি হ'ল এটি কঠোরভাবে প্রয়োজনীয়তার চেয়ে বেশি ডাউনলোড করে (যেমন কোনও একক প্যাকফাইলে যখন কেবল কয়েকটি সংশোধনী আনা হয় তখন এটি সম্পূর্ণ ডাউনলোড হয়ে যায়), এবং এটি শেষ করতে অনেক সংযোগের প্রয়োজন হতে পারে।

প্রসারিত হচ্ছে: স্ক্রিপ্টিবিলিটি বনাম এক্সটেনশন (প্লাগইন)

পারফরম্যান্সের জন্য সিটিতে কিছু কোর কোড লেখা মাইক্রিয়াল পাইথনে প্রয়োগ করা হয় । এটি অতিরিক্ত বৈশিষ্ট্য যুক্ত করার উপায় হিসাবে এক্সটেনশনগুলি (প্লাগইন) লেখার জন্য এপিআই সরবরাহ করে। "বুকমার্ক শাখা" বা পুনর্বিবেচনার স্বাক্ষর করার মতো কিছু কার্যকারিতা মার্চুরিয়ালের সাথে বিতরণকৃত এক্সটেনশনে সরবরাহ করা হয় এবং এটিকে চালু করা প্রয়োজন।

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

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


টি এল; ডিআর


32
যা যুক্ত করা যায় তা হ'ল এইচজি ইতিহাসের পুনর্লিখনকে নিরুৎসাহিত করার জন্য খুব কঠোর চেষ্টা করে (এটি কেবল এক্সটেনশানগুলি দ্বারা করা যেতে পারে: এমকিউ, হেসটেডিট, রিবেস), যদিও গিট এটি বাইরে-বাইরে করে (এবং এটি সম্প্রদায়ের অংশের মতো দেখাচ্ছে) এমনকি এটি উত্সাহিত)।
টনফা

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

5
@ জাকুব: নামযুক্ত শাখা এমন কিছু যা গিটের মধ্যে নেই exist এটি কেবলমাত্র সিএসটি বর্ণনার একটি ক্ষেত্র (এবং এটি ইতিহাসের অংশ, সুতরাং আপনি হ্যাশ ইত্যাদির পরিবর্তন না করলে এটি পরিবর্তনযোগ্য)। গিট শাখার মতো কিছু হ'ল বুকমার্ক ("নামযুক্ত মাথা") তবে সেগুলি বর্তমানে দূরবর্তী স্থানান্তরযোগ্য নয় (টানানোর সময় আপনি দূরবর্তী বুকমার্কগুলি আমদানি করেন না)। stevelosh.com/blog/entry/2009/8/30/… এটি খুব ভালভাবে ব্যাখ্যা করে।
টনফা

28
"মার্চুরিয়াল মূলত সংগ্রহস্থল কর্মপ্রবাহের জন্য কেবল একটি শাখা সমর্থন করে এবং এটি দেখায়।" আহ, না। মার্চুরিয়াল নামের মূল শাখাগুলি সমর্থন করে না , তবে আপনি সর্বদা একক রেপোতে আপনার হৃদয় যতটা বেনামে থাকতে চান তেমন বেনামে শাখা রাখতে সক্ষম হয়েছেন। গিটের সাথে এটির তুলনা করুন, যা বেনামে শাখা প্রশস্ত করে একটি বিশাল ব্যথা করে। আপনি প্রায় কাছাকাছি আছে আপনার কাজ সম্পন্ন কিছু পেতে (এবং আপনার কাজ আবর্জনা সংগ্রহ থাকার এড়াতে) চান তাহলে প্রতি সামান্য শাখা জন্য একটি নাম মনে।
স্টিভ লশ

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

57

আমি মনে করি আপনি এই দুটি ভিডিও হ্যাচ করে এই সিস্টেমগুলি কী রকম বা কী আলাদা তার একটি অনুভূতি পেতে পারেন:

গীত উপর লিনাস টোরভাল্ডস ( http://www.youtube.com/watch?v=4XpnKHJAok8 )
Mercurial উপর ব্রায়ান ও'সুলিভান ( http://www.youtube.com/watch?v=JExtkqzEoHY )

উভয়ই ডিজাইনের ক্ষেত্রে খুব মিল তবে বাস্তবায়নের ক্ষেত্রে খুব আলাদা।

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

তারা আরও বলেছে যে এইচটিটিপি-র চেয়ে গিটটি ধীর গতিতে রয়েছে তবে এর নিজস্ব নেটওয়ার্ক প্রোটোকল এবং সার্ভার রয়েছে।

গিট মার্কুরিয়ালের চেয়ে এসভিএন পুরু ক্লায়েন্ট হিসাবে আরও ভাল কাজ করে। আপনি একটি এসভিএন সার্ভারের বিরুদ্ধে টানতে এবং ঠেলাতে পারেন। এই কার্যকারিতাটি এখনও মার্চুরিয়ালে বিকাশাধীন

মার্কুরিয়াল এবং গিট উভয়েরই খুব সুন্দর ওয়েব হোস্টিং সমাধান উপলব্ধ রয়েছে (বিটবকেট এবং গিটহাব) তবে গুগল কোড কেবল মার্কুরিয়ালকেই সমর্থন করে। যাইহোক, কোনটি সমর্থন করবেন সে সিদ্ধান্ত নেওয়ার জন্য তারা মার্কুরিয়াল এবং গিতের একটি খুব বিশদ তুলনা করেছেন ( http://code.google.com/p/support/wiki/DVCSAnalysis )। এটিতে অনেক ভাল তথ্য রয়েছে।


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

11
ডাস্টিন, সম্ভবত "গিট ইজি, এইচজি এত বেশি নয়" কেসের তালিকাবদ্ধ করুন?
গ্রেগ লিন্ড

1
@ Knittl না এটি হয় না। মূলত কারণ গিটে একটি স্মার্ট HTTP প্রোটোকলের অভাব হওয়ায় এটি তাদের স্থাপন করা তাদের জন্য কষ্টকর হবে (গুগলের বেশিরভাগ ফ্রন্ট-এন্ডগুলি এইচটিপি-ভিত্তিক)।
টনফা

2
@ টোনফা: গিতের জন্য স্মার্ট এইচটিটিপি প্রোটোকলটি বর্তমানে বিকাশ করা হচ্ছে (যেমন: গিট মেলিং তালিকায় প্যাচ রয়েছে এবং সেগুলি 'পু' = গিট.git রিপোজিটরিতে প্রস্তাবিত আপডেট শাখায় রয়েছে)।
জাকুব নরবস্কি

4
এখন পর্যন্ত গুগল কোড গিটকেও সমর্থন করে।
আন্দ্রেজ কিরেজেŭ

30

আমি কিছুক্ষণ আগে মার্চুরিয়ালের ব্রাঞ্চিং মডেলগুলি সম্পর্কে একটি ব্লগ এন্ট্রি লিখেছি এবং গিটের শাখাগুলির মডেলের তুলনা অন্তর্ভুক্ত করেছি। সম্ভবত আপনি এটি আকর্ষণীয় পাবেন: http://stevelosh.com/blog/entry/2009/8/30/a-guide-to-branching-in-mercurial/


@ স্টিভ লশ: আমি এই ব্লগ এন্ট্রি সম্পর্কে মন্তব্য করতে চেয়েছি (নামবিহীন শাখা ওরফে বিচ্ছিন্ন হেড সম্পর্কে, এবং গিট-ফ্যাচ সম্পর্কে সমস্ত শাখা আনয়ন সম্পর্কে, একটি নয়) তবে আমি ৫০০ টি সার্ভার ত্রুটি পেয়েছি।
জাকুব নরবস্কি

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

@ স্টিভ লশ: একটি তথ্যের জন্য ধন্যবাদ, আমার নাম "একত্রীকরণ" করার পরে আমি মন্তব্য পোস্ট করতে সক্ষম হয়েছি। মার্চুরিয়ালে শাখা প্রশস্ত করার খুব ভাল বর্ণনা (তবে আমি এখনও এটি নিকৃষ্ট বলে মনে করি ;-))
জাকুব নরবস্কি

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

25

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

অন্যরা যেমন এখানে নোট করবে, সেখানে প্রচুর এবং প্রচুর ছোট ছোট পার্থক্য রয়েছে। শাখাগুলি সহ জিনিসটি বড় পার্থক্যকারী।



19

কটাক্ষপাত গীত বনাম Mercurial: আরাম দয়া করে প্যাট্রিক থমসন, যেখানে তিনি লিখেছেন দ্বারা ব্লগ পোস্ট:
গীত MacGyver হয় , Mercurial জেমস বন্ড

নোট করুন যে এই ব্লগ পোস্টটি ২০০ 2008 সালের August ই আগস্টের, এবং এসসিএম উভয়েরই অনেক উন্নতি হয়েছে।


11

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

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

মার্চুরিয়ালের দুর্দান্ত ভিজ্যুয়াল স্টুডিও একীকরণ রয়েছে । গতবার আমি যাচাই করেছিলাম, গিটের জন্য প্লাগইন কাজ করছিল তবে অত্যন্ত ধীর ছিল।

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

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


9
মার্চুরিয়াল কোর সি খুব এফওয়াইআইতে লেখা হয়েছে (তবে এটি সম্ভবত গিটের চেয়ে ছোট কোর)।
টনফা

1
আমি কোনও ঝামেলা ছাড়াই উইন্ডোজে গিট-এসএনএন ব্যবহার করি। এটি সাইগউইন ( আপনি যদি আমাকে জিজ্ঞাসা করেন তবে উইন্ডোতে গিট ব্যবহারের একমাত্র সঠিক উপায়) ব্যবহার করছেন। এমএসসিগিতের জন্য কথা বলতে পারে না।
ড্যান মোল্ডিং

@ ড্যান ছাঁচনির্মাণ: হ্যাঁ, আমি এমএসএসজিট নিয়ে সমস্যায় পড়েছি। হয়তো সাইগউইন বন্দরটিতে চেষ্টা করার প্রয়োজন হবে (আমার আগে সাইগউইন ব্যবহারের কিছুটা খারাপ অভিজ্ঞতা ছিল, তাই আমি এড়িয়ে গিয়েছি)। পরামর্শের জন্য ধন্যবাদ!
বৃদ্ধ_জর্জায়

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

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

11

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

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


আপনি কমান্ড লাইন ব্যবহার করতে পছন্দ না করেন, এছাড়াও TortoiseGit আছে। (তবে এটি ইনস্টল করার জন্য এমএসজিগিট প্রয়োজন))
বেন জেমস

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

11

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

╔═════════════════════════════╦════════════════════════════════════════════════════════════════════════════════════════════════╗
║           Git               ║                Mercurial                                                                       ║
╠═════════════════════════════╬════════════════════════════════════════════════════════════════════════════════════════════════╣
║ git pull                    ║ hg pull -u                                                                                     ║
║ git fetch                   ║ hg pull                                                                                        ║
║ git reset --hard            ║ hg up -C                                                                                       ║
║ git revert <commit>         ║ hg backout <cset>                                                                              ║
║ git add <new_file>          ║ hg add <new_file> (Only equivalent when <new_file> is not tracked.)                            ║
║ git add <file>              ║ Not necessary in Mercurial.                                                                    ║
║ git add -i                  ║ hg record                                                                                      ║
║ git commit -a               ║ hg commit                                                                                      ║
║ git commit --amend          ║ hg commit --amend                                                                              ║
║ git blame                   ║ hg blame or hg annotate                                                                        ║
║ git blame -C                ║ (closest equivalent): hg grep --all                                                            ║
║ git bisect                  ║ hg bisect                                                                                      ║
║ git rebase --interactive    ║ hg histedit <base cset> (Requires the HisteditExtension.)                                      ║
║ git stash                   ║ hg shelve (Requires the ShelveExtension or the AtticExtension.)                                ║
║ git merge                   ║ hg merge                                                                                       ║
║ git cherry-pick <commit>    ║ hg graft <cset>                                                                                ║
║ git rebase <upstream>       ║ hg rebase -d <cset> (Requires the RebaseExtension.)                                            ║
║ git format-patch <commits>  ║ hg email -r <csets> (Requires the PatchbombExtension.)                                         ║
║   and git send-mail         ║                                                                                                ║
║ git am <mbox>               ║ hg mimport -m <mbox> (Requires the MboxExtension and the MqExtension. Imports patches to mq.)  ║
║ git checkout HEAD           ║ hg update                                                                                      ║
║ git log -n                  ║ hg log --limit n                                                                               ║
║ git push                    ║ hg push                                                                                        ║
╚═════════════════════════════╩════════════════════════════════════════════════════════════════════════════════════════════════╝

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

আমি এইচজি-তে যা মিস করি তা হ'ল গিতের সাবমডিউল বৈশিষ্ট্য। এইচজির সাবরেপোস রয়েছে তবে এটি ঠিক গিট সাবমডিউল নয়।

দুই প্রায় ইকোসিস্টেম এক পছন্দের প্রভাবিত করতে পারে: গীত আরো জনপ্রিয় হতে হয়েছে (কিন্তু যে তুচ্ছ আছে), গীত হয়েছে GitHub যখন Mercurial হয়েছে BitBucket , Mercurial TortoiseHg যার জন্য আমি গীত জন্য ভাল হিসাবে একটি সমতুল্য দেখিনি হয়েছে।

প্রত্যেকের এর সুবিধা এবং অসুবিধাগুলি রয়েছে যার একটিতেও আপনি হারাবেন না।


8

পরীক্ষা করে দেখুন স্কট Chacon এর পোস্ট যখন ফিরে যায়।

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

গিরিটি পার্কের চেয়ে বেশি বিভ্রান্তিকর নয় এটি কেবল আমার অভিজ্ঞতা নয়। আমি এই বিষয়ে স্কট চকন এর এই ব্লগ পোস্টটি আবার পড়ার পরামর্শ দিই ।


1
মার্চুরিয়াল মডেলটি আসলে প্রায় একই রকম: চেঞ্জলগ পয়েন্টগুলি ফাইল পুনর্বিবেচনাগুলি / ব্লব ... পর্যন্ত সম্পন্ন করে manifest আপনি যদি অন-ডিস্ক ফর্ম্যাটটির তুলনা করে থাকেন তবে আপনি সম্ভবত প্যাকগুলি ফাইলের জন্য অ্যাকাউন্ট করেন নি যা এইচজি থেকে সরল রিগলগ ফর্ম্যাটটির চেয়ে বেশি জটিল explain
টনফা

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

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

ডাস্টিন: হ্যাঁ, ব্যবহারকারীরা প্রায়শই বিভ্রান্ত হয়ে .hgtagsপড়েছেন যে আপনি 1.0 টি সংশোধন করার সময় 1.0 টি ট্যাগটি দেখতে পারবেন না cannot তবে আপনাকে ভিতরে দেখার দরকার নেই .hgtagsএবং আপনি দেখতে পাবেন যে hg tagsএখনও সমস্ত ট্যাগ তালিকাভুক্ত। তদ্ব্যতীত, এই আচরণটি কোনও সংস্করণ নিয়ন্ত্রিত ফাইলে ট্যাগগুলি সঞ্চয় করার একটি সহজ পরিণতি - আবার মডেলটি ধরা সহজ এবং খুব অনুমানযোগ্য
মার্টিন গিজার 11

1
মার্টিন গিসলার আমি যুক্তি দিয়েছিলাম যে মার্চুরিয়ালে ট্যাগগুলির জন্য নিয়ম রয়েছে, কারণ এটি পরিবহনের জন্য সংস্করণ-নিয়ন্ত্রিত ফাইল ব্যবহার করে, ট্যাগগুলিকে অ-সংস্করণযুক্ত করার জন্য বিশেষ নিয়মযুক্ত স্তর সহ, উপলব্ধি করা সহজ anything
জাকুব নারেবস্কি

5

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

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

যাইহোক, গিট এবং মার্কিউরিয়ালের মধ্যে উল্লেখযোগ্য পার্থক্য রয়েছে যা ব্যবহারের ক্ষেত্রে তার নিজস্ব উপসেটের জন্য প্রতিটিকে আরও ভাল করে তোলে।

মার্কুরিয়াল শিখতে সহজ। আমি সেই জায়গায় পৌঁছেছি যেখানে মার্চুরিয়াল ব্যবহারের কয়েক সপ্তাহ পরে আমাকে খুব কমই ডকুমেন্টেশন বা নোটগুলি উল্লেখ করতে হয়েছিল; আমার নোটগুলি এখনও এক বছরের জন্য ব্যবহার করার পরেও গিটের সাথে নিয়মিত উল্লেখ করতে হবে। গিট যথেষ্ট জটিল।

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

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

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

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


4

ডিভিসিএসগুলির সাথে তাদের সম্পূর্ণরূপে সম্পর্কযুক্ত একটি পার্থক্য:

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

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

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

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

(না, আমার উপরে আমার দাবিগুলি ব্যাক আপ করার জন্য ব্যবহারের পরিসংখ্যান নেই) এটি সমস্ত আমার নিজস্ব সাবজেক্টিভিটির উপর ভিত্তি করে)

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