এসভিএন এবং গিতের মধ্যে শাখার পার্থক্য বোঝা


44

আমি এসভিএন এর একজন ব্যবহারকারী এবং এখন আমি গিট শিখছি।

এসভিএন-তে আমি সাধারণত আমার স্থানীয় মেশিনে একটি রেপো চেকআউট করি, এতে আমার প্রকল্পের সমস্ত শাখা থাকে এবং আমি আমার শাখার জন্য ফোল্ডারটি নির্বাচন করতে আগ্রহী এবং সেখানে কাজ করি।

আমি গিট ব্যবহার করে একটি পার্থক্য দেখতে পাচ্ছি।

বর্তমানে আমি একটি রেপো ক্লোন করছি এবং গিটক ব্যবহার করে একটি নির্দিষ্ট শাখা ক্লোন করছি।

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

গিট ব্যবহার করে আমার স্থানীয় সংগ্রহস্থলের সমস্ত শাখা দেখার সহজ উপায় আমি খুঁজে পাচ্ছি না।

  • আমি জানতে চাইছি যে আমি বর্ণিত গিট প্রক্রিয়াটি "স্ট্যান্ডার্ড" এবং কিছু সঠিক কিনা বা আমি কিছু অনুপস্থিত।

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

  • গিটে রেপো থেকে ক্লোন করা ব্রাঙ্কের অন্তর্ভুক্ত ফোল্ডারগুলি তৈরি করার জন্য একটি প্রস্তাবিত নাম কনভেনশন কী myproject-branchname?


8
আকর্ষণীয় - সাধারণত এসভিএন এর সাহায্যে আপনি কেবল যে ট্রাঙ্ক বা শাখাটির উপর কাজ করছেন তা কেবলমাত্র চেকআউট করতেন তবে আপনি কী বোঝাতে চেয়েছিলেন তা আমি বুঝতে পারি।
হুরুসকোল

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

6
git cloneএটির মতো আরও বেশি svnadmin hotcopyবা svnrdump+ এর svnadmin loadমতো svn checkout। সঙ্গে git, আপনি থেকে বিট এবং টুকরা অনুরোধ করবেন না সংগ্রহস্থলের; আপনি সম্পূর্ণ সংগ্রহস্থলটি অনুলিপি করুন এবং স্থানীয়ভাবে এটির সাথে কাজ করুন, পরিবর্তনগুলি যখন "উত্স" সংগ্রহস্থলীতে ফিরে আসে এবং আপনি যদি এটির মতো অনুভব করেন। গিট এবং সাবভার্সন উত্স নিয়ন্ত্রণের জন্য দুটি সম্পূর্ণ ভিন্ন মডেল ব্যবহার করে।
চিপনার

1
হটফিক্স জিনিসটি সম্পর্কে, git-flow
ব্যবহারটি

5
@ লেজিবেজার এটি উন্নয়নের সুবিধাগুলি সরবরাহ করে এবং মান সরবরাহ করে তবে এটি কার্যপ্রবাহ ভাঙ্গা নয়। শাখা ব্যবহার করার এক সঠিক উপায় নেই।
ডায়েটবুদ্ধ

উত্তর:


67

আমি এসভিএন এর একজন ব্যবহারকারী এবং এখন আমি জিআইটি শিখছি।

গ্যাং স্বাগতম!

এসভিএন পুনরায় শিক্ষা

এসভিএন-তে আমি সাধারণত [...]

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

জোল স্পলস্কির (স্ট্যাক এক্সচেঞ্জের অন্যতম প্রতিষ্ঠাতা) http://hginit.com ( আর্কাইভ.অর্গ দেখুন ) গিরির জন্য নয়, পার্কের জন্য একটি টিউটোরিয়াল, তবে এটি শূন্যতম অধ্যায়, "সাবভারশন রি-एजुकেশন" হ'ল থেকে SVN থেকে দূরে সুইচিং মানুষের জন্য দরকারী কোন , বিতরণ সংস্করণ নিয়ন্ত্রণ ব্যবস্থা যেমন আপনি বলে কি SVN ধারণা আপনি (অস্থায়ীভাবে) আছে উন -learn (বা stashদূরে , যেমন গীত ব্যবহারকারীদের বলতে পারে) প্রায় আপনার মাথা বিতরণ সক্ষম মোড়ানো হতে সংস্করণ নিয়ন্ত্রণ সিস্টেম ধারণা এবং তাদের সাথে কাজ করার জন্য প্রতিষ্ঠিত আইডিয়োমেটিক ওয়ার্কফ্লো।

