বিভিন্ন প্রকল্পের জন্য কি আলাদা গিট কনফিগারেশন থাকা সম্ভব?


313

.gitconfigসাধারণত user.homeডিরেক্টরিতে সঞ্চিত থাকে ।

আমি কোম্পানির এ এবং কোম্পানি বি এর জন্য অন্য কিছু (প্রাথমিকভাবে নাম / ইমেল) এর প্রকল্পগুলিতে কাজ করতে আলাদা পরিচয় ব্যবহার করি। আমার চেক-ইনগুলি নাম / ইমেলের সাথে যাতে না যায় সে জন্য কীভাবে আমার দুটি পৃথক গিট কনফিগারেশন থাকতে পারে?

উত্তর:


263

.git/configএকটি সংগ্রহস্থলের একটি বিশেষ ক্লোন মধ্যে যে ফাইলটি ক্লোন স্থানীয় নয়। সেখানে স্থাপন করা কোনও সেটিংস কেবলমাত্র সেই নির্দিষ্ট প্রকল্পের ক্রিয়াগুলিকেই প্রভাবিত করবে।

(ডিফল্টরূপে, git configসংশোধন করে .git/config, তা নয় ~/.gitconfig- কেবল --globalএটি পরবর্তীকে সংশোধন করে))


সুতরাং, রেপো নিজেই কনফিগারেশনের কনফিগার ফাইলটি পরিবর্তন করতে পারে, উদাহরণস্বরূপ [user] email = ...ব্লক পরিবর্তন করা , বিশ্বব্যাপী ওভাররাইড করবে ~/.gitconfig- এবং এটি কি কেবল আপনার ব্যবহারকারীর জন্য?
dcsan

281

গিট কনফিগারেশনের 3 স্তর রয়েছে; প্রকল্প, গ্লোবাল এবং সিস্টেম।

  • প্রকল্প : প্রকল্প কনফিগারগুলি কেবলমাত্র বর্তমান প্রকল্পের জন্য উপলব্ধ এবং প্রকল্পের ডিরেক্টরিতে .git / কনফিগারেশনে সংরক্ষিত।
  • গ্লোবাল : গ্লোবাল কনফিগারেশন বর্তমান ব্যবহারকারীর জন্য সমস্ত প্রকল্পের জন্য উপলব্ধ এবং ~ / .gitconfig এ সঞ্চিত।
  • সিস্টেম : সিস্টেম কনফিগারেশন সমস্ত ব্যবহারকারী / প্রকল্পের জন্য উপলব্ধ এবং / etc / gitconfig এ সঞ্চিত।

একটি প্রকল্প নির্দিষ্ট কনফিগারেশন তৈরি করুন, আপনাকে প্রকল্পের ডিরেক্টরিতে এটি সম্পাদন করতে হবে:

$ git config user.name "John Doe" 

একটি বৈশ্বিক কনফিগারেশন তৈরি করুন:

$ git config --global user.name "John Doe"

একটি সিস্টেম কনফিগারেশন তৈরি করুন:

$ git config --system user.name "John Doe" 

এবং আপনি অনুমান করতে পারেন, প্রকল্পটি গ্লোবাল এবং গ্লোবাল ওভাররাইড সিস্টেমকে ওভাররাইড করে।


68
কিছু "ডিরেক্টরি" কনফিগার করার সম্ভাবনা আছে কি? আমি বাড়িতে কিছু কাজ করি এবং কাজের প্রকল্পগুলি এবং আমার নিজস্ব ফোল্ডার পেয়েছি। সুতরাং আমি ফোল্ডারগুলি পেয়েছি job / কাজ এবং ~ / আমার গিট রেপো সহ এবং তাদের অধীনে প্রকল্পগুলির জন্য বিভিন্ন কনফিগার চাই। উদাহরণস্বরূপ জব / প্রজেক্ট 1 জব / .gitconfig থেকে কনফিগার করেছে।
সার্জ 18

2
@ সার্জ আপনি কি কখনও আবিষ্কার করেছিলেন যে কোনও ডিরেক্টরি স্তর কনফিগারেশন তৈরি করা সম্ভব ছিল? আমার এখনই একই সমস্যা আছে।
প্রশ্ন করা হচ্ছে

