source

.gitconfig에서 여러 사용자를 지정할 수 있습니까?

manysource 2023. 4. 15. 09:03

.gitconfig에서 여러 사용자를 지정할 수 있습니까?

의 마마 my에서는~/.gitconfig 이메일 는 '제 개인 이메일 주소' 되어 있습니다[user]Github 저장소

하지만 최근에는 일에도 git을 사용하기 시작했습니다.우리 회사의 git repo는 내가 커밋할 수 있게 해주지만, 새로운 변경사항의 공지를 보낼 때, 그것은 내 이메일 주소를 인식하지 못하기 때문에 Anonymous에서 왔다고 말한다..gitconfig내 - 내 이론이야.

개의 " " " " " " " 를 지정할 수 ?[user].gitconfig인 'Default'를 수 .gitconfig떤떤디??디 ???도 다 요.~/worksrc/을 지정하는 방법이 요? - 을 해 주세요..gitconfig그 디렉토리(및 그 서브 디렉토리)에 대해서만요?

글로벌 구성을 재정의하는 특정 사용자/전자 메일 주소를 사용하도록 개별 보고서를 구성할 수 있습니다.리포의 근원부터

git config user.name "Your Name Here"
git config user.email your@email.com

기본 사용자/이메일은 ~/.syslogconfig로 설정되어 있습니다.

git config --global user.name "Your Name Here"
git config --global user.email your@email.com

git 2.13 이후 새롭게 도입된 Conditional includes를 사용하여 해결할 수 있습니다.

예:

글로벌 설정 ~/.gitconfig

[user]
    name = John Doe
    email = john@doe.tld

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

작업 고유의 구성 ~/work/.gitconfig

[user]
    email = john.doe@company.tld

하세요.[includeIf...]는 디폴트 「Default(디폴트)」를 합니다.[user]맨 위에.

지역별로 ..git/config

[user]  
    name = Your Name
    email = your.email@gmail.com

github 계정 스위치 명령어 1개

이 솔루션은 단일 git 에일리어스의 형태를 취합니다.실행되면 현재 프로젝트 사용자가 다른 계정에 연결됩니다.

ssh 키 생성

ssh-keygen -t rsa -C "rinquin.arnaud@gmail.com" -f '/Users/arnaudrinquin/.ssh/id_rsa'

[...]

ssh-keygen -t rsa -C "arnaud.rinquin@wopata.com" -f '/Users/arnaudrinquin/.ssh/id_rsa_pro'

GitHub/Bitbucket 계정에 링크합니다.

  1. " " "pbcopy < ~/.ssh/id_rsa.pub
  2. GitHub acount 로그인
  3. 를 꽂다add SSH key pagegithub g g g
  4. 키를 pbcopy < ~/.ssh/id_rsa_pro.pub
  5. 다른 모든 계정에 대해 2~4단계를 반복하고 조정합니다.

스텝 1. 자동 SSH 키 전환.

할 수 있습니다.ssh 특정 host 개 수 hostname.

예에서는, 「」를 참조해 주세요.~/.ssh/config 삭제:

# Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

# Professional github alias
Host github_pro
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_pro

git 리모트 설정

에서는, 「git」를 해, 할 수 .git@github.com타타에 git@github_pro.

할 수 과 같이 변경).git remote set-url origin git@github_pro:foo/bar.git을 사용하다

git clone git@github.com:ArnaudRinquin/atom-zentabs.git

에일리어스를 사용하면 다음과 같이 됩니다.

git clone git@github_pro:ArnaudRinquin/atom-zentabs.git

스텝 2. git user.email 변경

Git 구성 설정은 글로벌 또는 프로젝트별로 설정할 수 있습니다.이 경우 프로젝트별 설정이 필요합니다.변경은 매우 간단합니다.

git config user.email 'arnaud.rinquin@wopata.com'

이것은 간단하지만, 델의 개발자에게는 오랜 시간이 걸립니다.우리는 그것에 대해 매우 간단한 git 에일리어스를 쓸 수 있다.

