গিট ক্লোন - এমিরর এবং গিট ক্লোন - বারের মধ্যে পার্থক্য কী


486

গিট ক্লোন সহায়তা পৃষ্ঠাতে এটি সম্পর্কে বলা আছে --mirror:

দূরবর্তী সংগ্রহস্থলের একটি আয়না সেট আপ করুন। এটি বোঝাচ্ছে --bare

তবে --mirrorক্লোনটি কীভাবে ক্লোন থেকে আলাদা তা নিয়ে বিশদে যান না --bare


3
সহায়ক, তবে আপনি যদি এই আয়নাটি গিথুবের মতো কোনও রিমোট রেপোতে ঠেলাতে চান তবে আমি এই লিঙ্কটি খুব সহজেই পেয়েছি ।
খান

উত্তর:


568

পার্থক্য হল যে যখন ব্যবহার করছে --mirror, সব refs অনুলিপি করা যেমন-is । এর অর্থ সবকিছু: রিমোট-ট্র্যাকিং শাখা, নোট, রেফ / মূল / * (ফিল্টার-শাখা থেকে ব্যাকআপ)। ক্লোন করা রেপো সব আছে। এটিও সেট আপ করা হয়েছে যাতে একটি রিমোট আপডেট আপডেট থেকে সবকিছু পুনরায় আনবে (অনুলিপি করা অনুলিপিগুলি)। ধারণাটি হ'ল ভাণ্ডারটি মিরর করা, মোট কপি থাকা, যাতে আপনি উদাহরণস্বরূপ একাধিক জায়গায় আপনার কেন্দ্রীয় রেপো হোস্ট করতে পারেন, বা এটির ব্যাক আপ নিতে পারেন। আরও মার্জিত গিট উপায় বাদে, রেপোটিকে অনুলিপি করার জন্য কেবল সোজা-আপ করার কথা ভাবুন।

নতুন ডকুমেন্টেশন এ সব বলে:

--mirror

উত্স সংগ্রহস্থলের একটি আয়না সেট আপ করুন। এটি বোঝাচ্ছে --bare। তুলনায় --bare, --mirrorকেবলমাত্র স্থানীয় স্থানীয় শাখাকে লক্ষ্যের স্থানীয় শাখাগুলিতে ম্যাপ করে না, এটি সমস্ত রেফকে ম্যাপ করে (দূরবর্তী শাখা, নোট ইত্যাদি সহ) এবং একটি রেসপেক কনফিগারেশন সেটআপ করে যে এই সমস্ত রেফগুলি git remote updateলক্ষ্য সংগ্রহস্থলের দ্বারা ওভাররাইট করা হয় are ।

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

