Development Tip

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

yourdevel 2020. 9. 30. 11:36
반응형

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


내에서는 Github 저장소에 사용하고 싶은 ~/.gitconfig개인 이메일 주소를 아래에 나열합니다 [user].

하지만 최근에 git을 업무용으로 사용하기 시작했습니다. 내 회사의 git repo를 사용하면 커밋 할 수 있지만 새 변경 집합에 대한 알림을 보내면 내 이메일 주소를 인식하지 못하기 때문에 익명에서 온 것이라고 말합니다 .gitconfig. 적어도 그것은 내 이론입니다.

[user]에서 여러 정의 를 지정할 수 .gitconfig있습니까? 아니면 .gitconfig특정 디렉토리 의 기본값을 재정의하는 다른 방법이 있습니까? 제 경우에는 모든 작업 코드를 체크 아웃합니다. 해당 디렉토리 (및 하위 디렉토리)에 대해서만 ~/worksrc/을 지정하는 방법이 .gitconfig있습니까?


전역 구성을 재정의하는 특정 사용자 / 이메일 주소를 사용하도록 개별 저장소를 구성 할 수 있습니다. 저장소의 루트에서 다음을 실행하십시오.

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

기본 사용자 / 이메일은 ~ / .gitconfig에 구성되어 있습니다.

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

또는 로컬 .git/config파일에 다음 정보를 추가 할 수 있습니다.

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

하나의 명령 github 계정 전환

이 솔루션은 단일 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 계정에 로그인
  3. add SSH keygithub 페이지에 키 붙여 넣기
  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@github.comgit@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 별칭을 작성할 수 있습니다.

~/.gitconfig파일 에 추가하겠습니다 .

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

...

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

그런 다음 git setpromail이 프로젝트에 대해서만 이메일을 변경하면됩니다.

3 단계. 명령 스위치 하나만주세요?!

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

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

우리는 이미 두 번째 단계에 대한 하나의 명령 솔루션을 가지고 있지만 첫 번째는 훨씬 더 어렵습니다. 하나의 명령 원격 호스트 변경

여기에 추가 할 다른 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)

모두 결합

이제 두 명령을 하나로 결합하면됩니다. 이것은 매우 쉽습니다. 또한 bitbucket 호스트 스위칭을 통합하는 방법을 참조하십시오.

[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\"

소스 링크-튜토리얼


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

편집하다:

그래서 파이썬에서 후크와 명령으로 후크를 다시 작성했습니다. 또한 스크립트를 Git 명령 ( git passport) 으로 호출 할 수도 있습니다. 또한 ~/.gitpassport프롬프트에서 선택할 수있는 구성 파일 ( ) 내에서 임의의 수의 ID를 정의 할 수 있습니다. 프로젝트는 github.com에서 찾을 수 있습니다. git-passport-여러 Git 계정 / 사용자 ID를 관리하기 위해 Python으로 작성된 Git 명령 및 후크 .


기본 이메일 주소 ( github 사용자에 대한 이메일 주소 링크 )를 원하지 않는 경우 요청을 받도록 구성 할 수 있습니다. 이를 수행하는 방법은 사용하는 git 버전에 따라 다릅니다. 아래를 참조하십시오.

(의도 된) 단점은 모든 저장소에 대해 이메일 주소 (및 이름)를 한 번씩 구성해야한다는 것입니다. 그래서 당신은 그것을 잊을 수 없습니다.

버전 <2.7.0

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

Orr Sella의 블로그 게시물~/.gitconfig 에서 Dan Aloni의 의견에 명시된대로 글로벌 구성 에서 . 저장소에서 첫 번째 커밋을 시도 할 때 git은 nice 메시지와 함께 실패합니다.

*** 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)')

이름은 이메일 주소가 로컬로 설정 될 때 전역 구성에서 가져옵니다 (메시지가 완벽하게 정확하지 않음).

2.7.0 ≤ 버전 <2.8.0

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

버전 ≥ 2.8.0

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

[user]
    useConfigOnly = true

작동하도록 글로벌 구성에서 이름이나 이메일 주소를 제공하지 않을 수 있습니다. 그런 다음 첫 번째 커밋에서 오류 메시지가 표시됩니다.

fatal: user.useConfigOnly set but no name given

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


Git 2.13의 조건부 포함사용하면 이제 거의 작업없이 여러 사용자 / 이메일을 하나의 컴퓨터에 공존 할 수 있습니다.

user.gitconfig내 개인 이름과 이메일이 있습니다. work-user.gitconfig내 직장 이름과 이메일이 있습니다. 두 파일 모두 ~경로에 있습니다.

따라서 내 개인 이름 / 이메일이 기본적으로 적용됩니다. 들어 c:/work/DIR, 내 작품 이름 / 이메일이 적용됩니다. 들어 c:/work/github/DIR, 내 개인 이름 / 이메일이 적용됩니다. 이것은 마지막 설정이 적용될 때 작동합니다.

# ~/.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경로 에있는 모든 디렉토리에 대해 조건부 포함을 적용합니다 .


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입니다. 이러한 방식으로 (공유) 구성을 수정하지 않고도 사용자 / 이름간에 쉽게 전환 할 수 있습니다.


git aliases (및 git configs의 섹션)를 구출하십시오!

별칭 추가 (명령 줄에서) :

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