, 그럼 이제 이 해 보겠습니다.~/.gitconfigfilename을 클릭합니다.

[user]
    name = Arnaud Rinquin
    email = rinquin.arnaud@gmail.com

...

[alias]
    setpromail = "config user.email 'arnaud.rinquin@wopata.com'"

이제 가 해야 할 은 '우리'만 돼요.git setpromail이 프로젝트에 대해서만 이메일을 변경하도록 하겠습니다.

3단계 명령 스위치 하나!

기본 계정에서 지정된 계정으로 단일 매개 변수 없는 명령으로 전환하면 좋지 않을까요?이것은 확실히 가능합니다.이 명령어에는 다음 두 가지 단계가 있습니다.

  • 현재 프로젝트 리모컨을 선택한 별칭으로 변경
  • 현재 프로젝트 user.email 구성 변경

두 번째 단계에는 이미 하나의 명령어 솔루션이 있지만 첫 번째 단계는 훨씬 어렵습니다.리모트 호스트 변경 명령어 1개

에서는 다른 하여 git alias에 git alias를 합니다.~/.gitconfig:

[alias]
  changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"

이것에 의해, 호스트간에(에일리어스) 모든 리모트를 변경할 수 있습니다.예를 참조해 주세요.

$ > git remote -v
origin  git@github.com:ArnaudRinquin/arnaudrinquin.github.io.git (fetch)
origin  git@github.com:ArnaudRinquin/arnaudrinquin.github.io.git (push)

$ > git changeremotehost github.com github_pro

$ > git remote -v
origin  git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (fetch)
origin  git@github_pro:ArnaudRinquin/arnaudrinquin.github.io.git (push)

그것들을 모두 합치다

이제 두 명령을 하나로 결합하면 됩니다. 이 작업은 매우 쉽습니다.비트 버킷호스트 스위칭도 통합하는 방법을 참조해 주세요.

[alias]
  changeremotehost = !sh -c \"git remote -v | grep '$1.*fetch' | sed s/..fetch.// | sed s/$1/$2/ | xargs git remote set-url\"
  setpromail = "config user.email 'arnaud.rinquin@wopata.com'"
  gopro = !sh -c \"git changeremotehost github.com github_pro && git changeremotehost bitbucket.com bitbucket_pro && git setpromail\"

소스 링크 - Github

소스 링크 - 튜토리얼

Git 2.13에 조건부로 포함되어 있어 작업량이 적은 한 대의 머신에서 여러 명의 사용자/이메일을 공존시킬 수 있게 되었습니다.

user.gitconfig제 개인 이름과 이메일을 가지고 있습니다. work-user.gitconfig이치노 모두 에 .~syslog.syslog.

그래서 제 개인 이름/이메일이 기본적으로 적용됩니다.★★★의 c:/work/★★★의 c:/work/github/이것은, 마지막 설정이 적용되었을 때에 동작합니다.

# ~/.gitconfig
[include]
    path = user.gitconfig
[includeIf "gitdir/i:c:/work/"]
    path = work-user.gitconfig
[includeIf "gitdir/i:c:/work/github/"]
    path = user.gitconfig

gitdir를 하여 "" " " " " " " " "gitdir/i대소문자를 구분하지 않습니다.

"gitdir/i:github/"을 "포함"이 있는 합니다.github그 경로에서.

Orr Sella의 블로그 투고에서 영감을 얻은 후, 나는 프리 커밋 훅을 썼다.~/.git/templates/hooks 내의 으로 특정 및 를 설정합니다../.git/config:

는, 「템플릿 디렉토리」에 배치해 둘 가 있습니다.~/.gitconfig:

[init]
    templatedir = ~/.git/templates

나서 각각git init ★★★★★★★★★★★★★★★★★」git clone이 후크를 선택하고 다음 번에 사용자 데이터를 적용합니다.git commit " " " 를 git init다시 초기화하기 위해 리포 안에 있습니다.