ধরুন উৎপত্তি কয়েক শাখা (হয়েছে master (HEAD), next, pu, এবং maint), কিছু ট্যাগ ( v1, v2, v3), কিছু দূরবর্তী শাখা ( devA/master, devB/master), এবং কিছু অন্যান্য refs ( refs/foo/bar, refs/foo/baz, নোট, stashes, অন্যান্য devs 'নামব্যবধান, কে জানে হতে পারে যা)।

  • git clone origin-url(অ-বেয়ার): আপনি ট্যাগ কপি সব পাবেন, একটি স্থানীয় শাখা master (HEAD)একটি দূরবর্তী শাখা ট্র্যাকিং origin/master, এবং দূরবর্তী শাখা origin/next, origin/puএবং origin/maint। ট্র্যাকিং শাখাগুলি সেট আপ করা হয়েছে যাতে আপনি যদি এমন কিছু git fetch originকরেন তবে আপনার প্রত্যাশা অনুযায়ী সেগুলি এনে দেওয়া হবে। যে কোনও দূরবর্তী শাখা (ক্লোনড রিমোটে) এবং অন্যান্য রেফগুলি সম্পূর্ণ উপেক্ষা করা হয়।

  • git clone --bare origin-url: আপনার কপি ট্যাগ, স্থানীয় শাখা সব পাবেন master (HEAD), next, pu, এবং maint, কোন দূরবর্তী ট্র্যাকিং শাখা। এটি হ'ল, সমস্ত শাখা যেমন রয়েছে তেমন অনুলিপি করা হয়েছে এবং এটি পুনরায় আনার কোনও প্রত্যাশা ছাড়াই এটি সম্পূর্ণ স্বাধীনভাবে সেট আপ করা হয়েছে। যে কোনও দূরবর্তী শাখা (ক্লোনড রিমোটে) এবং অন্যান্য রেফগুলি সম্পূর্ণ উপেক্ষা করা হয়।

  • git clone --mirror origin-url: এই সমস্ত রেফের প্রত্যেকের শেষের মতো অনুলিপি করা হবে। আপনি সমস্ত ট্যাগ, স্থানীয় শাখা পাবেন master (HEAD), next, pu, এবং maint, দূরবর্তী শাখা devA/masterএবং devB/masterঅন্যান্য refs refs/foo/barএবং refs/foo/baz। ক্লোনড রিমোটে যেমন ছিল ঠিক তেমন সবকিছু। রিমোট ট্র্যাকিং সেট আপ করা হয়েছে যাতে আপনি চালনা করলে git remote updateসমস্ত রেফ উত্স থেকে ওভাররাইট হয়ে যায়, যেন আপনি সবেমাত্র আয়নাটি মুছলেন এবং পুনরায় সংলাপ করুন। মূলত ডকস যেমন বলেছিলেন, এটি একটি আয়না। এটি একটি কার্যকরী অভিন্ন অনুলিপি হওয়ার কথা, আসলটির সাথে বিনিময়যোগ্য।


"নরমাল ক্লোন" - - বারে বা - মিরর পতাকা ছাড়া কোনও ক্লোনকে বোঝায়?
স্যাম

1
হ্যাঁ, এটা করে। খালি ক্লোন সহ, ম্যান পৃষ্ঠায় যেমন বলা হয়েছে, শাখাগুলি সরাসরি পাশাপাশি অনুলিপি করা হয় (কোনও রেফার্স / রিমোটস / উত্স, কোনও ট্র্যাকিং নেই)। সম্পাদনা করা হয়েছে
ক্যাসাবেল

পার্থক্য সম্পর্কে আপনি আরও কিছু ব্যবহারের উদাহরণ যুক্ত করতে পারেন, কেবল গিট-অভ্যন্তরীণ পার্থক্য নয়?
সে.এম.সি.গিন্টি

@ ক্যাসি আপনি যা খুঁজছিলেন তা কি? আমি ভাবিনি যে আমি মূলত যা লিখেছিলাম তা "অভ্যন্তরীণ" - ট্যাগ এবং শাখাগুলি খুব বেশি চীনামাটির বাসন বৈশিষ্ট্য।
ক্যাসকেবেল

"শাখাগুলি যেমন হিসাবে অনুলিপি করা হয়" তার অর্থ কি শাখাগুলি ক্লোনের একই আপেক্ষিক পথে অনুলিপি করা হয়েছে? বা এটি কি বোঝায় যে শাখাগুলি কোনওভাবে রূপান্তরিত হয়?
স্যাম

56
$ git clone --mirror $URL

একটি সংক্ষিপ্ত হাত

$ git clone --bare $URL
$ (cd $(basename $URL) && git remote add --mirror=fetch origin $URL)

(থেকে সরাসরি অনুলিপি করা এখানে )

বর্তমান মানব-পৃষ্ঠা এটি কীভাবে রাখে:

তুলনায় --bare, --mirrorকেবলমাত্র স্থানীয় স্থানীয় শাখাকে লক্ষ্যের স্থানীয় শাখাগুলিতে ম্যাপ করে না, এটি সমস্ত রেফকে ম্যাপ করে (দূরবর্তী শাখা, নোট ইত্যাদি সহ) এবং একটি রেসপেক কনফিগারেশন সেটআপ করে যে এই সমস্ত রেফগুলি git remote updateলক্ষ্য সংগ্রহস্থলের দ্বারা ওভাররাইট করা হয় are ।


4
আমি বিশ্বাস করি যে git fetchএটি আসলে অভিন্ন হওয়ার জন্য আপনাকে এটি অনুসরণ করতে হবে। যাইহোক, এটি একটি উত্তরহীন বাছাই - প্রশ্নের মূল বিষয়টি "একটি আয়না দূরবর্তী / ক্লোনটি কীভাবে একটি সাধারণের থেকে আলাদা?"
ক্যাসকেবেল

6
আমি আসলে পার্থক্য প্রদর্শনের এই উপায়টি পছন্দ করি। আশা করি এটি সঠিক! আমি আশা করি hfs আনতে কমান্ড যোগ করুন।
জোয়েটউইডল

সত্যিই পরিষ্কার নয়, যেমন $ (বেসনেম $ ইউআরএল) এর অনুবাদ কী ইত্যাদি
Kzqai

5
basenameসাধারণ ইউনিক্স ইউটিলিটি যা কোনও পাথের ডিরেক্টরি অংশটি পৃথক করে এবং $()কেবল বাশের আদেশ আদেশ প্রতিস্থাপন।
ভিক্টর জামামানিয়ান

6
এটি এখনও এটি --mirrorআছে। এটি কেবলমাত্র একটি গ্রহণযোগ্য উত্তর হবে যদি এটি কী git remote add --mirrorকরে তা ব্যাখ্যা করে।
জেনেক্সার

24

গিট -২.০.০ এর সাথে আমার পরীক্ষাগুলি ইঙ্গিত দেয় যে - -মিরর বিকল্পটি হুক, কনফিগার ফাইল, বিবরণ ফাইল, তথ্য / বাদ দেওয়া ফাইল এবং কমপক্ষে আমার পরীক্ষার ক্ষেত্রে কয়েকটি রেফ (যা আমি করি না) অনুলিপি করে না বুঝতে পারছি না)) আমি এটিকে "কার্যকরীভাবে অভিন্ন অনুলিপি বলব না, মূলটির সাথে বিনিময়যোগ্য।"

