সমস্ত শাখা এবং ট্যাগ সহ পুরো গিট রেপো ব্যাকআপ করার কোনও সহজ উপায় আছে?
সমস্ত শাখা এবং ট্যাগ সহ পুরো গিট রেপো ব্যাকআপ করার কোনও সহজ উপায় আছে?
উত্তর:
কী সম্পর্কে এটির এক ক্লোন তৈরি করা যায়?
git clone --mirror other/repo.git
প্রতিটি সংগ্রহস্থল তার রিমোটের ব্যাকআপ।
git branch -a। সম্ভবত এটি আরও সুস্পষ্টভাবে: কোনও স্টোর সংগ্রহের পরে আপনি প্রতিটি শাখা আনবেন না, আপনি প্রতিশ্রুতি আনবেন। শাখাগুলি কেবল একটি বিদ্যমান প্রতিশ্রুতিবদ্ধতার উল্লেখ করে।
git cloneসবই কভার করেছে। (1) alচ্ছিক, প্রয়োজন নয়। যদি ফলাফলটি এখনও অনুকূলিত হয় তবে এটি এখনও একটি ব্যাকআপ (2) ইতিমধ্যে গিট দ্বারা আবৃত। - আমি যে বক্তব্যটি দিতে চাই তা হ'ল যদি git cloneইতিমধ্যে প্রাসঙ্গিক বিষয়গুলি আবরণ করা হয় তবে তার জন্য আপনার আলাদা সরঞ্জামের কী দরকার? যদিও আমিও পছন্দ git bundleকরি তবে আমার উত্তরটি ভুল, বা অবৈধ বলে মনে করি না। উভয় পন্থা আপনি হট- বনাম কোল্ড-ব্যাকআপ হিসাবে দেখতে পারেন।
git bundle
আমি সেই পদ্ধতিটি পছন্দ করি, কারণ এটি কেবলমাত্র একটি ফাইলের চারপাশে অনুলিপি করা সহজ হয়। প্রোজিট
দেখুন : আনন্দের সামান্য বান্ডিল ।
আরও দেখুন " আমি কাউকে একটি Git সংগ্রহস্থলের ইমেইল করতে পারেন কিভাবে? ", যেখানে কমান্ড
git bundle create /tmp/foo-all --all
বিস্তারিত:
git bundleগিট শো-রেফ দ্বারা দেখানো কেবল প্যাকেজ রেফারেন্সগুলি হবে : এতে মাথা, ট্যাগ এবং দূরবর্তী প্রধান অন্তর্ভুক্ত রয়েছে।
এটি ভিত্তিটি গন্তব্য দ্বারা পরিচালিত হওয়া খুব গুরুত্বপূর্ণ।
সাবধানতার দিক থেকে ভুল করা ঠিক আছে, বান্ডিল ফাইলটি ইতিমধ্যে গন্তব্যে থাকা বস্তুগুলিকে ধারণ করে, কারণ গন্তব্যে আনপ্যাক করার সময় এগুলি উপেক্ষা করা হয়।
এই বান্ডিলটি ব্যবহার করার জন্য, আপনি এটি ক্লোন করতে পারেন, একটি অস্তিত্বহীন ফোল্ডার নির্দিষ্ট করে (কোনও গিট রেপোর বাইরে):
git clone /tmp/foo-all newFolder
git bundleআমার মতের সঠিক উত্তর, এবং গৃহীত উত্তর নয়। আমি মনে করি তিনি ক্লোন কমান্ডটি ভাল জানেন, তিনি যদি এই জাতীয় প্রশ্ন জিজ্ঞাসা করতে পারেন তবে এটি স্পষ্টতই তাঁর পক্ষে যথেষ্ট নয় (কারণ এটি একটি ক্লোন, এবং ডাম্প নয়)। ডাম্পগুলি সহজ কপি হিসাবে বিভিন্ন জিনিস, উদাহরণস্বরূপ: 1) সাধারণ কাজের জন্য তাদের সর্বোত্তম (বা এমনকি সক্ষম) হওয়া প্রয়োজন হয় না 2) তবে তাদের ডেটা দুর্নীতির বিরুদ্ধে একটি ভাল প্রতিরোধ এবং মেরামতযোগ্যতা থাকা প্রয়োজন 3) এটি প্রায়শই দরকারী যদি তারা সহজে ইনক্রিমেন্টাল ব্যাকআপের জন্য পৃথক-সক্ষম হয়, তবে এটি অনুলিপিগুলিতে একটি লক্ষ্য নয়।
git bundleবা না git cloneপেয়ে সবকিছুই উদাহরণস্বরূপ হুক স্ক্রিপ্টস।
git bundleকোনও রিমোট রেপো ব্যবহার করতে পারি ?
কিছু অন্যান্য উত্তরের প্রসারিত করা, আমি এটিই করি:
রেপো সেটআপ করুন: git clone --mirror user@server:/url-to-repo.git
তারপরে আপনি যখন ব্যাকআপটি রিফ্রেশ করতে চান: git remote updateক্লোন অবস্থান থেকে।
এটি পরে যুক্ত হওয়া নতুন শাখাগুলি সহ সমস্ত শাখা এবং ট্যাগকে ব্যাক আপ করে, যদিও এটি লক্ষ্য করার মতো যে মুছে ফেলা শাখাগুলি ক্লোন থেকে মুছে ফেলা হয় না (যা ব্যাকআপের জন্য ভাল জিনিস হতে পারে)।
এটি পারমাণবিক তাই সাধারণ কপি করার মতো সমস্যা নেই।
কিংক্রাঞ্চ এবং ভনসির দুর্দান্ত উত্তরের উপর বিস্তৃত
আমি তাদের উভয় একত্রিত:
git clone --mirror git@some.origin/reponame reponame.git
cd reponame.git
git bundle create reponame.bundle --all
এর পরে আপনার কাছে একটি ফাইল রয়েছে যা reponame.bundleসহজেই অনুলিপি করা যায়। তারপরে আপনি এটি ব্যবহার করে একটি নতুন সাধারণ গিট সংগ্রহস্থল তৈরি করতে পারেন git clone reponame.bundle reponame।
মনে রাখবেন যে git bundleঅনুলিপিগুলিতে কেবল কিছু অনুলিপি (শাখা বা ট্যাগ) তৈরি করে তার প্রতিলিপিগুলি অনুলিপি করে। তাই জটলা কমিটগুলি বান্ডেলে সংরক্ষণ করা হয় না।
git bundle create reponame.bundle --all?
ডিরেক্টরিতে সমস্ত কিছু রয়েছে .git। আপনি যে কোনও ফাইল হিসাবে ঠিক আপনার প্রকল্পের পাশাপাশি ফিরে আসুন।
copyবা cpআদেশগুলি জানেন এবং এটি তার প্রয়োজনের সাথে খাপ খায় না। এবং আমি আরও মনে করি, তিনি একটি খালি ভাণ্ডার নিয়ে ভাবেন (যদিও এটি অনুলিপি করা যায় তবে আমি মনে করি এটি একটি সম্পূর্ণ বৈশিষ্ট্যযুক্ত ব্যাকআপ নয়)।
গিট বান্ডিল, বা ক্লোন ব্যবহার করুন
গিট ডিরেক্টরিটি অনুলিপি করা ভাল সমাধান নয় কারণ এটি পারমাণবিক নয়। আপনার যদি এমন একটি বড় সংগ্রহস্থল থাকে যা অনুলিপি করতে দীর্ঘ সময় নেয় এবং কেউ আপনার সংগ্রহশালায় চাপ দেয় তবে এটি আপনার ব্যাক আপকে প্রভাবিত করবে। ক্লোনিং বা বান্ডিল তৈরি করতে এই সমস্যা হবে না।
আপনি ন্যূনতম স্টোরেজ আকারে গিট-কপি দিয়ে গিট রেপো ব্যাকআপ করতে পারেন ।
git copy /path/to/project /backup/project.repo.backup
তারপরে আপনি এর সাথে আপনার প্রকল্পটি পুনরুদ্ধার করতে পারেন git clone
git clone /backup/project.repo.backup project
git clone --bare+ এর জন্য অনেক কাজ বলে মনে হচ্ছে git push --force।
সঠিক উত্তর আইএমও হ'ল গিট ক্লোন - এমিরর । এটি আপনার রেপোটিকে পুরোপুরি ব্যাকআপ করবে।
গিট ক্লোন মিরর পুরো সংগ্রহস্থল, নোট, মাথা, রেফ, ইত্যাদি ক্লোন করবে এবং সাধারণত একটি নতুন গিট সার্ভারে সম্পূর্ণ সংগ্রহস্থল অনুলিপি করতে ব্যবহৃত হয়। এটি একটি সমস্ত শাখা এবং সমস্ত কিছু পুরো সংগ্রহস্থলকে টানবে।
git clone --mirror git@example.com/your-repo.git
সাধারণত কোনও রেপো ক্লোনিংয়ের সাথে সমস্ত শাখা অন্তর্ভুক্ত থাকে না, কেবল মাস্টার।
রেপো ফোল্ডারটি অনুলিপি করা কেবল সেই শাখাগুলিকে "অনুলিপি" করবে যা কেবল টেনে নেওয়া হয়েছে ... সুতরাং ডিফল্টরূপে এটি কেবলমাত্র মাস্টার শাখা বা অন্যান্য শাখা যা আপনি আগে যাচাই-বাছাই করেছেন।
গিট বান্ডেল কমান্ডটি আপনি যা চান তাও নয়: "বান্ডেল কমান্ডটি সাধারণত গিট পুশ কমান্ড দিয়ে তারের উপর দিয়ে চাপানো সমস্ত বাইনারি ফাইলে প্যাকেজ করে দেবে যা আপনি কাউকে ইমেল করতে পারবেন বা একটি ফ্ল্যাশ ড্রাইভ রেখে দিতে পারেন, তারপরে" অন্য ভাণ্ডারে আনবান্ডেল করুন। " ( গিট ক্লোন - এমিরর এবং গিট ক্লোন - বারে এর মধ্যে পার্থক্য কী থেকে )
এই থ্রেডটি কীভাবে গিট রেপগুলির ব্যাকআপ নেওয়া যেতে পারে তার কিছু অন্তর্দৃষ্টি পেতে খুব সহায়ক হয়েছিল। আমি মনে করি এটি এখনও নিজের জন্য "সঠিক উপায়" (টিএম) খুঁজতে কিছু ইঙ্গিত, তথ্য বা উপসংহারের অভাব রয়েছে। অতএব অন্যদের সহায়তা করতে আমার চিন্তাভাবনাগুলি এখানে ভাগ করে নিন এবং তাদের উন্নত করার জন্য তাদের আলোচনার জন্য রাখুন। ধন্যবাদ।
সুতরাং আসল প্রশ্নটি বাছাইয়ের সাথে শুরু করুন:
তারপরে এটিকে সাধারণ শুভেচ্ছার সাথে সমৃদ্ধ করা এবং কিছু প্রিসেটিং নির্দিষ্ট করা:
"100%" ব্যাকআপ কী তা নিয়ে দৃষ্টিভঙ্গি আলাদা হয়। এখানে দুটি টিপিক্যাল রয়েছে।
গিট একটি বিকাশকারী সরঞ্জাম এবং এর মাধ্যমে git clone --mirrorএবং এর মাধ্যমে এই দৃষ্টিকোণকে সমর্থন করে git bundle --all।
git gc)গিটটি একটি বিকাশকারী সরঞ্জাম এবং এটিকে প্রশাসকের কাছে ছেড়ে দেয়। গিট কনফিগারেশন এবং ওএস কনফিগারেশনের ব্যাকআপটি সামগ্রীর ব্যাকআপ থেকে আলাদা হিসাবে দেখা উচিত।
তাদের বেশিরভাগ ব্যাকআপের জন্য জেনেরিক।
git gc --auto
git bundle --all
git bundle verify।git clone --mirror
git fsck।একটি শীতল-অনুলিপি ব্যাকআপ সর্বদা একটি সম্পূর্ণ ফাইল ব্যাকআপ করতে পারে: গিট রেপোগুলিতে সমস্ত অ্যাক্সেস অস্বীকার করুন , ব্যাকআপ করুন এবং আবার অ্যাক্সেসের অনুমতি দিন।
চলমান কমিটস দ্বারা দূষিত ডেটার ঝুঁকির কারণে অ্যাক্টিভ রেপোগুলির সাথে ফাইল ব্যাকআপ করা যাবে না। হট-কপি ব্যাকআপ উদ্দেশ্যে সক্রিয় একটি সংগ্রহস্থলের একটি স্থিত অবস্থা সরবরাহ করে। চলমান কমিটগুলি সেই অনুলিপিটিকে প্রভাবিত করে না। গিটের ক্লোন এবং বান্ডিল কার্যকারিতা উপরে তালিকাবদ্ধ হিসাবে এটি সমর্থন করে তবে একটি "100% প্রশাসক" ব্যাকআপের জন্য অতিরিক্ত কমান্ডের মাধ্যমে বেশ কয়েকটি কাজ করতে হবে।
git bundle --allসামগ্রীর সম্পূর্ণ / ইনক্রিমেন্টাল ডাম্প ফাইলগুলি তৈরি করতে এবং পৃথকভাবে অনুলিপি / ব্যাকআপ কনফিগারেশন ফাইল তৈরি করতে ব্যবহার করুন ।git clone --mirrorআলাদাভাবে কনফিগারেশন ব্যবহার করুন , পরিচালনা করুন এবং অনুলিপি করুন, তারপরে মিররটির পুরো ফাইল ব্যাকআপ করুন।
cd /path/to/backupdir/
git clone /path/to/repo
cd /path/to/repo
git remote add backup /path/to/backupdir
git push --set-upstream backup master
এটি একটি ব্যাকআপ তৈরি করে এবং সেটআপটি তৈরি করে, যাতে আপনি ব্যাকআপটি আপডেট করতে গিট পুশ করতে পারেন, সম্ভবত আপনি যা করতে চান তা। কেবল নিশ্চিত করুন, সেই / পথ / টু / ব্যাকআপডির এবং / পাথ / টু / রেপো হ'ল কমপক্ষে ভিন্ন ভিন্ন হার্ড ড্রাইভ, অন্যথায় এটি করার পক্ষে তেমন কোনও বোঝা যায় না।
এখানে দুটি বিকল্প রয়েছে:
সার্ভারে রেপুর পুরো খালি বিষয়বস্তু রয়েছে বলে আপনি সরাসরি গিট রেপো ডিরেক্টরিটির একটি টার নিতে পারেন । ব্যাকআপ নেওয়ার সময় কেউ রেপোতে কাজ করছেন বলে কিছুটা সম্ভাবনা রয়েছে।
নীচের কমান্ডটি রেপোর খালি ক্লোনটি দেবে (ঠিক এটি সার্ভারে রয়েছে), তারপরে আপনি যে কোনও সমস্যা ছাড়াই ক্লোন করেছেন এমন অবস্থানের একটি ট্যারে নিতে পারেন।
git clone --bare {your backup local repo} {new location where you want to clone}
আমি যতদূর জানি আপনার রেপো যে ডিরেক্টরিটি রয়েছে সেটির একটি অনুলিপি তৈরি করতে পারেন!
cp -r project project-backup
git clone --bareআপনাকে একটি ধারাবাহিক স্ন্যাপশট দেবে।