여기 제가 생각해 낸 후크가 있습니다(아직도 광택이 필요하기 때문에 제안해 주시면 감사하겠습니다.다음 중 하나로 저장

~/.git/templates/hooks/pre_commit

또는

~/.git/templates/hooks/post-checkout

한 것을 합니다.chmod +x ./post-checkout || chmod +x ./pre_commit

#!/usr/bin/env bash

# -------- USER CONFIG
# Patterns to match a repo's "remote.origin.url" - beginning portion of the hostname
git_remotes[0]="Github"
git_remotes[1]="Gitlab"

# Adjust names and e-mail addresses
local_id_0[0]="my_name_0"
local_id_0[1]="my_email_0"

local_id_1[0]="my_name_1"
local_id_1[1]="my_email_1"

local_fallback_id[0]="${local_id_0[0]}"
local_fallback_id[1]="${local_id_0[1]}"


# -------- FUNCTIONS
setIdentity()
{
    local current_id local_id

    current_id[0]="$(git config --get --local user.name)"
    current_id[1]="$(git config --get --local user.email)"

    local_id=("$@")

    if [[ "${current_id[0]}" == "${local_id[0]}" &&
          "${current_id[1]}" == "${local_id[1]}" ]]; then
        printf " Local identity is:\n"
        printf "»  User: %s\n»  Mail: %s\n\n" "${current_id[@]}"
    else
        printf "»  User: %s\n»  Mail: %s\n\n" "${local_id[@]}"
        git config --local user.name "${local_id[0]}"
        git config --local user.email "${local_id[1]}"
    fi

    return 0
}

# -------- IMPLEMENTATION
current_remote_url="$(git config --get --local remote.origin.url)"

if [[ "$current_remote_url" ]]; then

    for service in "${git_remotes[@]}"; do

        # Disable case sensitivity for regex matching
        shopt -s nocasematch

        if [[ "$current_remote_url" =~ $service ]]; then
            case "$service" in

                "${git_remotes[0]}" )
                    printf "\n»» An Intermission\n»  %s repository found." "${git_remotes[0]}"
                    setIdentity "${local_id_0[@]}"
                    exit 0
                    ;;

                "${git_remotes[1]}" )
                    printf "\n»» An Intermission\n»  %s repository found." "${git_remotes[1]}"
                    setIdentity "${local_id_1[@]}"
                    exit 0
                    ;;

                * )
                    printf "\n»  pre-commit hook: unknown error\n» Quitting.\n"
                    exit 1
                    ;;

            esac
        fi
    done
else
    printf "\n»» An Intermission\n»  No remote repository set. Using local fallback identity:\n"
    printf "»  User: %s\n»  Mail: %s\n\n" "${local_fallback_id[@]}"

    # Get the user's attention for a second
    sleep 1

    git config --local user.name "${local_fallback_id[0]}"
    git config --local user.email "${local_fallback_id[1]}"
fi

exit 0

편집:

그래서 Python에서 후크를 후크와 명령어로 다시 썼습니다. 명령어Git 명령어)로수 .git passport 파일내에 ID 를 ID」).~/.gitpassport프롬프트에서 선택할 수 있습니다. 프로젝트는 github.com: git-buffer - 여러 Git 계정/사용자 ID를 관리하기 위해 Python으로 작성된 Git 명령 및 후크에서 찾을 수 있습니다.

디폴트 전자 메일주소(github 사용자에 대한 전자 메일주소 링크)를 설정하지 않는 경우는, 요구하도록 설정할 수 있습니다.그 방법은 사용하는 git 버전에 따라 다릅니다.

(의도적인) 단점은 모든 저장소에 대해 이메일 주소(및 이름)를 한 번 구성해야 한다는 것입니다.그러니까 잊지 말고 해야죠.

버전 < 2 . 7 .

[user]
    name = Your name
    email = "(none)"

의 " " " 입니다.~/.gitconfigOrr Sella의 블로그 투고에서 Dan Aloni의 코멘트에 기재되어 있습니다.저장소에서 첫 번째 커밋을 실행하려고 하면 git이 실패하고 다음 메시지가 나타납니다.

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got '(none)')