-bash-3.2$ git --version
git version 2.0.0
-bash-3.2$ git clone --mirror /git/hooks
Cloning into bare repository 'hooks.git'...
done.

-bash-3.2$ diff --brief -r /git/hooks.git hooks.git
Files /git/hooks.git/config and hooks.git/config differ
Files /git/hooks.git/description and hooks.git/description differ
...
Only in hooks.git/hooks: applypatch-msg.sample
...
Only in /git/hooks.git/hooks: post-receive
...
Files /git/hooks.git/info/exclude and hooks.git/info/exclude differ
...
Files /git/hooks.git/packed-refs and hooks.git/packed-refs differ
Only in /git/hooks.git/refs/heads: fake_branch
Only in /git/hooks.git/refs/heads: master
Only in /git/hooks.git/refs: meta

14

একটি সংগ্রহস্থলের সদৃশ করার বিষয়ে গিটহাব ডকুমেন্টেশন থেকে একটি অযৌক্তিক ব্যাখ্যা :

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


1
ধন্যবাদ; এটি আমার জন্য স্পষ্ট করে দিয়েছিল যে মিররযুক্ত ক্লোন ব্যবহার করে স্থানীয় ট্যাগগুলি ওভাররাইট করা হবে branches খুব উপকারী.
ওয়াইল্ডকার্ড

2
--pruneদূরবর্তী অঞ্চলে আর নেই এমন স্থানীয় রেফারেন্সগুলি সরানোর জন্য আপনি গিট আনতে গিয়ে ব্যবহার করতে পারেন।
নিশান্থস

13

একটি ক্লোন রিমোট থেকে রেফগুলি অনুলিপি করে এবং তাদেরকে 'এগুলি রিমোটের রেফগুলি' নামে একটি সাব-ডিরেক্টরিতে স্টাফ করে।

একটি আয়না রিমোটগুলি থেকে রেফগুলি অনুলিপি করে এবং এটি তার নিজের শীর্ষ স্তরে রাখে - এটি রিমোটের সাথে তার নিজস্ব রেফগুলি প্রতিস্থাপন করে।

এর অর্থ হ'ল কেউ যখন আপনার আয়না থেকে টেনে নিয়ে যায় এবং আয়নার রেফগুলি ততোধিক সাব-ডাইরেক্টরির মধ্যে স্টাফ করে, তারা মূল হিসাবে যেমন রেফগুলি পাবে। একটি আপ-টু-ডেট আয়না থেকে আনার ফলাফলটি প্রাথমিক রেপো থেকে সরাসরি আনার সমান।


12

আমি একটি ছবি যুক্ত করব, configআয়না এবং খালি মধ্যে পার্থক্য দেখাব । এখানে চিত্র বর্ণনা লিখুন বামটি খালি, ডানদিকে আয়না। আপনি পরিষ্কার হতে পারেন, মিররের কনফিগারেশন ফাইলে fetchকী রয়েছে যার অর্থ আপনি এটি আপডেট করতে পারবেন, দ্বারা git remote updateবাgit fetch --all


3
$ git clone --bare https://github.com/example

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

$ git clone --mirror https://github.com/example

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

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