git - একটি স্বাভাবিক গিট রিপোজিটরি একটি বেয়ার এক রূপান্তর কিভাবে?




version-control git-clone (11)

আমি কিভাবে একটি 'স্বাভাবিক' গিট রিপোজিটরি একটি বেয়ার রূপান্তর করতে পারেন?

প্রধান পার্থক্য মনে হচ্ছে:

  • স্বাভাবিক গিট রেপোজিটরিতে আপনার কাছে রয়েছে। .git ফোল্ডার যা সমস্ত প্রাসঙ্গিক তথ্য এবং অন্যান্য সমস্ত ফাইল ধারণকারী রিপোজিটরি ধারণ করে আপনার কাজ কপি তৈরি করে

  • একটি repo.git গিট রিপোজিটরিতে, কোনও কার্যকরী অনুলিপি এবং ফোল্ডার নেই (আসুন এটি repo.git ) প্রকৃত সংগ্রহস্থলের ডেটা ধারণ করে


.Git ডিরেক্টরি সরানোর সাথে ফাইল এবং muck সরানোর পদ্ধতিগুলি পরিষ্কার নয় এবং সহজ হওয়া উচিত এমন কিছু করার "git" পদ্ধতিটি ব্যবহার করে না। এটি একটি নিখুঁত পদ্ধতি যা আমি একটি সাধারণ রেপোকে একটি বেন রেপোর রূপান্তর করতে পেয়েছি।

প্রথম ক্লোন / পথ / থেকে / স্বাভাবিক / repo.gov নামে একটি বেয়ার repo তে repo

git clone --bare /path/to/normal/repo

পরবর্তীটি মূল / অপসারণ / স্বাভাবিক / রেপোতে নির্দেশ করে এমন উত্সটি সরান

cd repo.git
git remote rm origin

অবশেষে আপনি আপনার মূল repo অপসারণ করতে পারেন। আপনি repo.git নামটি পুনঃনামকরণ করতে পারেন যে সময়ে, কিন্তু একটি গিট রিপোজিটরি সংকেত করার জন্য আদর্শ কনভেনশন something.git হয়, তাই আমি ব্যক্তিগতভাবে যেভাবে ছেড়ে যাব।

একবার আপনি এটি সম্পন্ন করেছেন, আপনি আপনার নতুন বেন রেপো ক্লোন করতে পারেন (যা প্রভাবশালী একটি সাধারণ রেপো তৈরি করে এবং এটি কিভাবে আপনি একে অপরের থেকে স্বাভাবিক রূপে রূপান্তর করবেন)

অবশ্যই যদি আপনার অন্য আপস্ট্রিম থাকে, তবে আপনি তাদের একটি নোট তৈরি করতে চান এবং এটি অন্তর্ভুক্ত করতে আপনার বেন রেপো আপডেট করতে পারেন। কিন্তু আবার, এটা সব git কমান্ড দিয়ে সম্পন্ন করা যাবে। মনে রাখবেন মানুষ পৃষ্ঠা আপনার বন্ধু।


আপনার পদ্ধতি এটি কাজ করবে বলে মনে হচ্ছে; একটি বেয়ার রিপোজিটরির ফাইল স্ট্রাকচারটি .git ডিরেক্টরিের ভিতরেই রয়েছে। কিন্তু কোন ফাইল আসলে পরিবর্তিত হলে আমি জানি না, তাই যদি এটি ব্যর্থ হয় তবে আপনি তা করতে পারেন

git clone --bare /path/to/repo

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


আমি উত্তরগুলো পড়েছি এবং আমি এটা করেছি:

cd repos
mv .git repos.git
cd repos.git
git config --bool core.bare true # from another answer
cd ../
mv repos.git ../
cd ../
rm -rf repos/ # or delete using a file manager if you like

এই repos/.git হিসাবে repos/.git বিষয়বস্তু ছেড়ে চলে repos.git


আমি একটি লিখিত ফাইল পড়তে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করেছি যা আমার সমস্ত SVN repos এর একটি তালিকা আছে এবং সেগুলিকে জিআইটি রূপে রূপান্তরিত করে, এবং পরে গিট ক্লোন - বায়ার ব্যবহার করে একটি বেয়ার গিট রেপো রূপান্তর করতে

#!/bin/bash
file="list.txt"
while IFS= read -r repo_name
do
 printf '%s\n' "$repo_name"
 sudo git svn clone --shared --preserve-empty-dirs --authors-file=users.txt file:///programs/svn/$repo_name 
 sudo git clone --bare /programs/git/$repo_name $repo_name.git
 sudo chown -R www-data:www-data $repo_name.git
 sudo rm -rf $repo_name
done <"$file"

list.txt বিন্যাস আছে

repo1_name
repo2_name

এবং users.txt বিন্যাস আছে

(no author) = Prince Rogers <[email protected]org>

www-data Apache ওয়েব সার্ভার ব্যবহারকারী, HTTP এ পরিবর্তনগুলি ধাক্কা দেওয়ার জন্য অনুমতি প্রয়োজন


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