전자 메일 주소가 로컬로 설정되어 있는 경우(메시지가 완전히 정확하지 않은 경우), 글로벌Configuration에서 이름을 가져옵니다.

2.7.0 ©버전 < 2 . 8 . 0 >

버전 < 2.7.0의 동작은 의도된 것이 아니라 2.7.0에서 수정되었습니다.Orr Sella의 블로그 게시물에 설명된 대로 사전 커밋 후크를 사용할 수 있습니다.이 솔루션은 다른 버전에서도 작동하지만 다른 솔루션은 이 버전에서는 작동하지 않습니다.

버전 © 2.8.0

Dan Aloni는 이러한 행동을 달성하기 위한 옵션을 추가했습니다(릴리스 노트 참조).사용처:

[user]
    useConfigOnly = true

동작시키기 위해 글로벌Configuration에서 이름 또는 이메일주소를 지정하지 않을 수 있습니다.그러면 첫 번째 커밋에서 오류 메시지가 나타납니다.

fatal: user.useConfigOnly set but no name given

따라서 메시지는 그다지 유익하지 않지만 옵션을 명시적으로 설정했으므로 어떻게 해야 하는지 알아야 합니다.버전 2.7.0 미만의 솔루션과는 달리 이름과 이메일을 항상 수동으로 설정해야 합니다.

$ git config user.name "Your Name"
$ git config user.email "your@email.com"

현재 저장소의 이름과 이메일만 설정합니다.

「 」를 취득하기 git를 붙여야 .git 을 합니다.-c플래그를 지정하면 글로벌 및 저장소 고유의 설정이 덮어쓰게 됩니다.

예를 들어 에일리어스를 정의하면 다음과 같습니다.

alias git='/usr/bin/git -c user.name="Your name" -c user.email="name@example.com"'

하려면 , 「 」를 .git config user.email:

$ git config user.email
name@example.com

수 .git 한 파일$PATH.

#!/bin/sh
/usr/bin/git -c user.name="Your name" -c user.email="name@example.com" "$@"

고유의 「」보다 ..git/config 사람에게 입니다.git 「」의 경우, git프로그램이 활성화되어 있습니다.이렇게 하면 (공유) 설정을 변경하지 않고도 사용자/이름 간에 쉽게 전환할 수 있습니다.

여기 많은 답을 읽은 후 완료 단계가 있습니다.

서로 다른 github 계정에 대해 여러 SSH 키 설정을 설정하는 방법

현재 저장된 키 확인을 시작할 수 있습니다.

$ ssh-add -l

이전에 캐시된 모든 키를 삭제하기로 결정한 경우(선택사항, 주의사항)

$ ssh-add -D

그런 다음 사용하고 싶은 각 이메일/계정에 연결된 ssh pub/priv 키를 생성할 수 있습니다.

$ cd ~/.ssh
$ ssh-keygen -t rsa -C "work@company.com" <-- save it as "id_rsa_work"
$ ssh-keygen -t rsa -C "pers@email.com" <-- save it as "id_rsa_pers"

이 명령어를 실행하면 다음 파일이 생성됩니다.

~/.ssh/id_rsa_work      
~/.ssh/id_rsa_work.pub

~/.ssh/id_rsa_pers
~/.ssh/id_rsa_pers.pub 

인증 에이전트가 실행 중인지 확인합니다.

$ eval `ssh-agent -s`

생성된 키를 다음과 같이 추가합니다(~/.ssh 폴더에서).

$ ssh-add id_rsa_work
$ ssh-add id_rsa_pers

이제 저장된 키를 다시 확인할 수 있습니다.

$ ssh-add -l

이제 생성된 공개 키를 github/bickbuket 서버 액세스 키에 추가해야 합니다.

각 저장소를 서로 다른 폴더에 복제

사용자가 작업할 폴더로 이동하여 이 작업을 수행합니다.

$ git config user.name "Working Hard"
$ git config user.email "work@company.com" 

이 조작을 확인하려면 , 「.git/config」의 내용을 확인해 주세요.

사용자가 작업할 폴더로 이동하여 이 작업을 수행합니다.