সুতরাং আপনি সেই শূন্যতম অধ্যায়টি পড়তে পারেন এবং বেশিরভাগই কেবল "গিট" এর সাথে "পারদর্শী" শব্দটি প্রতিস্থাপন করুন এবং এর দ্বারা নিজেকে এবং আপনার মনকে গিটের জন্য সঠিকভাবে প্রস্তুত করুন।

ফাইন প্রিন্ট

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

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

এসভিএন-তে সমস্ত কিছুই ডিরেক্টরি হয় (তবে আপনার অবশ্যই এটির মতো আচরণ করা উচিত নয়)

তবে আমি আপনাকে বাধা দিচ্ছি। আমরা বলতে ছিলাম?

এসভিএন-তে আমি সাধারণত আমার স্থানীয় মেশিনে একটি রেপো চেকআউট করি, এতে আমার প্রকল্পের সমস্ত শাখা থাকে এবং আমি আমার শাখার জন্য ফোল্ডারটি নির্বাচন করতে আগ্রহী এবং সেখানে কাজ করি।

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

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

গিটে, কেবল ডিরেক্টরিগুলি ডিরেক্টরি হয়

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

তবে সংগ্রহস্থল ফোল্ডারে আপনি যে গোপনীয় ফাইলগুলি দেখতে পাচ্ছেন সেগুলি কী কী?

আপনি যখন git cloneকোনও ভাণ্ডার হন, গিট বেশ কিছু কাজ করে। মোটামুটিভাবে:

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

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

গিট শাখা এবং গিট শাখাগুলি সাথে আলাপচারিতা

বর্তমানে আমি একটি রেপো ক্লোন করছি এবং গিটক ব্যবহার করে একটি নির্দিষ্ট শাখা ক্লোন করছি।

আমার প্রাপ্ত সংস্করণটি gitkসংগ্রহস্থলগুলি ক্লোন করতে পারে না। এটি কেবল রেপো ইতিহাস দেখতে পারে এবং শাখা তৈরি করতে পারে এবং শাখাগুলি পরীক্ষা করতে পারে। এছাড়াও, কোনও শাখা "ক্লোনিং" নেই। আপনি কেবল সংগ্রহস্থলগুলি ক্লোন করতে পারেন।

আপনি কি বোঝাতে চেয়েছিলেন যে আপনি কোনও রেপো ক্লোন করে ব্যবহার করেছেন git clone ...এবং তারপরে, ব্যবহার করে gitk, একটি শাখা পরীক্ষা করে দেখুন ?

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

[...]

  • আমি জানাতে চাই যে আমার বর্ণিত গিট প্রক্রিয়াটি "স্ট্যান্ডার্ড" এবং কিছু সঠিক কিনা [...]

হ্যাঁ, এটি বেশ মানক:

  • ব্যবহার করে একটি সংগ্রহস্থল ক্লোন করুন git clone ...
  • git checkout ...গ্রাফিকাল সরঞ্জামের মতো বা ব্যবহার করে আপনি যে শাখায় কাজ করতে চান তা দেখুনgikt

জিআইটি ব্যবহার করে আমার স্থানীয় সংগ্রহস্থলের সমস্ত শাখা দেখার সহজ উপায় আমি খুঁজে পাচ্ছি না।

  • [...] বা আমি মিস করছি মিসেস।

