.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 계정에 링크합니다.
- " " "
pbcopy < ~/.ssh/id_rsa.pub
- GitHub acount 로그인
- 를 꽂다
add SSH key
pagegithub g g g - 키를
pbcopy < ~/.ssh/id_rsa_pro.pub
- 다른 모든 계정에 대해 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 에일리어스를 쓸 수 있다.
, 그럼 이제 이 해 보겠습니다.~/.gitconfig
filename을 클릭합니다.
[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\"
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)"
의 " " " 입니다.~/.gitconfig
Orr 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 액세스
- 내 워크 계정이 "메인" 계정이 되기 때문에 커스텀 구성이 필요 없습니다.
설정:
- 「짝퉁」호스트를 설정합니다.이를 통해 적절한 SSH 키쌍을 선택할 수 있습니다.
~/.ssh/config
# Personal GitHub account Host github-personal HostName github.com User git IdentityFile ~/.ssh/id_rsa_personal IdentitiesOnly yes
- 지정된 디렉토리 서브트리 내의 커스텀 구성을 사용해야 합니다.
~/.gitconfig
# My personal projects [includeIf "gitdir/i:~/REPOS/PERSONAL/"] path = ~/REPOS/PERSONAL/personal.gitconfig
- 「 」의 설정.의 입니다.
~/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 키를 가지고 있어야 합니다.이 명령어를 사용하여 생성할 수 있습니다.
순서
- c:\users\로 이동합니다.사용자\.ssh
- 터치 설정
- 도메인별 ssh 키 구성
- gitbash를 사용하여 git repo로 이동합니다.
- repo 。
"git config user.email="abc@gmail.com"
- repo마다 이름을 합니다.
git config user.name="Mo Sh"
- 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_poweruser
git
해야 하며, 에서 변경할 .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
'source' 카테고리의 다른 글
목록을 N개 크기의 작은 목록으로 분할 (0) | 2023.04.15 |
---|---|
숏컷에서 특정 디렉토리의 Powershell을 엽니다. (0) | 2023.04.15 |
값만 복사 붙여넣기( xlPasteValues ) (0) | 2023.04.15 |
Bash에서 ssh를 실행하고 여러 명령을 실행하는 가장 깨끗한 방법은 무엇입니까? (0) | 2023.04.15 |
StaticExtension 값을 확인할 수 없습니다. (0) | 2023.04.10 |