지정된 프로젝트에 대해 올바른 ID(이름 및 이메일)를 사용하도록 GIT에 지시하는 방법은 무엇입니까?
개인 노트북을 업무와 개인 프로젝트 모두에 사용하고 있으며, 업무상 커밋(gitolite)에는 업무용 이메일 주소를 사용하고 나머지(gitub)에는 개인 이메일 주소를 사용하고 싶습니다.
글로벌 솔루션 또는 임시 솔루션에 대해 읽었습니다.
git config --global user.email "bob@example.com"
git config user.email "bob@example.com"
git commit --author "Bob <bob@example.com>"
- 하를설정기하 중
GIT_AUTHOR_EMAIL
,GIT_COMMITTER_EMAIL
또는EMAIL
설정
한 가지 해결책은 내 환경을 업무용 또는 개인용으로 설정하는 셸 기능을 수동으로 실행하는 것이지만, 종종 올바른 ID로 전환하는 것을 잊어버려 잘못된 ID로 커밋하게 될 것이라고 확신합니다.
특정 리포지토리, 프로젝트 이름 등을 ID(이름, 이메일)에 바인딩할 수 있는 방법이 있습니까?사람들은 무엇을 합니까?
git config user.email "bob@example.com"
보고서 내에서 이 작업을 수행하면 글로벌하지 않고 해당 보고서에 대한 구성이 설정됩니다.
제가 잘못 읽은 게 아니라면, 당신이 원하는 게 거의 그런 것 같군요.
아래의 local set 명령을 사용해야 합니다.
국소 세트
git config user.email mahmoud@company.ccc
git config user.name 'Mahmoud Zalt'
현지인의 수입
git config --get user.email
git config --get user.name
디렉토리에 ..git/config
.
전역 집합
git config --global user.email mahmoud@zalt.me
git config --global user.name 'Mahmoud Zalt'
전세계적인 수입
git config --global --get user.email
git config --global --get user.name
디렉토리의 : 홈디토글구성일:~/.gitconfig
.
예를 들어 '이름 성'과 같이 빈칸을 따옴표로 묶어야 합니다.
.git 폴더 내의 구성 파일을 편집하여 저장소에 따라 다른 사용자 이름과 전자 메일을 유지합니다.
- 리포지토리로 이동
- 숨겨진 파일을 표시하고 ".git" 폴더로 이동합니다.
- "config" 파일 찾기
- EOF에서 아래 행 추가
[사용자]
이름 = 밥
이메일 = bob@example.com
다음 명령은 이 리포지토리에 대해 설정된 사용자 이름과 전자 메일을 표시합니다.
git config --get user.name
git config --get user.email
예: D:\workspace\eclipse\ipchat\.git\config의 구성 파일입니다.
여기 ipchat은 제 레포 이름입니다.
사용하는 경우git config user.email "foo@example.com"
현재 프로젝트에 바인딩됩니다.
그것이 제 프로젝트를 위해 제가 하는 일입니다.레포를 복제/초기화할 때 적절한 ID를 설정합니다.예방책은 (호스라는 것을 에 잊어버리고 ) 은 당신이 말할 수 있는 얻을 수 .git config --global user.email 'ILLEGAL_VALUE'
사실, 당신은 불법적인 값을 만들 수 있습니다.을 합니다.git config --global user.name $(perl -e 'print "x"x968;')
그런 다음 전역이 아닌 값을 설정하는 것을 잊으면 오류 메시지가 표시됩니다.
[EDIT] 다른 시스템에서는 "fatal: fatal:개인 식별자가 너무 깁니다."같은 버전의 git.이상해요.
Git 2.13 기준으로 다음과 같은 기능을 사용할 수 있습니다.includeIf
git 명령을 실행 중인 리포지토리의 경로를 기준으로 다른 구성의 파일을 포함하도록 gitconfig에 설정합니다.
18에 나는내 충분새히로운이와왔다함니습때사제나용내해삶이서에문께것는을기에공되▁my▁this▁in▁18▁sinceit왔▁using▁ubuntu충▁beenve니다습분'▁with▁ubuntu사▁g▁18▁a▁enough히해용it▁new삶▁comes새로04▁i서에▁g에서 사용하고 있습니다.~/.gitconfig
아주 행복하게
[include]
path = ~/.gitconfig.alias # I like to keep global aliases separate
path = ~/.gitconfig.defaultusername # can maybe leave values unset/empty to get warned if a below path didn't match
# If using multiple identities can use per path user/email
# The trailing / is VERY important, git won't apply the config to subdirectories without it
[includeIf "gitdir:~/projects/azure/"]
path = ~/.gitconfig.azure # user.name and user.email for Azure
[includeIf "gitdir:~/projects/gitlab/"]
path = ~/.gitconfig.gitlab # user.name and user.email for GitLab
[includeIf "gitdir:~/projects/foss/"]
path = ~/.gitconfig.github # user.name and user.email for GitHub
https://motowilliams.com/conditional-includes-for-git-config#disqus_thread
Git 2.13을 사용하려면 PPA(Ubuntu 18.04/Debian 이전 버전)를 추가하거나 이진 파일을 다운로드하여 설치해야 합니다(Windows/기타 Linux).
당신이 않경지우는을.--global
매개 변수 현재 프로젝트에 대한 변수만 설정합니다.
저는 이 주제에 대한 Micah Henning의 기사(Git Identity 설정 참조)의 방식을 매우 좋아합니다.생성/복제된 각 리포지토리에 ID를 적용하고 강제로 적용하는 것은 매번 이 설정을 잊지 않는 좋은 방법입니다.
기본 Git 구성
현재 사용자 구성 설정 해제:
$ git config --global --unset user.name
$ git config --global --unset user.email
$ git config --global --unset user.signingkey
각 새 로컬 저장소에 ID 구성 강제 적용:
$ git config --global user.useConfigOnly true
칭만별기들에 대한 identity
나중에 사용할 명령:
$ 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 user.signingkey "$(git config user.$1.signingkey)"; :'
아이덴티티 생성
(로 ID 사용)gpg
또는gpg2
시스템에 있는 내용에 따라 다릅니다.사용할 각 ID에 대해 다음 단계를 반복합니다.
참고:
[keyid]
여기에 생성된 비밀 키의 식별자가 있습니다.예:sec rsa4096/8A5C011E4CE081A5 2020-06-09 [SC] [expires: 2021-06-09] CCC470AE787C057557F421488C4C951E4CE081A5 uid [ultimate] Your Name <youremail@domain> ssb rsa4096/1EA965889861C1C0 2020-06-09 [E] [expires: 2021-06-09]
그
8A5C011E4CE081A5
뒤에sec rsa4096/
키의 식별자입니다.
$ gpg --full-gen-key
$ gpg --list-secret-keys --keyid-format LONG <youremail@domain>
$ gpg --armor --export [keyid]
공용 키 블록을 복사하여 GPG 키로 GitHub/GitProviderOfChoice 설정에 추가합니다.
Git 구성에 ID를 추가합니다.추가할 각 ID에 대해서도 이 작업을 반복합니다.
참고: 여기서 사용합니다.
gitlab
내 신분을 밝히려면, 하지만 당신의 질문에 따르면, 무엇이든 될 수 있습니다, 예:gitolite
또는github
,work
타기.
$ git config --global user.gitlab.name "Your Name"
$ git config --global user.gitlab.email "youremail@domain"
$ git config --global user.gitlab.signingkey [keyid]
리포지토리에 대한 ID 설정
새 보고서에 연결된 ID가 없는 경우 커밋 시 오류가 나타나 설정하라는 메시지를 표시합니다.
*** Please tell me who you are.
## parts of message skipped ##
fatal: no email was given and auto-detection is disabled
새 리포지토리에서 원하는 ID를 지정합니다.
$ git identity gitlab
이제 Gitlab ID를 사용할 준비가 되었습니다.
한 가지 해결책은 내 환경을 업무용 또는 개인용으로 설정하는 셸 기능을 수동으로 실행하는 것이지만, 종종 올바른 ID로 전환하는 것을 잊어버려 잘못된 ID로 커밋하게 될 것이라고 확신합니다.
그게 바로 제 문제였어요.나는 당신에게 github 리모트가 있고 로컬 사용자 이름을 정의하지 않은 경우 경고하는 후크 스크립트를 작성했습니다.
설정 방법은 다음과 같습니다.
전역 후크를 보관할 디렉토리 작성
mkdir -p ~/.git-templates/hooks
모든 것을 복사하라고 git에게 말합니다.
~/.git-templates
프로젝트별로.git
git init 또는 clone을 실행할 때 디렉터리git config --global init.templatedir '~/.git-templates'
이제 다음 행을 복사합니다.
~/.git-templates/hooks/pre-commit
파일을 실행할 수 있도록 설정합니다. (이것을 잊지 마십시오. 그렇지 않으면 git이 실행하지 않습니다!)
#!/bin/bash
RED='\033[0;31m' # red color
NC='\033[0m' # no color
GITHUB_REMOTE=$(git remote -v | grep github.com)
LOCAL_USERNAME=$(git config --local user.name)
if [ -n "$GITHUB_REMOTE" ] && [ -z "$LOCAL_USERNAME" ]; then
printf "\n${RED}ATTENTION: At least one Github remote repository is configured, but no local username. "
printf "Please define a local username that matches your Github account.${NC} [pre-commit hook]\n\n"
exit 1
fi
개인 저장소에 다른 호스트를 사용하는 경우 교체해야 합니다.github.com
필요에 따라
이제 당신이 할 때마다git init
또는git clone
git는 이 스크립트를 저장소에 복사하고 커밋이 수행되기 전에 실행합니다.로컬 사용자 이름을 설정하지 않으면 경고가 출력되고 커밋할 수 없습니다.
언급URL : https://stackoverflow.com/questions/6116548/how-to-tell-git-to-use-the-correct-identity-name-and-email-for-a-given-project
'IT' 카테고리의 다른 글
스프링 부트 + 멀티 테넌시(Multi-tenancy)가 포함된 스프링 데이터 (0) | 2023.08.16 |
---|---|
날짜를 각도 2에서 이 'yyyy-MM-dd' 형식으로 변환하는 방법 (0) | 2023.08.16 |
Powershell - 재부팅 후 스크립트 계속 (0) | 2023.08.11 |
모든 MySQL 테이블 행을 동시에 업데이트하는 방법은 무엇입니까? (0) | 2023.08.11 |
구성 요소와 지침의 차이점은 무엇입니까? (0) | 2023.08.11 |