হতে পারে:

  • আপনি স্থানীয় শাখা তালিকাভুক্ত করতে পারেন git branch
  • আপনি এর সাথে git branch -rবা সমস্ত শাখা সহ প্রত্যন্ত শাখা তালিকাভুক্ত করতে পারেনgit branch -a
  • আপনি gitkসম্পূর্ণ ইতিহাস দেখতে (সমস্ত শাখার ট্যাগ ইত্যাদি যা আপনার স্থানীয় রেপো জানে) এর সাথে অনুরোধ করে তা দেখতে ব্যবহার করতে পারেন

    gitk --all
    

সমান্তরালভাবে একাধিক শাখার সাথে কীভাবে কাজ করবেন

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

এখানে বিভিন্ন পরিস্থিতিতে আছে:

একটি নতুন (এখনও তৈরি করা হয়নি) পরিবর্তনটি একাধিক শাখায় প্রয়োগ করা দরকার

এই কর্মপ্রবাহটি ব্যবহার করুন:

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

    1. চেক আউট b:

      git checkout b
      
    2. মার্জ cমধ্যে b:

      git merge c
      
  4. শাখা সরান c:

    git branch --delete c
    

একটি বিদ্যমান শাখা একটি পৃথক শাখায় প্রয়োজন

(... তবে সেই পরিবর্তনটি যেখানে রয়েছে সেখানে অন্যান্য পরিবর্তন ছাড়া)

  1. যে শাখায় পরিবর্তন দরকার তা পরীক্ষা করে দেখুন
  2. পরিবর্তনগুলি যথাযথভাবে পরিবর্তন করে চেরি-বাছাই করুন s

একটি শাখায় a, আপনি এক বা কিছু ফাইল তাদের অন্য একটি শাখায় ঠিক অবস্থানে রাখতে চানb

  1. চেক আউট a
  2. শাখা থেকে ফাইল সামগ্রী পান b:

    git checkout b -- path/to/a/file.txt path/to/another/file.cpp or/even/a/complete/directory/ ...
    

    ( git checkoutপথ ছাড়াই ব্যতীত, এটি শাখায় স্যুইচ হবে নাb , কেবল সেখান থেকে অনুরোধ করা ফাইলের সামগ্রীগুলি পাবেন These এই ফাইলগুলি ইতিমধ্যে উপস্থিত থাকতে পারে বা নাও থাকতে পারে athey যদি তারা তা করে থাকে তবে সেগুলি তাদের সামগ্রীতে ওভাররাইট করা হবে b))

একটি শাখায় কাজ করার সময় আপনি কীভাবে অন্য শাখায় জিনিসগুলি দেখতে চান তা দেখতে চান

আপনি যে শাখায় কাজ করতে চান তা দেখুন।

তারপরে, অন্য শাখার দিকে তাকানোর জন্য,

  • হয় এমন গ্রাফিকাল সরঞ্জাম ব্যবহার করুন যা আপনাকে বর্তমানে চেক আউট করা সংশোধনীগুলির সামগ্রীগুলি দেখতে দেয় (যেমন gitk"প্যাচ" থেকে "ট্রি" তে রেডিও বোতামগুলি স্যুইচ করার চেষ্টা করুন)
  • অথবা অস্থায়ী ডিরেক্টরিতে সংগ্রহস্থলটিকে ক্লোন করুন এবং সেখানে অন্য শাখাটি পরীক্ষা করে দেখুন
  • অথবা একই ভাণ্ডার (যেমন আপনার বর্তমান স্থানীয় সংগ্রহস্থলের ডিরেক্টরিতে ডাটাবেস ব্যবহার করে ) এর git worktreeপৃথক ওয়ার্কিং ডিরেক্টরি তৈরি করতে ব্যবহার করুন যেখানে আপনি যে অন্য শাখাটি পরীক্ষা করে দেখতে পারেন.git/

শেষ কর্মপ্রবাহের জন্য, stashআদর্শ।
CAD97

