주어진 프로젝트에 대해 올바른 ID (이름 및 이메일)를 사용하도록 git에게 알리는 방법은 무엇입니까? 사용하고 나머지에는 제 개인용 이메일 주소 (github)를

저는 업무용과 개인용 프로젝트 모두에 개인용 노트북을 사용하고, 직장에서의 커밋에는 제 업무용 이메일 주소 (gitolite)를 사용하고 나머지에는 제 개인용 이메일 주소 (github)를 사용하고 싶습니다.

나는 모두 전역 적이거나 일시적인 다음 솔루션에 대해 읽었습니다.

  • 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환경 변수

한 가지 해결책은 내 환경을 work 또는 personal으로 설정하는 셸 함수를 수동으로 실행하는 것이지만, 올바른 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.

공백 등을 따옴표로 묶어야합니다 (예 : ‘FirstName LastName’).


답변

저장소에 따라 다른 사용자 이름과 이메일을 유지하려면 “.git”폴더에있는 구성 파일을 편집하십시오.

  • 저장소로 이동
  • 숨겨진 파일을 표시하고 “.git”폴더로 이동합니다.
  • “구성”파일 찾기
  • EOF에 아래 줄을 추가하십시오.

[사용자]

이름 = Bob

이메일 = 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;')

그런 다음 비전 역 값을 설정하는 것을 잊은 경우 오류 메시지가 표시됩니다.

[편집] 다른 시스템에서 “치명적 : 엄청나게 긴 개인 식별자”로 실패하도록 x의 수를 968 개로 늘려야했습니다. 같은 버전의 git. 이상한.


답변

--global매개 변수를 사용하지 않으면 현재 프로젝트에 대해서만 변수가 설정됩니다.


답변

Git 2.13 includeIf부터는 gitconfig에서를 사용 하여 git 명령을 실행중인 저장소의 경로에 따라 다른 구성을 가진 파일을 포함 할 수 있습니다 .

새로운 충분한 Git이 Ubuntu 18.04와 함께 제공되기 때문에 나는 이것을 ~/.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 (18.04 / Debian 이전 Ubuntu)를 추가하거나 바이너리를 다운로드하고 설치 (Windows / 기타 Linux)해야합니다.


답변

한 가지 해결책은 내 환경을 업무용 또는 개인용으로 설정하는 셸 기능을 수동으로 실행하는 것이지만 올바른 ID로 전환하는 것을 잊어 버려 잘못된 ID로 커밋되는 경우가 많습니다.

그것은 정확히 내 문제였습니다. github 원격이 있고 로컬 사용자 이름을 정의 하지 않은 경우 경고하는 후크 스크립트를 작성했습니다 .

설정 방법은 다음과 같습니다.

  1. 글로벌 후크를 보관할 디렉토리 생성

    mkdir -p ~/.git-templates/hooks

  2. git init 또는 clone 을 실행할 때 git에게 모든 것을 ~/.git-templates프로젝트 별 .git디렉토리 에 복사 하도록 지시하십시오.

    git config --global init.templatedir '~/.git-templates'

  3. 그리고 이제 다음 줄을 복사하여 ~/.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 clonegit 을 수행 할 때마다이 스크립트를 저장소에 복사하고 커밋이 완료되기 전에 실행합니다. 로컬 사용자 이름을 설정하지 않은 경우 경고를 출력하고 커밋 할 수 없습니다.