$ git config user.name "Personal Account"
$ git config user.email "pers@email.com" 

이 조작을 확인하려면 , 「.git/config」의 내용을 확인해 주세요.

이 모든 것이 끝나면, 이러한 2개의 폴더 사이를 전환하는 것만으로, 퍼스널 코드와 워크 코드를 커밋 할 수 있습니다.

Git Bash 를 사용하고 있어, Windows 로 ssh 키를 생성할 필요가 있는 경우는, 다음의 순서에 따릅니다.

https://support.automaticsync.com/hc/en-us/articles/202357115-Generating-an-SSH-Key-on-Windows

은 @을 얻었지만, 는 @Saucier를 자동으로 .user.name ★★★★★★★★★★★★★★★★★」user.email리모콘에 근거해, 리포 단위로 보면, 이것은 그가 개발한 git-time 패키지보다 조금 가벼웠다.useConfigOnly h/t @John 。저의 솔루션은 다음과 같습니다.

.gitconfig★★★★

[github]
    name = <github username>
    email = <github email>
[gitlab]
    name = <gitlab username>
    email = <gitlab email>
[init]
    templatedir = ~/.git-templates
[user]
    useConfigOnly = true

다음 경로에 저장해야 하는 포스트 링크 후크:~/.git-templates/hooks/post-checkout:

#!/usr/bin/env bash

# make regex matching below case insensitive
shopt -s nocasematch

# values in the services array should have a corresponding section in
# .gitconfig where the 'name' and 'email' for that service are specified
remote_url="$( git config --get --local remote.origin.url )"
services=(
    'github'
    'gitlab'
)

set_local_user_config() {
    local service="${1}"
    local config="${2}"
    local service_config="$( git config --get ${service}.${config} )"
    local local_config="$( git config --get --local user.${config} )"

    if [[ "${local_config}" != "${service_config}" ]]; then
        git config --local "user.${config}" "${service_config}"
        echo "repo 'user.${config}' has been set to '${service_config}'"
    fi
}

# if remote_url doesn't contain the any of the values in the services
# array the user name and email will remain unset and the
# user.useConfigOnly = true setting in .gitconfig will prompt for those
# credentials and prevent commits until they are defined
for s in "${services[@]}"; do
    if [[ "${remote_url}" =~ "${s}" ]]; then
        set_local_user_config "${s}" 'name'
        set_local_user_config "${s}" 'email'
        break
    fi
done

저는 github과 gitlab에 대해 다른 자격 증명을 사용하지만, 위의 코드에 있는 이러한 참조는 당신이 사용하는 어떤 서비스로도 대체되거나 증강될 수 있습니다.후및 이메일을 후 로컬로 리모트 되는 것을 하고 repo의 합니다.post-checkout을 써서 ..gitconfig해당 서비스의 사용자 이름과 이메일이 포함되어 있습니다.

원격 URL에 서비스 이름이 표시되지 않거나 repo에 원격이 없는 경우 사용자 이름과 이메일은 로컬로 설정되지 않습니다., 「」는,user.useConfigOnly사용자 이름과 이메일이 repo 레벨로 설정될 때까지 커밋을 할 수 없으며 사용자에게 해당 정보를 설정하라는 메시지가 표시됩니다.

git 에일리어스(및 git 설정의 섹션)를 구하러 갑니다!

에일리어스를 추가합니다(명령줄에서):

git config --global alias.identity '! git config user.name "$(git config user.$1.name)"; git config user.email "$(git config user.$1.email)"; :'

예를 들어, 설정한다.

git config --global user.github.name "your github username"
git config --global user.github.email your@github.email

신규 또는 클론된 repo에서는 다음 명령을 실행할 수 있습니다.

git identity github

자동으로 실행되는 글로벌 및 이메일을 합니다.~/.gitconfig 설정user.useConfigOnly로로 합니다.true repo repo마다 합니다.

git config --global --unset user.name
git config --global --unset user.email
git config --global user.useConfigOnly true

모든 답을 읽은 후, 저는 다음과 같은 해결책을 찾았습니다.