সমান্তরাল রেফারেন্সের জন্য দ্বিতীয় দিকে তাকানোর সময় আপনি যদি প্রথম শাখায় কাজ চালিয়ে যেতে চান তবে @ সিএডি 77 নয় । git stashঅসম্পূর্ণ কাজটি পথ থেকে সরিয়ে নেওয়া ভাল, যেমন শাখাগুলি স্যুইচ করা এবং পরে ফিরে আসা।
দাস-জি

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

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

হতে পারে এইচ জি ইনস টেক্সট "[...] কারণ আপনার সত্যিকার অর্থেই পুঙ্খানুপুঙ্খভাবে ক্লোনিং করে মার্কুরিয়াল উপায়ে শাখা করা উচিত ছিল [...]" সে ক্ষেত্রেও আপডেট করা উচিত ছিল।
das-g

31

এসভিএন-তে আমি সাধারণত আমার স্থানীয় মেশিনে একটি রেপো চেকআউট করি, এতে আমার প্রকল্পের সমস্ত শাখা থাকে এবং আমি আমার শাখার জন্য ফোল্ডারটি নির্বাচন করতে আগ্রহী এবং সেখানে কাজ করি।

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

বর্তমানে আমি একটি রেপো ক্লোন করছি এবং গিটক ব্যবহার করে একটি নির্দিষ্ট শাখা ক্লোন করছি।

সম্ভব নয়, উপরে দেখুন। আপনি পারেন git checkout branch-name, কিন্তু আপনি পারবেন না git clone something branch-name। সাবভারশনে শাখাগুলি ফোল্ডার are গিট-এ, শাখাগুলি একটি অঙ্গীকারের নির্দেশক poin

জিআইটি ব্যবহার করে আমার স্থানীয় সংগ্রহস্থলের সমস্ত শাখা দেখার সহজ উপায় আমি খুঁজে পাচ্ছি না।

চালান git branch। ডিফল্টরূপে এটি কেবল স্থানীয় শাখা দেখায়। git branch --remoteদূরবর্তী শাখা দেখতে ব্যবহার করুন ।


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

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

9
@ পাইপ প্রথমত, আপনি আসলে ব্যবহার করে কেবল একটি শাখা ক্লোন করতে পারেন --single-branch(এমনকি কেবলমাত্র টিপও --depth 1)। গিট হিসাবে পরিচিত স্থানীয় এবং দূরবর্তী শাখাগুলির মধ্যে পার্থক্য কেবল এক ধরণের লেবেল। রিমোট শাখাগুলি প্রত্যন্ত উত্সের নাম সহ উপস্থাপিত হয় (প্রায়শই origin)। স্থানীয় শাখাগুলিতে সেই উপসর্গ নেই। তবে শেষ পর্যন্ত, ডেটা স্থানীয়ভাবে উপলব্ধ হয় (যদি আপনি না করেন --single-branchবা এর মতো কিছু না করেন)। আপনি যখন git checkout $branchnameএকটি শাখা নিয়ে চলেছেন যার জন্য স্থানীয় ছাড়া কোনও দূরবর্তী শাখা উপস্থিত নেই, গিট স্বয়ংক্রিয়ভাবে একটি স্থানীয় শাখা রিমোটটিকে "ট্র্যাকিং" সেট আপ করে।
জোনাস শোফার

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

1
@ ইজকাটা "এটি একত্রীকরণকে অনেক সহজ করে তোলে", তাই না?
হোরাসকোল

3

এই সঙ্গে বাঁধা হয় আমি আশা করি যে SVN জ্ঞানের আমার অভাব neglectable হয়।

বর্তমানে আমি একটি রেপো ক্লোন করছি এবং গিটক ব্যবহার করে একটি নির্দিষ্ট শাখা ক্লোন করছি।

আপনি কেবল একটি নির্দিষ্ট শাখা নয় পুরো রিমোট রিপোজিটরির ক্লোনিং করছেন।

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

fetchকমান্ডের সাহায্যে দূরবর্তী এক সঙ্গে সুসংগত স্থানীয় ডাটাবেসের রাখা ব্যবহার করা হয়।

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

