"ব্রাঞ্চিং ফ্রি ইজ" গিটের অর্থ কী?
অন্যান্য সংস্করণ নিয়ন্ত্রণ সিস্টেমের তুলনায় গিটের উল্লেখ করা হলেও আমি এটি অনেক শুনেছি hear
আমার সাথে অন্যদের ( এসভিএন ইত্যাদি) মোকাবিলার সুযোগ (? ) নেই, তাই অন্যের মধ্যে কীভাবে "ব্যয়বহুল" শাখা করা হচ্ছে?
"ব্রাঞ্চিং ফ্রি ইজ" গিটের অর্থ কী?
অন্যান্য সংস্করণ নিয়ন্ত্রণ সিস্টেমের তুলনায় গিটের উল্লেখ করা হলেও আমি এটি অনেক শুনেছি hear
আমার সাথে অন্যদের ( এসভিএন ইত্যাদি) মোকাবিলার সুযোগ (? ) নেই, তাই অন্যের মধ্যে কীভাবে "ব্যয়বহুল" শাখা করা হচ্ছে?
উত্তর:
"ব্রাঞ্চিং গিটে ফ্রি " দাবিটি তথ্যের সরলীকরণ কারণ এটি প্রতি সেচ "ফ্রি" নয়। ফণা অধীন জন্যে আরো একটি সঠিক দাবি বলতে যে শাখাবিন্যাস হবে redonkulously সস্তা পরিবর্তে, কারণ শাখার মূলত করে উল্লেখ আছে । আমি এখানে "সস্তাতা" সংজ্ঞায়িত করি কম ওভারহেড সস্তা হিসাবে।
গিটের কী ধরণের ওভারহেড রয়েছে তা পরীক্ষা করে কেন গিটটি এত "সস্তা" তা খতিয়ে দেখি:
গিট সংগ্রহস্থল, .git
বেশিরভাগই ফাইলগুলির সাথে ডিরেক্টরি থাকে যা মেটাডেটা ব্যবহার করে যা গিট ব্যবহার করে। আপনি যখনই গিটে একটি শাখা তৈরি করেন, উদাহরণস্বরূপ git branch {name_of_branch}
, কয়েকটি জিনিস ঘটে:
.git/refs/heads/{name_of_branch}
.git/logs/refs/heads/{name_of_branch}
এটি মূলত এটি, বেশ কয়েকটি পাঠ্য ফাইল তৈরি করা হয়। আপনি যদি পাঠ্য ফাইল হিসাবে রেফারেন্সটি খোলেন বিষয়বস্তুগুলি শাখাটি নির্দেশ করছে যে প্রতিশ্রুতিবদ্ধতার আইডি-শ হবে be নোট করুন যে ব্রাঞ্চিংয়ের জন্য আপনাকে কোনও কমিট করার প্রয়োজন হয় না কারণ তারা অন্য ধরণের অবজেক্ট। শাখা এবং প্রতিশ্রুতি উভয়ই গিটের মধ্যে "প্রথম শ্রেণির নাগরিক" এবং একটি উপায় হ'ল শাখা থেকে প্রতিশ্রুতিবদ্ধ সম্পর্কটিকে একটি সংমিশ্রণের পরিবর্তে একটি সংহতি হিসাবে ভাবা। যদি আপনি কোনও শাখা অপসারণ করেন তবে কমিটগুলি এখনও "ঝোলা" হিসাবে উপস্থিত থাকবে। যদি আপনি দুর্ঘটনাক্রমে কোনও শাখা মুছে ফেলে থাকেন তবে আপনি সর্বদা শায়ে-আইডিতে ঝুলন্ত বাম দেখতে পাওয়া (এবং যতক্ষণ না গিটটি এখনও কোনও আবর্জনা সংগ্রহ করেনি) সন্ধান করতে git-lost-found
বা git-fsck --lost-found
শাখা-আইডিতে একটি শাখা তৈরি করার চেষ্টা করতে পারে ।
সুতরাং গিট কীভাবে আপনি কোন শাখায় কাজ করছেন তা ট্র্যাক করবে? উত্তরটি .git/HEAD
ফাইলটির সাথে রয়েছে, যা আপনি master
শাখায় থাকলে এই জাতীয় সাজান ।
ref: refs/heads/master
শাখাগুলি স্যুইচ করা সহজভাবে .git/HEAD
ফাইলের রেফারেন্স পরিবর্তন করে এবং তারপরে কমিটে সংজ্ঞায়িত সংখ্যার সাথে আপনার ওয়ার্কস্পেসের বিষয়বস্তু পরিবর্তন করতে এগিয়ে যায়।
ইন Subversion শাখা সংগ্রহস্থলের মধ্যে ভার্চুয়াল ডিরেক্টরি হয় । তাই শাখার সহজতম উপায় হ'ল এটি একটি লাইনারের সাহায্যে দূরবর্তীভাবে করা svn copy {trunk-url} {branch-url} -m "Branched it!"
। এসভিএন যা করবে তা নিম্নলিখিত:
trunk
, একটি লক্ষ্য ডিরেক্টরিতে,আপনি সার্ভারে দূরবর্তী অবস্থান থেকে এই ক্রিয়াটি করতে চাইবেন, কারণ স্থানীয়ভাবে সেই অনুলিপি তৈরি করা একটি রৈখিক-সময় ক্রিয়াকলাপ, ফাইলগুলি অনুলিপি করে এবং সিমলিংক করা রয়েছে। এটি খুব ধীর গতি সম্পন্ন অপারেশন, যেখানে সার্ভারে এটি করা একটি ধ্রুবক সময় অপারেশন। দ্রষ্টব্য যে বিভাজনে শাখা সম্পাদন করার সময়ও, গিটারটি যখন শাখা প্রশাখাগুলি না করে তখন শাখা পরিচালনা করার সময় একটি প্রতিশ্রুতিবদ্ধ হওয়া আবশ্যক , যা মূল পার্থক্য। এটি এক ধরণের ওভারহেড যা এসভিএনকে গিটের তুলনায় সামান্য কম সস্তা করে তোলে।
এসভিএন , অর্থাৎ svn switch
, শাখাগুলি স্যুইচ করার জন্য কমান্ডটি সত্যই svn update
ছদ্মবেশে রয়েছে। ভার্চুয়াল ডিরেক্টরি ধারণার জন্য ধন্যবাদ কমান্ডটি গিটের চেয়ে এসএনএন-তে কিছুটা নমনীয়। আপনার কর্মক্ষেত্রের সাব ডিরেক্টরিগুলি অন্য একটি সংগ্রহস্থল url মিরর করতে স্যুইচ করা যেতে পারে। নিকটতম জিনিসটি ব্যবহার করা হবে git-submodule
তবে এটি ব্যবহার করা শাখা প্রশাখার থেকে শব্দার্থগতভাবে একেবারেই আলাদা। দুর্ভাগ্যক্রমে এটি একটি ডিজাইনের সিদ্ধান্ত যা গিটের তুলনায় এসভিএন-তে কিছুটা ধীরগতির করে দেয় কারণ এটি প্রতিটি ওয়ার্কস্পেস ডিরেক্টরি যা কোন রিমোট-ইউআরএলটি মিরর করছে তা যাচাই করতে হবে। আমার অভিজ্ঞতায়, গিট এসভিএন এর চেয়ে শাখাগুলি স্যুইচ করার পক্ষে দ্রুত।
এসভিএন এর শাখা প্রশস্তকরণ একটি ব্যয় নিয়ে আসে কারণ এটি ফাইলগুলি অনুলিপি করে এবং সর্বদা সর্বজনীনভাবে উপলব্ধ করা দরকার। গিট হিসাবে, উপরে বর্ণিত হিসাবে, শাখাগুলি "কেবলমাত্র রেফারেন্স" এবং এটি আপনার স্থানীয় সংগ্রহস্থলে রাখা যেতে পারে এবং আপনার বিবেচনার জন্য প্রকাশিত হতে পারে। আমার অভিজ্ঞতা তবে এসভিএন এখনও উল্লেখযোগ্যভাবে সস্তা এবং উদাহরণস্বরূপ ক্লিয়ার কেসের চেয়ে বেশি পারফরম্যান্ট।
এটি কেবলমাত্র এমন এক ধাক্কা যে এসভিএন বিকেন্দ্রীভূত নয়। কিছু সোর্স রেপোতে মিরর হিসাবে আপনার একাধিক সংগ্রহস্থল থাকতে পারে তবে একাধিক এসভিএন-সংগ্রহস্থলগুলির পরিবর্তনের পরিবর্তনের সাথে সিঙ্কিং করা সম্ভব নয় কারণ এসভিএন-এর কমিটের জন্য স্বতন্ত্রভাবে শনাক্তকারী নেই (গিটটি হ্যাশ সনাক্তকারী যা কমিটের বিষয়বস্তুর উপর ভিত্তি করে তৈরি হয়েছে)। আমি ব্যক্তিগতভাবে এসভিএন এর উপর দিয়ে গিট ব্যবহার করা শুরু করার কারণটি হ'ল কারণ একটি সংগ্রহস্থল শুরু করা গিটের মধ্যে উল্লেখযোগ্যভাবে সহজ এবং সস্তা । সফ্টওয়্যার কনফিগারেশন পরিচালনার ক্ষেত্রে, প্রকল্পের প্রতিটি বিচ্ছিন্ন অনুলিপি (ক্লোন, কাঁটাচামচ, কর্মক্ষেত্র বা যা কিছু) একটি "শাখা", এবং এই পরিভাষাটি এসভিএন-তে একটি নতুন অনুলিপি তৈরি করা গিতের মতো সস্তা নয়, যেখানে পরবর্তীটি রয়েছে শাখা "অন্তর্নির্মিত"।
অন্য একটি উদাহরণ হিসাবে, এ Mercurial , একটি DVCS যেমন একটু ভিন্ন শুরু আউট শাখাবিন্যাস এবং তৈরি / অন্তক নামে শাখা পৃথক করে প্রয়োজন। তত্পর ডেভেলপারদের উন্নয়ন পরবর্তী বাস্তবায়িত বুকমার্ক অনুকরণমূলক Git এর একই শাখাবিন্যাস মডেল যদিও করতে heads
বলা হয় tips
এবং branches
হয় bookmarks
তত্পর পরিভাষা পরিবর্তে।
This command causes a near-instantaneous commit in the repository, creating a new directory in revision 341. The new directory is a copy of /calc/trunk.
- আপনি স্পষ্টভাবে প্রতিটি ফাইলের একটি অনুলিপি তৈরি না করলেই শাখা তৈরি করা এসভিএন-তে তুচ্ছ।
একটি শাখার আসল ব্যয় এটি মার্জ করে। গিট অন্যান্য কয়েকটি উত্স নিয়ন্ত্রণ সিস্টেমের চেয়ে এটিকে সহজ করে তোলে। স্ট্যাক ওভারফ্লো প্রশ্ন দেখুন কীভাবে এবং / বা কেন গিটে এসভিএন-এর চেয়ে ভাল মার্জ করা হচ্ছে? ।
গিট-এ, একটি শাখা স্থানীয় রেপোতে প্রতিশ্রুতিবদ্ধতার উল্লেখ মাত্র। এটি তৈরি করা খুব সস্তা, কোনও নেটওয়ার্ক নেই। একেবারে বিনামূল্যে নয় (আপনার কাছে একটি কমান্ড টাইপ করতে হবে), তবে অভিশাপ নিকটে।
এসভিএন-তে ব্রাঞ্চিং বিশেষভাবে ব্যয়বহুল নয় - এটি কেবল একটি অনুলিপি, যা খুব সস্তা প্রতিশ্রুতিবদ্ধ। এসভিএন এর একটি কেন্দ্রীয় সংগ্রহস্থল মডেল রয়েছে, সুতরাং এটি একটি নেটওয়ার্ক অ্যাক্সেস, তবে ভয়ঙ্কর নয়।
অন্যদিকে সম্মানিত সিভিএসে, শাখা প্রশস্ত করা খুব ব্যয়বহুল। মূলত, সিভিএস শাখাগুলিতে একটি ট্যাগ যুক্ত করা থাকে, তবে সিভিএসে এর অর্থ হ'ল প্রত্যেকটি ফাইল আক্রান্ত হতে হবে। প্রতিটি ফাইল নতুন ট্যাগ অন্তর্ভুক্ত করতে পুনরায় লিখিত হয়। এটি মারাত্মক ব্যয়বহুল। এবং যদি আপনার ভাণ্ডার বড় হয় তবে এটি মারাত্মকভাবে ধীর হয়। প্রকৃতপক্ষে, আপনি যদি কোনও বড় প্রকল্পে থাকেন তবে এটি এত ধীর যে কিছু লোকেরা যদি শাখাগুলি তৈরি করতে পারে তবে তারা এড়াতে পারে।
এসভিএন এর শাখা প্রশাখা গিটের মতোই নিখরচায়। এটি কেবল খানিকটা বাড়ির রক্ষণাবেক্ষণের তথ্য যা বলে যে শাখাটি কোথায় শুরু হয়, সঞ্চিত ফাইলগুলিতে কোনও পরিবর্তন হয় না। এসভিএন-তে একটি 'অনুলিপি' ইউনিক্স ডিরেক্টরিতে একটি সিমিলিংক যুক্ত করার মতো। মনে রাখবেন যে আপনার কাজের অনুলিপি পরিবর্তন না করা পর্যন্ত এসভিএন শাখার জন্য কোনও নেটওয়ার্ক ট্রিপের প্রয়োজন হবে না (তবে আপনি যদি কোনও সময়ে অফ-লোকাল প্রতিশ্রুতি না দেন তবে এসসিএম থাকার খুব একটা দরকার নেই)।
নোট করুন যে একটি গিট শাখা কিছু গৃহকর্মেরও জড়িত থাকবে - যেমন ট্যাগটি অভ্যন্তরীণভাবে যুক্ত করা - এটি যখন আপনি প্রতিশ্রুতিবদ্ধ তখন কোথাও সংরক্ষণ করতে হবে। এটি মোটেও বড় বিষয় নয়, এ কারণেই এটিকে 'ফ্রি' বলা হয়।
এটি 'ফ্রি' (এই প্রসঙ্গে 'ফ্রি' এর অর্থ আসলে দ্রুত এবং সহজ এবং স্থান গ্রহণ না করা) কারণ কিছু পুরানো সংস্করণ নিয়ন্ত্রণ সিস্টেমে একটি শাখা সেই সময়ে কোডের একটি সম্পূর্ণ অনুলিপি ছিল, তাই শাখাগুলি প্রচুর পরিমাণে গ্রহণ করেছিল স্পেস এবং এর চারপাশে থাকা বিভিন্ন সফটওয়্যারটির সম্পূর্ণ সম্পূর্ণ সম্পূর্ণ সংস্করণ দিয়ে শেষ করা সহজ হয়েছিল, যা পরে ব্যবস্থাপনায় নিয়েছিল। অন্যদের মধ্যে এটি কোডের একটি সম্পূর্ণ অনুলিপি ছিল না তবে প্রতিটি ফাইল এখনও একটি ট্যাগের জন্য সংশোধন করা দরকার তাই ধীর এবং বেদনাদায়ক ('ব্যয়বহুল')।
"ফ্রি / সস্তার / ব্যয়বহুল" এর আরেকটি দিক হ'ল শাখা প্রশস্তকরণের নিম্ন প্রবাহের পরিণতিগুলি মোকাবেলায় বিকাশকারী সংস্থাগুলির ক্ষেত্রে কত ব্যয় হয়; অর্থাৎ শাখা থেকে পরিবর্তনগুলি মার্জ করার প্রক্রিয়া।
এবং এখানে, ডিভিসিএস সিস্টেমগুলিতে গিট এবং মার্কিউরিয়াল এর মতো শাখাগুলি মার্জ করা পুরানো সিস্টেমগুলির তুলনায় সহজ ... কারণ ডিভিসিএস সিস্টেমগুলি গ্রাফের সংস্করণগুলির ইতিহাস ট্র্যাক করার জন্য আরও ভাল কাজ করে; অর্থাত্ যেখানে পূর্বের শাখাটি মার্জ হয়ে গেছে। এটি মার্জগুলিকে আরও নির্ভুল করে তোলে, অপ্রয়োজনীয় দ্বন্দ্ব হ্রাস করে এবং ... জড়িত বিকাশকারীদের জন্য বিষয়গতভাবে "সহজ" বা "কম ভীতিজনক" তৈরি করে তোলে।