시나리오:

  • 로컬 OS: Linux (베이스)
  • GitHub의 2개의 계정(직장/개인)
  • 다른 키를 사용한SSH 액세스
  • 내 워크 계정이 "메인" 계정이 되기 때문에 커스텀 구성이 필요 없습니다.

설정:

  1. 「짝퉁」호스트를 설정합니다.이를 통해 적절한 SSH 키쌍을 선택할 수 있습니다.
    ~/.ssh/config
    # Personal GitHub account
    Host github-personal
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_rsa_personal
      IdentitiesOnly yes
    
  2. 지정된 디렉토리 서브트리 내의 커스텀 구성을 사용해야 합니다.
    ~/.gitconfig
    # My personal projects
    [includeIf "gitdir/i:~/REPOS/PERSONAL/"]
       path = ~/REPOS/PERSONAL/personal.gitconfig
    
    
  3. 「 」의 설정.의 입니다.~/REPOS/PERSONAL/personal.gitconfig
    # gitconfig for personal projects
    [user]
      email = personalemail@example.com
    
    [url "git@github-personal"]
      insteadOf = git@github.com
    

위의 세 가지가 적용되면 다음과 같은 개인 보고서를 복제할 수 있습니다.

user@host:~/REPOS/PERSONAL$ git clone git@github.com:jmnavarrol/python-multigit.git
Cloning in 'python-multigit'...
(...)
user@host:~/REPOS/PERSONAL$ cd python-multigit && git remote -v
origin  git@github-personal:jmnavarrol/python-multigit.git (fetch)
origin  git@github-personal:jmnavarrol/python-multigit.git (push)
user@host:~/REPOS/PERSONAL/python-multigit$

~/REPOS/PERSONAL/personal.gitconfig

[url "git@github-personal"]
  insteadOf = git@github.com

스크립트의 「표준」URL만으로 repo를 참조할 수 있습니다(즉, python-multi-git 자체의 경우 - 네, 약간의 자기 프로모션을 시도합니다).따라서 잘못된 인증을 사용할 위험을 감수하지 않습니다.

내 의견이야.

실수를 피하는 데 효과가 있어 보이는 간단한 해결책이 있습니다.

요.[user]「」의 항을 해 주세요.~/.gitconfig '일단'을 설정하지 할수 없습니다user.name각 저장소에 대해 설명합니다.

고객님의 고객명~/.bashrc사용자 및 전자 메일의 간단한 에일리어스를 추가합니다.

alias ggmail='git config user.name "My Name";git config user.email me@gmail.com'
alias gwork='git config user.name "My Name";git config user.email me@work.job'

Windows 환경

이 가능하다, 수정이 하다.Git Extensions --> Settings --> Global Settings를 참조해 주세요.

기수 확장

이러한 설정에 액세스 하려면 , Windows 환경의 폴더/디렉토리를 오른쪽 클릭합니다. 여기에 이미지 설명 입력

업데이트: 버전 2.49에서 여러 설정을 전환/유지하는 방법

GIT_AUTHOR_EMAIL + 컬컬.bashrc

.bashrc_local이 : 이이 : : : : : : : : : : : : : : : : : : : : : : : : : : 。

export GIT_AUTHOR_EMAIL='me@work.com'
export GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"

.bashrc 및 . :이 : 、 이 : 、 : :::::: 。

F="$HOME/.bashrc_local"
if [ -r "$F" ]; then
    . "$F"
fi

https://github.com/technicalpickles/homesick을 사용하여 닷파일을 동기화합니다.

gitconfig만 환경변수를 받아들이는 경우:git 구성에서 셸 변수 확장

다음 절차를 따르기 전에 여러 ssh 키를 가지고 있어야 합니다.이 명령어를 사용하여 생성할 수 있습니다.

순서

  1. c:\users\로 이동합니다.사용자\.ssh
  2. 터치 설정
  3. 도메인별 ssh 키 구성