বলুন, আপনি একটি সাধারণ সংগ্রহস্থল নিয়ে কাজ করছেন, যেখানে কোনও শাখা নেই master, আপনি .git"যাদু" উন্মোচন করতে ফোল্ডারটি একবার দেখে নিতে পারেন :

ধরুন আপনার শেষ প্রতিশ্রুতি ছিল (চালু master) 182e8220b404437b9e43eb78149d31af79040c66, আপনি ঠিক এর অধীনে পাবেন cat .git/refs/heads/master

এটি থেকে আপনি একটি নতুন শাখাটি শাখা করেন git checkout -b mybranch, আপনি ফাইলে ঠিক একই পয়েন্টারটি খুঁজে পাবেন cat .git/refs/heads/mybranch

শাখা "পয়েন্টার" ছাড়া আর কিছুই নয় nothing "कार्यरत" চিহ্নিতকারীকে বলা হয় a HEAD

আপনি কোথায় আছেন তা জানতে চাইলে HEAD:

cat .git/HEADযা উদাহরণস্বরূপ বলে ref: refs/heads/mybranch, যা cat .git/refs/heads/mybranchপ্রতিশ্রুতিবদ্ধ হ্যাশের দিকে ( ) পরিবর্তিত হয়78a8a6eb6f82eae21b156b68d553dd143c6d3e6f

আসল কমিটগুলি objectsফোল্ডারের অধীনে সঞ্চিত থাকে (এটির নিজস্ব একটি বিষয় কীভাবে হয়)।

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

working directoryসামগ্রিকভাবে "গিট-ডাটাবেস" দিয়ে বিভ্রান্ত করবেন না । আমি উপরে বলেছি যে, আপনার কার্যকরী ডিরেক্টরিটি কেবল একটি উপসেটের স্ন্যাপশট।

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

সাধারণত, আপনি যদি দেখতে চান, প্রকল্পের জন্য কোন শাখাগুলি সংজ্ঞায়িত করা হয়েছে, আপনার সম্ভাবনা রয়েছে

  • git branch স্থানীয় শাখার জন্য
  • git branch --remote প্রত্যন্ত শাখার জন্য
  • git branch -a উভয় জন্য

(বা git branch -v)

যেহেতু গিটটি একটি বিতরণযোগ্য সংস্করণ নিয়ন্ত্রণ ব্যবস্থা, এটি কেবল স্থানীয়ভাবে / দূরবর্তী অঞ্চলে বিভিন্ন শাখা তৈরি করা সম্ভব নয়, তবে উত্সাহিত।

আমার আদর্শ ওয়ার্কফ্লো হল:

  • একটি বৈশিষ্ট্য শাখা বন্ধ শাখা
  • সেই থেকে একটি ডাব্লুআইপি (কাজ চলছে) শাখা করুন
  • আপনি যেমন চান তেমন কাজ করুন - এমনকি যদি আপনি একটি লাইনের পরে প্রতিশ্রুতিবদ্ধ থাকেন; এটা কোন ব্যাপার না

বৈশিষ্ট্যটি সম্পূর্ণ হলে:

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

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

আপনার প্রকল্পটি কীভাবে কাঠামোবদ্ধ করা হয়েছে তার উপর এটি নির্ভর করে:

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

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

অথবা আপনি সর্বদা শাখায় (যেমন master) পরিবর্তন করতে এবং এগুলি অন্যান্য শাখায় চেরিপিক করতে সক্ষম ।

জিআইটি-র রেপো থেকে ক্লোন করা শাখার অন্তর্ভুক্ত ফোল্ডারগুলি তৈরি করার জন্য প্রস্তাবিত নাম কনভেনশনগুলি কী, উদাহরণস্বরূপ মাইপ্রজেক্ট-শাখার নাম

এটা আপনার উপরে।

সাধারণত, আপনি সংগ্রহস্থলের নাম দিয়ে শেষ করেন।

তবে এমন কিছু অনুষ্ঠান রয়েছে, যখন এটি চাওয়া হয় না:

