গিট ক্লোন সহায়তা পৃষ্ঠাতে এটি সম্পর্কে বলা আছে --mirror
:
দূরবর্তী সংগ্রহস্থলের একটি আয়না সেট আপ করুন। এটি বোঝাচ্ছে
--bare
।
তবে --mirror
ক্লোনটি কীভাবে ক্লোন থেকে আলাদা তা নিয়ে বিশদে যান না --bare
।
গিট ক্লোন সহায়তা পৃষ্ঠাতে এটি সম্পর্কে বলা আছে --mirror
:
দূরবর্তী সংগ্রহস্থলের একটি আয়না সেট আপ করুন। এটি বোঝাচ্ছে
--bare
।
তবে --mirror
ক্লোনটি কীভাবে ক্লোন থেকে আলাদা তা নিয়ে বিশদে যান না --bare
।
উত্তর:
পার্থক্য হল যে যখন ব্যবহার করছে --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
সমস্ত রেফ উত্স থেকে ওভাররাইট হয়ে যায়, যেন আপনি সবেমাত্র আয়নাটি মুছলেন এবং পুনরায় সংলাপ করুন। মূলত ডকস যেমন বলেছিলেন, এটি একটি আয়না। এটি একটি কার্যকরী অভিন্ন অনুলিপি হওয়ার কথা, আসলটির সাথে বিনিময়যোগ্য।
$ git clone --mirror $URL
একটি সংক্ষিপ্ত হাত
$ git clone --bare $URL
$ (cd $(basename $URL) && git remote add --mirror=fetch origin $URL)
(থেকে সরাসরি অনুলিপি করা এখানে )
বর্তমান মানব-পৃষ্ঠা এটি কীভাবে রাখে:
তুলনায়
--bare
,--mirror
কেবলমাত্র স্থানীয় স্থানীয় শাখাকে লক্ষ্যের স্থানীয় শাখাগুলিতে ম্যাপ করে না, এটি সমস্ত রেফকে ম্যাপ করে (দূরবর্তী শাখা, নোট ইত্যাদি সহ) এবং একটি রেসপেক কনফিগারেশন সেটআপ করে যে এই সমস্ত রেফগুলিgit remote update
লক্ষ্য সংগ্রহস্থলের দ্বারা ওভাররাইট করা হয় are ।
git fetch
এটি আসলে অভিন্ন হওয়ার জন্য আপনাকে এটি অনুসরণ করতে হবে। যাইহোক, এটি একটি উত্তরহীন বাছাই - প্রশ্নের মূল বিষয়টি "একটি আয়না দূরবর্তী / ক্লোনটি কীভাবে একটি সাধারণের থেকে আলাদা?"
basename
সাধারণ ইউনিক্স ইউটিলিটি যা কোনও পাথের ডিরেক্টরি অংশটি পৃথক করে এবং $()
কেবল বাশের আদেশ আদেশ প্রতিস্থাপন।
--mirror
আছে। এটি কেবলমাত্র একটি গ্রহণযোগ্য উত্তর হবে যদি এটি কী git remote add --mirror
করে তা ব্যাখ্যা করে।
গিট -২.০.০ এর সাথে আমার পরীক্ষাগুলি ইঙ্গিত দেয় যে - -মিরর বিকল্পটি হুক, কনফিগার ফাইল, বিবরণ ফাইল, তথ্য / বাদ দেওয়া ফাইল এবং কমপক্ষে আমার পরীক্ষার ক্ষেত্রে কয়েকটি রেফ (যা আমি করি না) অনুলিপি করে না বুঝতে পারছি না)) আমি এটিকে "কার্যকরীভাবে অভিন্ন অনুলিপি বলব না, মূলটির সাথে বিনিময়যোগ্য।"
-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
একটি সংগ্রহস্থলের সদৃশ করার বিষয়ে গিটহাব ডকুমেন্টেশন থেকে একটি অযৌক্তিক ব্যাখ্যা :
খালি ক্লোনটির মতোই, মিররযুক্ত ক্লোনটিতে সমস্ত দূরবর্তী শাখা এবং ট্যাগগুলি অন্তর্ভুক্ত থাকে, তবে সমস্ত স্থানীয় রেফারেন্সগুলি প্রতিবার আপনি যখনই আনবেন তখন ওভাররাইট করা হবে, তাই এটি সর্বদা আসল সংগ্রহস্থলের সমান হবে।
--prune
দূরবর্তী অঞ্চলে আর নেই এমন স্থানীয় রেফারেন্সগুলি সরানোর জন্য আপনি গিট আনতে গিয়ে ব্যবহার করতে পারেন।
একটি ক্লোন রিমোট থেকে রেফগুলি অনুলিপি করে এবং তাদেরকে 'এগুলি রিমোটের রেফগুলি' নামে একটি সাব-ডিরেক্টরিতে স্টাফ করে।
একটি আয়না রিমোটগুলি থেকে রেফগুলি অনুলিপি করে এবং এটি তার নিজের শীর্ষ স্তরে রাখে - এটি রিমোটের সাথে তার নিজস্ব রেফগুলি প্রতিস্থাপন করে।
এর অর্থ হ'ল কেউ যখন আপনার আয়না থেকে টেনে নিয়ে যায় এবং আয়নার রেফগুলি ততোধিক সাব-ডাইরেক্টরির মধ্যে স্টাফ করে, তারা মূল হিসাবে যেমন রেফগুলি পাবে। একটি আপ-টু-ডেট আয়না থেকে আনার ফলাফলটি প্রাথমিক রেপো থেকে সরাসরি আনার সমান।
$ git clone --bare https://github.com/example
এই আদেশটি নতুনকে নিজেই $ GIT_DIR করবে make এছাড়াও দূরবর্তী শাখার প্রধানগুলি ম্যাপিং ছাড়াই সরাসরি স্থানীয় শাখা প্রধানগুলিতে অনুলিপি করা হয়। এই বিকল্পটি ব্যবহার করা হলে, দূরবর্তী-ট্র্যাকিং শাখাগুলি বা সম্পর্কিত কনফিগারেশন ভেরিয়েবলগুলি তৈরি করা হয় না।
$ git clone --mirror https://github.com/example
খালি ক্লোনটির মতোই, একটি মিররযুক্ত ক্লোনটিতে সমস্ত দূরবর্তী শাখা এবং ট্যাগগুলি অন্তর্ভুক্ত থাকে তবে সমস্ত স্থানীয় রেফারেন্স (রিমোট-ট্র্যাকিং শাখা, নোট ইত্যাদি সহ) প্রতিবার আপনি যখনই আনবেন তখন ওভাররাইট করা হবে, তাই এটি সর্বদা আসল সংগ্রহস্থলের সমান হবে ।