새 저장소 또는 복제 된 저장소에서 다음 명령을 실행할 수 있습니다.

git identity github

이 솔루션은 자동이 아니지만 전역에서 사용자 및 이메일을 ~/.gitconfig설정 해제 하고로 설정 user.useConfigOnly하면 truegit이 각각의 새 저장소 또는 복제 된 저장소에서 수동으로 설정하도록 상기시킵니다.

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

실수를 피하기 위해 잘 작동하는 것처럼 보이는 간단한 해결책이 있습니다.

에서 [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'

이 답변은 부분적으로 @Saucier에 의해 게시물에 의해 영감을,하지만 난 세트에 자동화 된 방법을 찾고 있었다 user.name그리고 user.email그가 개발하는 자식 여권 패키지보다 조금 더 가벼운 무게했다 원격 기반으로하는 REPO 단위에 . 또한 useConfigOnly 설정을 위해 @John에게 h / t합니다. 내 해결책은 다음과 같습니다.

.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에 대해 다른 자격 증명을 사용하지만 위 코드의 참조는 사용하는 모든 서비스로 대체되거나 보강 될 수 있습니다. 체크 아웃 후 후크가 자동으로 사용자 이름과 저장소에 대한 이메일을 로컬로 설정하도록하려면 서비스 이름이 원격 URL에 나타나는지 확인하고 post-checkout스크립트 의 서비스 배열에 추가하고 해당 섹션을 만듭니다. 당신 .gitconfig이 해당 서비스에 대한 사용자 이름과 이메일이 포함되어 있습니다.

원격 URL에 서비스 이름이 표시되지 않거나 저장소에 원격이 없으면 사용자 이름과 이메일이 로컬로 설정되지 않습니다. 이 경우 user.useConfigOnly사용자 이름과 이메일이 리포지토리 수준에서 설정 될 때까지 커밋을 수행 할 수없는 설정이 적용되며 사용자에게 해당 정보를 구성하라는 메시지가 표시됩니다.


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사용하여 내 dotfile을 동기화하고 있습니다.

gitconfig 만 환경 변수를 허용하는 경우 : git config에서 쉘 변수 확장


Windows 환경

Git Extensions --> Settings --> Global Settings시스템에 설치되어있는 경우 에서 추가로 수정할 수 있습니다 .

gitextensions- 최신 릴리스

이러한 설정에 액세스하려면 Windows 환경에서 폴더 / 디렉토리를 마우스 오른쪽 버튼으로 클릭하십시오. 여기에 이미지 설명 입력

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


여기에 많은 답변의 단계를 따른 후 방금 찾은 내용이 있습니다.

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

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

$ ssh-add -l

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

$ ssh-add -D

그런 다음 사용하려는 / 필요한 각 이메일 / 계정에 연결된 SSH 게시 / 개인 키를 만들 수 있습니다.

$ 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 개의 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]-----+

같은 방법으로 개인용으로 하나 더 만듭니다. 따라서 두 개의 ssh 키, 직장 및 회사가 있습니다. work.pub, work, personal.pub, personal을 ~ / .ssh / 디렉토리에 복사 합니다.

그런 다음 다음 줄로 셸 스크립트를 만들고 다음 내용을 사용하여 이름을 crev.sh (Company Reverse)로 지정합니다.

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

같은 방법으로 다음 내용으로 prev.sh (Personal Reverse)라는 이름을 더 만듭니다.

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

~ / .bashrc에서 아래와 같은 스크립트에 별칭을 추가합니다.

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

회사를 이용하고 싶을 때마다 crev를하고, personal을 이용하고 싶다면 prev :-p.

해당 ssh 키를 GitHub 계정에 추가하십시오. 이전에 생성 된 id_rsa가 없는지 확인하십시오. 해당 스크립트는 id_rsa를 덮어 쓰기 때문입니다. 이미 id_rsa를 생성 한 경우 계정 중 하나에 사용하십시오. 개인용으로 복사하고 개인 키 생성을 건너 뜁니다.


나는 그것을 처리하는 bash 함수를 만들었습니다. 다음은 Github 저장소 입니다.

기록을 위해 :

# 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'

~ / .bash_profile에 추가하면 github.com의 기본 키간에 전환 할 수 있습니다.

# 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"

git commit --author "Your Name <your@email.com>"다른 사용자로 커밋하려는 저장소에서 커밋을 수행하는 순간 에도 사용할 수 있습니다 .


Something like Rob W's answer, but allowing different a different ssh key, and works with older git versions (which don't have e.g. a core.sshCommand config).

I created the file ~/bin/git_poweruser, with executable permission, and in the 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" $@

Whenever I want to commit or push something as "Power User", I use git_poweruser instead of git. It should work on any directory, and does not require changes in .gitconfig or .ssh/config, at least not in mine.


Although most questions sort of answered the OP, I just had to go through this myself and without even googling I was able to find the quickest and simplest solution. Here's simple steps:

  • copy existing .gitconfg from your other repo
  • paste into your newly added repo
  • .gitconfig이름, 이메일 및 사용자 이름과 같은 파일의 값 변경 [user] name = John email = john@email.net username = john133
  • .gitignore목록 에 파일 이름을 추가 .gitconfig하여 작업 저장소에 파일을 커밋하지 않도록 합니다.

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

반응형