একাধিক সংগ্রহস্থল জুড়ে গিট কনফিগারেশন সেট করা যেতে পারে?


18

গিটটি তিনটি স্তরে কনফিগারেশন মানগুলিকে সমর্থন করে বলে মনে হচ্ছে:

  • প্রতি-সিস্টেমের বিশ্বব্যাপী সেটিংস (এতে সঞ্চিত /etc/git-core)
  • প্রতি ব্যবহারকারী গ্লোবাল সেটিংস (এতে সঞ্চিত ~/.gitconfig)
  • প্রতি-সংগ্রহস্থল স্থানীয় সেটিংস (এতে সঞ্চিত $REPO/.git/config)

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

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


আমার প্রথম প্রতিচ্ছবি হ'ল স্ক্রিপ্টগুলি .gitconfigতারা তৈরি প্রতিটি ডিরেক্টরিতে টুইঙ্ক করতে hack উদাহরণস্বরূপ, আইআইআরসি অ্যান্ড্রয়েডের রেপো এটি করতে পারে তবে এটি খুঁজে পেতে আপনাকে উত্সটি মনোযোগ সহকারে পড়তে হবে। (আমি পুরোপুরি নিশ্চিত নই, কিছুক্ষণের মধ্যে আমি এটি করিনি))
গিলস 'দুষ্ট হওয়া বন্ধ করুন'

@ গিলস: এটি অবশ্যই একটি সম্ভাবনা। প্রশ্নাবলীর ভাণ্ডারগুলি হ'ল লিনাক্স ডিস্ট্রোর প্যাকেজ সংগ্রহস্থল যা সম্প্রতি সিভিএস থেকে গিটে স্থানান্তরিত হয়েছে। আমরা এখনও আমাদের সমস্ত সরঞ্জামাদি পুনরায় করাতে কাজ করছি। দীর্ঘমেয়াদে সম্ভবত এটি যেখানে এটি স্থির হয় তবে স্বল্পমেয়াদে আমাদের মধ্যে যারা এটিতে কাজ করছেন তারা বিকল্পগুলি কী তা নিয়ে পরীক্ষা-নিরীক্ষা করছেন।
কালেব

উত্তর:


11

এই চতুর্থ স্তরে আমি গিটটি কনফিগার করার কোনও উপায় খুঁজে পাইনি। একমাত্র উপায় হ'ল প্রতি-কমান্ড কনফিগারেশন মান ব্যবহার করে ওভাররাইডগুলি git -c key=value

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

function git () {
    case "$PWD" in
        /path/to/repos/*)
            command git -c user.email=alternate@credentials.org "$@"
            ;;
        *)
            command git "$@"
            ;;
    esac
}

আমি কি করতে পারি command git -c user.email=alternate@credentials.org user.name="Alter Ego" "$@"বা আমার কীভাবে এটি করা উচিত? উচ্চ ও নিম্ন অনুসন্ধান করা হয়েছে এবং আমি খুঁজে পেয়েছি এই সি-ফ্ল্যাগের একমাত্র উল্লেখটি আপনার ছিল, ধন্যবাদ, অনেক প্রশংসিত।
ভিক গোল্ডফিল্ড

রেকর্ডটির জন্য, আমি এটির সাথে কাজ করতে পেরেছিcommand git -c user.email=alternate@credentials.org -c user.name="Alter Ego" "$@"
ভিক গোল্ডফিল্ড

6

আপনি পরিবেশ পরিবর্তনশীল সহ গিটের জন্য ইমেল ঠিকানাটি কনফিগার করতে পারেন GIT_AUTHOR_EMAIL। যদি আপনি zsh এর সাথে ডিরেক্টরি বা ডিরেক্টরি নির্দিষ্ট শেল কনফিগারেশন প্রবেশের সময় বাশ স্ক্রিপ্টগুলি এক্সিকিউট করে আপনি সহজেই প্রতিটি ডিরেক্টরি বা পিতামহিত ডিরেক্টরি অনুসারে সেটিংস পরিবর্তন করতে পারেন, উদাহরণস্বরূপ আপনি যদি কোনও ডিরেক্টরিতে প্রবেশ করেন তবে আপনি ~/workনিজের ইমেল পরিবর্তন করতে স্বয়ংক্রিয়ভাবে পরিবেশের ভেরিয়েবল সামঞ্জস্য করতে পারবেন ঠিকানা।


2

গিট কনফিগারেশনের উপর ভিত্তি করে সমাধানটি দেখুন:

http://gik.firetrot.com/index.php/2018/05/06/git-configuration-across-multiple-repositories/

"~ / .Gitconfig" ফাইলটিতে যুক্ত করুন:

    [includeIf "gitdir:~/work/project1/.git"]  
      path = .gitconfig-project1  

সামগ্রী সহ "। / .Gitconfig-پروژې1 project ফাইল তৈরি করুন:

    [core]  
      sshCommand = "ssh -i ~/.ssh/project1 -F /dev/null"  

    [user]  
      name = user1  
      email = user1@email.com  

"অন্তর্ভুক্তআইফ" প্রিডিটিক আমার মাথাব্যথা বাঁচায়!
ট্রুং নগুইন

1

কালেবের উত্তরের ভিত্তিতে আমরা একটি পরিবর্তিত gitকমান্ড সংজ্ঞায়িত করতে পারি যা এই ডিরেক্টরিতে থাকা সমস্ত সংগ্রহস্থলকে স্থায়ীভাবে কনফিগার করে, যাতে ভ্যানিলা গিটের ভবিষ্যতের সমস্ত ব্যবহার নতুন কনফিগারেশন ব্যবহার করে। আমি ব্যবহার করি hubযা অন্য গিট র‍্যাপার, তাই আমি এটি alias git=hubদিয়ে আমার প্রতিস্থাপন করেছি hubএবং আমার ফাংশনে ডেকেছি - আপনি যদি ব্যবহার না করেন তবে hubসমস্ত hubঅনুরোধগুলি এর সাথে প্রতিস্থাপন করুন command git:

function git() {
    case "$PWD" in
        /home/robin/git/3RD_PARTY)
            hub "$@"
            # We don't know which repository was cloned / operated on, so let's just reconfigure them all
            for f in *; do
                [[ -d "$f" ]] && hub -C "$f" config user.email $my_private_email
            done
            ;;
        /home/robin/git/3RD_PARTY/*)
            hub "$@"
            hub config user.email $my_private_email
            ;;
        *)
            hub "$@"
            ;;
    esac
}

কালেবের জবাবের বিপরীতে, যা কেবল শেলটিতে কাজ করে (এবং স্পষ্টভাবে উত্সাহিত না করে কেবলমাত্র একটি ইন্টারেক্টিভ শেলের মধ্যে), এটি অন্যান্য গিট ফ্রন্ট-এন্ডগুলিকেও প্রভাবিত করে যা গিট কনফিগারেশন যেমন ইম্যাক্স ম্যাগিটকে সঠিকভাবে পাঠ করে read

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