설정 파일

  1. gitbash를 사용하여 git repo로 이동합니다.
  2. repo 。"git config user.email="abc@gmail.com"
  3. repo마다 이름을 합니다. git config user.name="Mo Sh"
  4. git 명령어를 실행합니다.SSH 키가 자동으로 선택됩니다.

대부분의 질문들이 OP에 대한 답변이긴 했지만, 제가 직접 살펴봐야만 했고, 검색조차 하지 않고 가장 빠르고 간단한 해결책을 찾을 수 있었습니다.간단한 절차는 다음과 같습니다.

  • 복사.gitconfg
  • 새로 추가한 레포에 붙여넣기
  • .gitconfig, , 사용자 등) [user] name = John email = john@email.net username = john133
  • 을 「」에 .gitignore 커밋하지 위해, 「」, 「」, 「」를 참조해 주세요..gitconfig work ( file to your work repo 。

간단한 해킹일 수도 있지만 유용하다.아래와 같이 2개의 ssh 키를 생성하기만 하면 됩니다.

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/GowthamSai/.ssh/id_rsa): work
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in damsn.
Your public key has been saved in damsn.pub.
The key fingerprint is:
SHA256:CrsKDJWVVek5GTCqmq8/8RnwvAo1G6UOmQFbzddcoAY GowthamSai@Gowtham-MacBook-Air.local
The key's randomart image is:
+---[RSA 4096]----+
|. .oEo+=o+.      |
|.o o+o.o=        |
|o o o.o. +       |
| =.+ .  =        |
|= *+.   S.       |
|o*.++o .         |
|=.oo.+.          |
| +. +.           |
|.o=+.            |
+----[SHA256]-----+

같은 방법으로 개인용으로 하나 더 만듭니다.그럼 2개의 SSH 키, 일과 회사가 있군요.work.pub, work, personal.pub, personal을 ~/.ssh/ 디렉토리에 복사합니다.

그런 다음 다음 다음 행으로 셸 스크립트를 만들고 다음 내용으로 crev.sh(회사 역방향)이라는 이름을 지정합니다.

cp ~/.ssh/work ~/.ssh/id_rsa
cp ~/.ssh/work.pub ~/.ssh/id_rsa.pub

마찬가지로 다음 내용으로 prev.sh(퍼스널 리버스)라는 이름의 하나 더 만듭니다.

cp ~/.ssh/personal ~/.ssh/id_rsa
cp ~/.ssh/personal.pub ~/.ssh/id_rsa.pub

~/.debrc에서 다음과 같은 스크립트에 대한 별칭을 추가합니다.

alias crev="sh ~/.ssh/crev.sh"
alias prev="sh ~/.ssh/prev.sh"
source ~/.bashrc

회사를 이용하고 싶을 때는 언제든지 crev를 하고, 개인용 컴퓨터를 사용하고 싶을 때는 prev:-p를 하세요.

이러한 ssh 키를 GitHub 계정에 추가합니다.이러한 스크립트는 id_rsa를 덮어쓰므로 이전에 생성된 id_rsa가 없는지 확인하십시오.id_rsa를 이미 생성했다면 계정 중 하나에 사용합니다.개인 키로 복사하고 개인 키 생성을 건너뜁니다.

이 경우에도 하실 수 있습니다.git commit --author "Your Name <your@email.com>"다른 사용자로 커밋하는 repo에서 커밋을 실행하는 순간입니다.

나는 그것을 다루는 bash 기능을 만들었다.여기 Github repo가 있습니다.

기록용:

# Look for closest .gitconfig file in parent directories
# This file will be used as main .gitconfig file.
function __recursive_gitconfig_git {
    gitconfig_file=$(__recursive_gitconfig_closest)
    if [ "$gitconfig_file" != '' ]; then
        home="$(dirname $gitconfig_file)/"
        HOME=$home /usr/bin/git "$@"
    else
        /usr/bin/git "$@"
    fi
}