2
না আমি সামগ্রিক সিস্টেমের কনফিগারটিকে ব্যক্তিগত ডেটাতে সেট করি না এবং এক কমান্ডের মধ্যে নির্দিষ্ট প্রকল্প কনফিগারে কাজের ডেটা সেট করতে বাশ স্ক্রিপ্ট তৈরি করি।
সার্জ

1
সংযোজন হিসাবে: কেবল git config user.nameবা git config user.emailআপনাকে দেখাবে যে নাম বা ইমেল গিট বর্তমান শ্বাস প্রশ্বাসের জন্য ব্যবহার করবে।
অভিষেক দিভেকার

1
আমি zsh এর জন্য এটি শেষ করেছি : gist.github.com/pgarciacamou/3b67320e2940c8d7fa3d7bbd73873106 , আমি আশা করি এটি কারও সাহায্য করবে।
pgarciacamou

219

গিট সংস্করণ 2.13 হিসাবে, গিট শর্তযুক্ত কনফিগারেশন অন্তর্ভুক্ত সমর্থন করে । এই উদাহরণে আমরা কোম্পানির এ এর ​​রেপো ~/company_aডিরেক্টরিতে ক্লোন করেছি এবং কোম্পানির বি এর রেপোগুলিতে ~/company_b

আপনার মধ্যে .gitconfigআপনি এই মত কিছু রাখতে পারেন।

[includeIf "gitdir:~/company_a/"]
  path = .gitconfig-company_a
[includeIf "gitdir:~/company_b/"]
  path = .gitconfig-company_b

.Gitconfig-company_a এর সামগ্রীগুলির উদাহরণ

[user]
name = John Smith
email = john.smith@companya.net

.Gitconfig-company_b এর সামগ্রীগুলির উদাহরণ

[user]
name = John Smith
email = js@companyb.com

1
এটি ভার্সন 2.13 সংস্করণে যুক্ত করা হয়েছে তা দেখে দুর্দান্ত। আমি কিছুক্ষণের জন্য github.com/bddenhartog/git- প্রোফাইলে ব্যবহার করে আসছি , তবে টাওয়ারের সাথে কাজ করতে পারিনি couldn't
এড্রাম

4
অন্তর্ভুক্তযদি কিছুটা চিকিত্সা করা হয় তা দেখুন: stackoverflow.com/questions/43919191/…
রুবেল

আপনি যে ডকুমেন্টেশন পৃষ্ঠাটির সাথে লিঙ্ক করেছেন সেটি উল্লেখ করে না ... আসলে, অন্তর্ভুক্ত অনুসন্ধানে ডকুমেন্টেশনের কোনও ফল পাওয়া যায় না
টমাস লেভসেক

1
পছন্দ করুন আমি নিশ্চিত যে এটি এর আগে এটি সম্পর্কে কিছু বলেছিল। আপনি এটি চেঞ্জলগ github.com/git/git/blob/master/Docamentation/RelNotes/… এ এবং কার্নেল
pub/

2
@ জোসেফলস্ট আপনাকে গিট> = 2.13 ইনস্টল করতে হবে (উবুন্টু 16.04 এর গিট 2.7 রয়েছে) । মাধ্যমে Git এর সাম্প্রতিক সংস্করণ পান গীত পিপিএ এবং এটি কাজ করবে :)
Cas

23

ধন্যবাদ @ ক্রিয়া 1

একটি ছোট রূপ:

যেমনটি https://git-scm.com/docs/git-config এ লেখা আছে__ সমেত :