উদাহরণস্বরূপ, আপনি git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh এখানে ও-মাই-জেডএস ক্লোন করেছেন .oh-my-zshস্পষ্টভাবে লক্ষ্য হিসাবে নামকরণ করা হয়েছে।


2

Git clone প্রকৃতপক্ষে পুরো সংগ্রহস্থলটিকে ক্লোন করে, তবে আপনার কার্য ডিরেক্টরিকে ডিফল্ট (সাধারণত মাস্টার) এ সেট করে।

আপনি git branchস্থানীয় শাখাগুলি ব্যবহার করতে বা git branch -rপ্রত্যন্ত শাখাগুলি দেখতে এবং তারপরে git checkoutএকটি বিদ্যমান শাখায় স্যুইচ করতে বা বর্তমান শাখার উপর ভিত্তি করে একটি নতুন তৈরি করতে অন্য শাখা দেখতে পারেন ।

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


0

গিট এবং এসএনএন-এর শাখা মূলত ভিন্ন জিনিস।

এসএনএন-তে একটি শাখা (বা একটি ট্যাগ) রেপোর একটি ডিরেক্টরি।

গিটে একটি শাখা (বা একটি ট্যাগ) একটি প্রতিশ্রুতি দেয় poin

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

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

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

ডিরেক্টরি হওয়ার কারণে এবং এসএনএন এর সহজ লিনিয়ার ইতিহাসের মডেল অনুসারে এসএনএন শাখাগুলির শক্ত ইতিহাস রয়েছে। আপনি যদি জানতে চান যে তারিখে y শাখায় কী ছিল আপনি সহজেই এই প্রশ্নটি জিজ্ঞাসা করতে পারেন।

অন্যদিকে গিট শাখাগুলির ইতিহাস নেই। সেখানে "রিফ্লগ" রয়েছে তবে এটি দীর্ঘমেয়াদী ইতিহাসের চেয়ে দুর্যোগ পুনরুদ্ধার ব্যবস্থা হিসাবে বেশি। বিশেষত রিফ্লগটি রিমোট থেকে পঠিত যায় না এবং খালি रिपসের জন্য ডিফল্টরূপে অক্ষম থাকে।

কমিটস অবশ্যই ইতিহাস রয়েছে তবে "ইতিহাসে রেপো ওয়াইয়ের শাখা x এ কী ছিল" এই প্রশ্নের উত্তর দেওয়ার জন্য সেই ইতিহাসগুলি যথেষ্ট নয়।

গিট ব্যবহার করে আমার স্থানীয় সংগ্রহস্থলের সমস্ত শাখা দেখার সহজ উপায় আমি খুঁজে পাচ্ছি না।

আপনি "গিট ব্রাঞ্চ" টাইপ করে সমস্ত স্থানীয় শাখা তালিকাভুক্ত করতে পারেন।

আপনি "গিট শাখা -a" ব্যবহার করে স্থানীয় এবং দূরবর্তী উভয় শাখাকে তালিকাবদ্ধ করতে পারেন

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

কয়েকটি বিকল্প।

আপনি "অন্যান্য শাখায়" আপনার পরিবর্তনগুলি সম্পাদন করতে পারেন, সেখানে আপনার কাজটি করতে মাস্টার স্যুইচ করুন এবং তারপরে ফিরে যেতে পারেন।

আপনি অতিরিক্ত কাজের গাছও তৈরি করতে পারেন। সিনট্যাক্স সম্পর্কিত বিশদগুলির জন্য গুগল "গিট-ওয়ার্ক্রিট্রি"।

গিটে রেপো থেকে ক্লোন করা ব্রাঙ্ক অন্তর্ভুক্ত ফোল্ডারগুলি তৈরি করার জন্য প্রস্তাবিত নাম কনভেনশন কী?

আমি মনে করি না একটি প্রতিষ্ঠিত সম্মেলন আছে। একসাথে একাধিক কর্মক্ষম গাছগুলি চেক আউট করা নিয়ম নয় এটি ব্যতিক্রম।


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