# Look for closest .gitconfig file in parents directories
function __recursive_gitconfig_closest {
    slashes=${PWD//[^\/]/}
    directory="$PWD"
    for (( n=${#slashes}; n>0; --n ))
    do
        test -e "$directory/.gitconfig" && echo "$directory/.gitconfig" && return 
        directory="$directory/.."
    done
}


alias git='__recursive_gitconfig_git'

github.com의 기본 키 간에 전환하려면 이 항목을 ~/.profile에 추가하십시오.

# Git SSH keys swap
alias work_git="ssh-add -D  && ssh-add -K ~/.ssh/id_rsa_work"
alias personal_git="ssh-add -D && ssh-add -K ~/.ssh/id_rsa"

예를 들어 Rob W의 답변과 같이 다른 ssh 키를 허용하고 오래된 git 버전(예를 들어 core.ssh Command 구성 없음)에서 작동합니다.

.~/bin/git_poweruser PATH: 에 이 있는 PATH: 에 실행 권한이 있습니다.

#!/bin/bash

TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT

cat > $TMPDIR/ssh << 'EOF'
#!/bin/bash
ssh -i $HOME/.ssh/poweruserprivatekey $@
EOF

chmod +x $TMPDIR/ssh
export GIT_SSH=$TMPDIR/ssh

git -c user.name="Power User name" -c user.email="power@user.email" $@

는 'Power User 때는 'Power User'를 합니다.git_powerusergit해야 하며, 에서 변경할 .gitconfig ★★★★★★★★★★★★★★★★★」.ssh/config적어도 내 건 아니야

사양을 다시 정의해 봅시다.다른 조직에 대해 git를 사용하여 여러 개의 ID를 사용할 수 있으면 됩니다.필요한 것은 2개의 사용자뿐입니다.

 # generate a new private public key pair for org1  
 email=me@org1.eu;ssh-keygen -t rsa -b 4096 -C $email -f $HOME/.ssh/id_rsa.$email

 # use org1 auth in THIS shell session - Ctrl + R, type org1 in new one 
 email=me@org1.eu;export GIT_SSH_COMMAND="ssh -p 22 -i ~/.ssh/id_rsa.$email"

이것이 가장 간단한 솔루션이라는 것을 아는 이유:

  # me using 9 different orgs with separate git auths dynamically
  find $HOME/.ssh/id_rsa.*@* | wc -l
  18

여러 가지 방법이 있지만, 저는 아래의 셸 기능을 통해 이를 실현하고 있습니다.

function gitprofile() {
    if [[ $1 == "private" ]]; then
        if grep -q "tom@workmail.com" "/Users/tomtaylor/.gitconfig"; then
            echo "Found in gitconfig. No action required."
        else 
            echo "Found in gitconfig1"
            cp /Users/tomtaylor/.gitconfig /Users/tomtaylor/.gitconfig2
            mv /Users/tomtaylor/.gitconfig1 /Users/tomtaylor/.gitconfig
            mv /Users/tomtaylor/.gitconfig2 /Users/tomtaylor/.gitconfig1
        fi
    elif [[ $1 == "public" ]]; then
        if grep -q "tom@gmail.com" "/Users/tomtaylor/.gitconfig"; then
            echo "Found in gitconfig. No action required."
        else 
            echo "Found in gitconfig1"
            cp /Users/tomtaylor/.gitconfig /Users/tomtaylor/.gitconfig2
            mv /Users/tomtaylor/.gitconfig1 /Users/tomtaylor/.gitconfig
            mv /Users/tomtaylor/.gitconfig2 /Users/tomtaylor/.gitconfig1
        fi
}

이렇게 불러내면

->은 gitprofile "public" -> Gitprofile "public"을 가진 됩니다.tom@gmail.com...

->은 gitprofile "private" -> > git git git git git git git git git git git git git git로 .tom@workmail.com.

현재 터미널 기본 설정에 따라 이 함수를 ~/.bash_profile 또는 ~/.zshrc에 추가합니다.단말기를 재기동하거나 스크립트를 다음과 같이 컴파일합니다.

. ~/.prefile_profile

기능을 유효하게 합니다.도움이 되었으면 좋겠다!

언급URL : https://stackoverflow.com/questions/4220416/can-i-specify-multiple-users-for-myself-in-gitconfig