(1) Backup, just in case.
    (a) > mkdir backup
    (b) > cd backup
    (c) > git clone ../repo
(2) Make it bare, then move it
    (a) > cd ../repo
    (b) > git config --bool core.bare true
    (c) > mv .git ../repo.git
(3) Confirm the bare repository works (optional, since we have a backup)
    (a) > cd ..
    (b) > mkdir test
    (c) > cd test
    (d) > git clone ../repo.git
(4) Clean up
    (a) > rm -Rf repo
    (b) (optional) > rm -Rf backup/repo
    (c) (optional) > rm -Rf test/repo


এখানে একটি ছোট বাশ ফাংশন রয়েছে যা আপনি UNIX ভিত্তিক সিস্টেমে আপনার .bashrc বা প্রোফাইলে যুক্ত করতে পারেন। একবার যোগ করা হয় এবং শেলটি পুনরায় আরম্ভ করা হয় অথবা ফাইলটি source ~/.profile বা source ~/.bashrc মাধ্যমে পুনরায় লোড করা হয়।

function gitToBare() {
  if [ -d ".git" ]; then
    DIR="`pwd`"
    mv .git ..
    rm -fr *
    mv ../.git .
    mv .git/* .
    rmdir .git

    git config --bool core.bare true
    cd ..
    mv "${DIR}" "${DIR}.git"

    printf "[\x1b[32mSUCCESS\x1b[0m] Git repository converted to "
    printf "bare and renamed to\n  ${DIR}.git\n"
    cd "${DIR}.git"
  else
    printf "[\x1b[31mFAILURE\x1b[0m] Cannot find a .git directory\n"
  fi
}

একবার .git ডিরেক্টরি ধারণকারী ডিরেক্টরিের মধ্যে ডাকা হলে, এটি রিপোজিটরি রূপান্তর করতে যথাযথ পরিবর্তনগুলি করবে। যখন কোন .git ডিরেক্টরি উপস্থিত থাকে তখন উপস্থিত হবে, একটি ব্যর্থ বার্তা উপস্থিত হবে এবং কোনও ফাইল সিস্টেম পরিবর্তন ঘটবে না।


প্রথম, আপনার বিদ্যমান repo backup :

(a)  mkdir backup

(b)  cd backup

(c)  git clone non_bare_repo

দ্বিতীয়, নিম্নলিখিত চালান:

git clone --bare -l non_bare_repo new_bare_repo

ব্যবহার করার জন্য বিবেচনা করুন

git clone --mirror path_to_source_repository

documentation থেকে:

উৎস সংগ্রহস্থলের একটি আয়না সেট আপ করুন। এই বোঝায় - বিড়াল। --বেয়ারের তুলনায়, --mirror শুধুমাত্র উৎসের স্থানীয় শাখায় লক্ষ্য করে স্থানীয় শাখার মানচিত্রগুলি নেন না, এটি সমস্ত রেফারেন্স (রিমোট-ট্র্যাকিং শাখা, নোট ইত্যাদি সহ) ম্যাপ করে এবং একটি রেফস্পেক কনফিগারেশন সেট করে যাতে এই সমস্ত রেফারেন্সগুলি টার্গেট সংগ্রহস্থলের একটি গিট রিমোট আপডেট দ্বারা overwritten হয়।


যদি আপনার কয়েকটি স্থানীয় চেকআউট শাখা / রেফ / হেড / * এবং কয়েক রিমোট শাখা শাখাগুলি রিমোট / মূল / * সহ একটি সংগ্রহস্থল থাকে এবং যদি আপনি এটিতে সব শাখায় / রেফস / হেডস / * এ একটি শুল্ক সংগ্রহস্থল রূপান্তর করতে চান

আপনি ইতিহাস সংরক্ষণ করতে নিম্নলিখিত কাজ করতে পারেন।

  1. একটি বেয়ার সংগ্রহস্থল তৈরি করুন
  2. সিডি স্থানীয় ভাণ্ডারে স্থানীয় চেকআউট শাখা এবং দূরবর্তী শাখায় রয়েছে
  3. গিট ধাক্কা / পথ / থেকে / বে bare / repo + refs / remotes / origin / : refs / head /

সংক্ষেপে: repo/.git এর বিষয়বস্তু সহ repo বিষয়বস্তু প্রতিস্থাপন করুন, তারপরে রিপোজিটরিটি বলুন যে এটি এখন একটি repo/.git সংগ্রহস্থল।

এটি করার জন্য নিম্নলিখিত কমান্ডটি চালান:

cd repo
mv .git ../repo.git # renaming just for clarity
cd ..
rm -fr repo
cd repo.git
git config --bool core.bare true

উল্লেখ্য যে এটি একটি নতুন git clone --bare একটি git clone --bare করতে ভিন্ন - নীচে দেখুন (নীচে দেখুন)।







git-non-bare-repository