প্যাটার্ন দিয়ে শেষ হয় তাহলে /, **স্বয়ংক্রিয়ভাবে যোগ করা হবে। উদাহরণস্বরূপ, প্যাটার্নটি foo/হয়ে যায় foo/**। অন্য কথায়, এটি মেলে fooএবং ভিতরে সমস্ত কিছু, পুনরাবৃত্তভাবে।

তাই আমি আমার ক্ষেত্রে,
~ / .gitconfig ব্যবহার করি :

[user] # as default, personal needs
    email = myalias@personal-domain.fr
    name = bcag2
[includeIf "gitdir:~/workspace/"] # job needs, like workspace/* so all included projects
    path = .gitconfig-job

# all others section: core, alias, log…

সুতরাং যদি প্রকল্প ডিরেক্টরিটি আমার হয় ~/wokspace/, ডিফল্ট ব্যবহারকারী সেটিংস
~ / .gitconfig-w এর সাথে প্রতিস্থাপন করা হয় :

[user]
name = John Smith
email = js@company.com

এটি হয়ে গেছে, এখন সঠিক ব্যবহারকারীর নাম এবং ইমেল বিভিন্ন ডিরেক্টরিতে সেট করা আছে। আমি যখন গিট কনফিগারেশন ব্যবহারকারীর নাম / গিট কনফিগারেশন ব্যবহার করি e তবে আমি ব্যক্তিগত রেপোতে যখন মন্তব্য করি তখন এটি সর্বদা বিশ্বব্যাপী অফিশিয়াল ইউজারনেম ইমেলটি
তুলবে

@ ভূপেন্দ্র আমার নমুনায়, .gitconfig এবং .gitconfig- কাজটি আমার ডিরেক্টরিতে রয়েছে প্রকল্পের ডিরেক্টরিতে নয়। আপনার কি দু'জনের বেশি দরকার? আপনি কি আপনার হোম ডিরেক্টরিতে .gitconfig-alternativ তৈরি করেছেন, আমার নমুনায় আমার .gitconfig- কাজ হিসাবে, 3 টি লাইন।
বিসিএজি 2

@ বিসিএজি 2 আমিও উপরে বর্ণিত একই উদাহরণ অনুসরণ করেছি। আমার কাছে 2 টি কনফিগার ডিফল্টরূপে কাজ করেছে এবং gitconfig- কাজের মতো ব্যক্তিগত। আমি যখন ব্যক্তিগত ডিরেক্টরিতে থাকি, গিট কনফিগারেশনে ব্যবহারকারীর নাম আমাকে সঠিক নাম দেয় তবে প্রতিশ্রুতিটি চাপানোর জন্য এটি ডিফল্ট লাগে যখন আমার ব্যক্তিগত প্রয়োজন।
swapnil2993

@ swapnil2993 প্রথমে আমি পাথ ইস্যুতে ভাবি কিন্তু যদি সঠিকভাবে git config user.nameফিরে আসে তবে তা ঠিক হওয়া উচিত। আপনি কি জিএনইউ / লিনাক্স বা অন্যান্য ওএসের অধীনে রয়েছেন?
বিসিএজি

@ বিসিএজি 2 সমস্যা সমাধান করেছে olved স্রেফ পথ সংশোধন করেছেন। তবে গিট কনফিগারেশন ব্যবহারকারীর নাম সঠিক মানটি অদ্ভুত ছিল। উত্তরের জন্য ধন্যবাদ.
swapnil2993

13

স্পষ্টতই, আপনি বর্তমান সংগ্রহস্থল কনফিগারেশন ফাইলটি ব্যবহার --localকরতে পারেন :

git config --local user.name "John Doe" 

12

আপনি GIT_CONFIGএমন একটি ফাইলের জন্য পরিবেশের পরিবর্তনশীলকেও নির্দেশ করতে পারেন যা git configব্যবহার করা উচিত। সঙ্গে GIT_CONFIG=~/.gitconfig-A git config key valueনির্বাচিত ফাইল কাজে ব্যবহৃত হয়।


2
Cool; কিছুটা চালাক শেল ম্যাজিকের সাহায্যে এটি জিনিসগুলি সেট আপ করতে ব্যবহার করা যেতে পারে তাই গিট প্রথমটিকে বেছে নিয়ে যায় ধন্যবাদ!
ইকমানাট

1
এই শেল যাদুতে আপনার কি কোনও লিঙ্ক আছে যা এটি করে? কার্যকর লাগছে!
pchiusano

1
@pchiusano এখানে মাছের এটি একটি প্রাথমিক সংস্করণ github.com/CtrlC-Root/dotfiles/blob/master/.config/fish/...
ctrlc-রুট

একটি সহজ সমাধানের জন্য আপনাকে ধন্যবাদ যার জন্য কেবল একটি পরিবেশের পরিবর্তনশীল পরিবর্তন প্রয়োজন।
নোহ সুসমান 21

এটি এখন কেবল গিট কনফিগার কমান্ডকেই প্রভাবিত করবে github.com/git/git/blob/master/Docamentation/RelNotes/…
foray1010

12

আমি আমার ইমেলের জন্য নিম্নলিখিত উপায়ে এটি করছি:

git config --global alias.hobbyprofile 'config user.email "me@example.com"'

তারপরে যখন আমি একটি নতুন কাজের প্রকল্প ক্লোন করব তখন আমার কেবল চালানো git hobbyprofileহবে এবং এটি ইমেলটি ব্যবহারের জন্য কনফিগার করা হবে।


3

আর একটি উপায় হ'ল ডিরেক্টনভ ব্যবহার করা এবং ডিরেক্টরি অনুসারে কনফিগার করা ফাইলগুলি আলাদা করা। উদাহরণ স্বরূপ:

.
├── companyA
│  ├── .envrc
│  └── .gitconfig
├── companyB
│  ├── .envrc
│  └── .gitconfig
└── personal
   ├── .envrc
   └── .gitconfig

প্রত্যেকের .envrcমধ্যে এই জাতীয় কিছু থাকা উচিত:

export GIT_CONFIG=$(pwd)/.gitconfig

এবং .gitconfigপছন্দসই মান সহ স্বাভাবিক গিটকনফিগ।


2

সংগ্রহস্থল নির্দিষ্ট কনফিগারেশন ফাইল (যেমন /path/to/repo/.git/config) পরিবর্তন করে আপনি কোনও প্রকল্পের গিট কনফিগার করতে পারেন । বিটিডাব্লু, git configডিফল্টরূপে এই ফাইলটিতে লিখেছেন:

cd /path/to/repo
git config user.name 'John Doe'  # sets user.name locally for the repo

আমি বিভিন্ন প্রকল্পের জন্য পৃথক প্রোফাইল তৈরি করতে পছন্দ করি (উদাহরণস্বরূপ ~/.gitconfig.d/) এবং তারপরে সেগুলি সংগ্রহস্থলের কনফিগ ফাইলে অন্তর্ভুক্ত করুন:

cd /path/to/repo
git config include.path '~/.gitconfig.d/myproject.conf'

আপনি যদি একক প্রকল্পের অন্তর্ভুক্ত একাধিক রেপোতে একই বিকল্পগুলির সেট ব্যবহার করতে চান তবে এটি ভাল কাজ করে। প্রোফাইলগুলি ম্যানিপুলেট করতে আপনি শেল এলিয়াস বা একটি কাস্টম গিট কমান্ডও সেট আপ করতে পারেন।


0

আমি একই নৌকায় আছি সেগুলি পরিচালনা করার জন্য আমি একটি সামান্য বাশ স্ক্রিপ্ট লিখেছিলাম। https://github.com/thejeffreystone/setgit

#!/bin/bash

# setgit
#
# Script to manage multiple global gitconfigs
# 
# To save your current .gitconfig to .gitconfig-this just run:
# setgit -s this
#
# To load .gitconfig-this to .gitconfig it run:
# setgit -f this
# 
# 
# 
# Author: Jeffrey Stone <thejeffreystone@gmail.com>

usage(){
  echo "$(basename $0) [-h] [-f name]" 
  echo ""
  echo "where:"
  echo " -h  Show Help Text"
  echo " -f  Load the .gitconfig file based on option passed"
  echo ""
  exit 1  
}

if [ $# -lt 1 ]
then
  usage
  exit
fi

while getopts ':hf:' option; do
  case "$option" in
      h) usage
         exit
         ;;
      f) echo "Loading .gitconfig from .gitconfig-$OPTARG"
         cat ~/.gitconfig-$OPTARG > ~/.gitconfig
         ;;
      *) printf "illegal option: '%s'\n" "$OPTARG" >&2
         echo "$usage" >&2
         exit 1
         ;;
    esac
done

এখানে আপনার স্ক্রিপ্টটি বাশ-এ রয়েছে, যদিও গিথুব-এ আপনার পাইথন সংস্করণ রয়েছে। এছাড়াও -sআপনার ব্যাশ স্ক্রিপ্টের মধ্যে ঘাঁটা নয়।
ভাদিম কোতোভ

0

git stashআমার স্থানীয় পরিবর্তনগুলি চেষ্টা করার সময় আমার একটি ত্রুটি হয়েছিল । গিটের ত্রুটিটি বলেছিল "দয়া করে আপনি কে আমাকে বলুন" এবং তারপরে আমাকে "চালান git config --global user.email "you@example.comএবং git config --global user.name "Your name"আপনার অ্যাকাউন্টের ডিফল্ট পরিচয় সেট করতে" বলেছিলেন । তবে কেবলমাত্র আপনার বর্তমান সংগ্রহস্থলে পরিচয় সেট করতে আপনাকে অবশ্যই গ্লোবালকে ছাড়তে হবে ।

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