단일 git 커밋에 대해 구성된 사용자 재정의


99

회사 git 서버용으로 이미 구성된 직장 랩톱 에서 github.com 의 프로젝트에 참여 하려고 합니다. 다른 구성 파일이나 다른 명령 줄 스위치를 사용하여 다른 작성자 자격 증명을 지정하는 방법이 있습니까?

나는 사용해 보았다

--author="My Name <MyNameEmail@email.com>" 

그리고 메시지를 받았습니다.

 Committer: unknown <WorkEmail@workemail.net>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

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

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

하지만 여전히 github.com 프로젝트에 커밋하기 위해 내 사용자 이름을 업데이트하지 않았습니다. 내가 시도 할 수있는 다른 것이 있고 가능합니까?


2
Git은 작성자커미터를 구분 합니다 . 한 명령에 대해 커미터를 임시로 설정하려면을 사용하십시오 -c user.name=Me user.email=me@example.com. 사용자 지정 전역 구성을 사용하려면 이 질문을 참조 하거나 -c옵션이 포함 된 셸 별칭을 사용 하세요. 그러나이 중 어느 것도이 상황에서 옳은 일이 아닐 것입니다. 당신은 저장소 별 설정을 원합니다.
Robin Green

Git 2.22 (2019 년 2 분기)에서는 전용 설정이 제공 {author,committer}.{name,email}됩니다. 내 대답은 아래를 참조
VonC

답변:


181

첫째, 작성자가 커미터와 반드시 동일하지는 않습니다. Git은 둘 다 추적합니다.

이 저장소에만 사용할 이름을 설정하려면 다음을 수행 할 수 있습니다.

git config user.name "Your Name"
git config user.email "Your email"

--global옵션 이 없음을 확인하십시오 . 이 저장소에서만 구성을 설정합니다.

또는 다음 -c옵션을 사용하여 단일 명령에 대해서만이 작업을 수행 할 수 있습니다 .

git -c "user.name=Your Name" -c "user.email=Your email" commit ...

그러나 위의 구성 옵션을 사용하는 것이 더 낫다고 생각합니다.


5
이것은 공유 계정 (devel 서버의 루트)에서 내 자신의 git repo로 커밋해야하고 다른 사람에게 내 이름 / 이메일을 제공하지 않기를 원하기 때문에 정확히 필요한 것입니다.
안드레이

58

이것을 git 명령 앞에 추가하십시오.

git -c user.email=email@domain.fr -c user.name='Your Name'

일회성으로는 괜찮지 만 git에서 복제 한 로컬 저장소의 .git / config 파일에 저장하는 것이 좋습니다. 이것은 실행 git config (no --global 또는 --system을 "repo에 로컬"로 만들지 않음)하거나 편집 .git/config(다음과 동일한 구문)을 통해 수행 할 수 있습니다.~/.gitconfig


1
감사합니다! 여러 사람과 서버를 공유하고 있으며 기본 사용자를 설정하고 싶지 않습니다. 이것은 완벽 해요!
horriblyUnpythonic

1
@horriblyUnpythonic 환영합니다 :)에서 별칭을 만들 수도 .bash_aliases있고 / 또는 사용자가 정의되지 않은 경우 커밋을 거부하도록 사전 커밋 후크를 설정할 수도 있습니다.
Asenar

28

또한 환경 변수를 설정할 수 있습니다 GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, 및 GIT_AUTHOR_EMAIL당 쉘 또는 당 명령 기준으로.


이것은 대부분 공유 컴퓨터 시나리오에서 사용되므로 자동 정리를 사용하는 세션 당 완벽합니다.
kmac 2016

1
나를 위해 일하지 않았다. 저자는 이후에도 동일하게 유지되었습니다 git commit --amend. 커미터 만 변경되었습니다.
Ondra Žižka

여기도 마찬가지입니다.git commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
KCD

1
이것은 git commit --amend맨 페이지에 나와있는 것처럼 설계 상 작성자를 변경하지 않기 때문 입니다. 솔루션 : git commit --amend --reset-author
kubanczyk

7

나는 당신이 실행할 수 있다고 믿습니다.

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

git의 다른 부분에 대해. github 서버에 대한 저장소에 대한 작업이 수행되는 폴더를 열어보십시오.

해당 작업 폴더에 .git 폴더가 있는지 확인하십시오. 이제 Terminal / Console / CommandPrompt에서 해당 폴더를 열고 위에서 지정한 명령을 실행하여 해당 폴더의 사용자 이름과 이메일을 변경해보십시오.

이를 변경하면 이제 GitHub 서버에 액세스 할 수 있습니다.

여기를보세요 : https://help.github.com/articles/setting-your-username-in-git

또한 명령 자체에서 github 사용자 이름과 암호를 사용하여 원격 저장소로 푸시하는 방법이 있다고 생각하지만 작동하지 않았기 때문에 인용하지 않습니다.


5

IMO의 제안이이를위한 가장 좋은 방법이기 때문에 Jesse Glick의 답변을 확장 된 구현으로 여기에서 추적합니다.

.bash_profile에 아래를 추가하십시오. 활성 셸에서 git 명령을 처음 실행할 때 사용자를 묻는 메시지가 표시됩니다. 그런 다음 모든 후속 실행에 대해 사용자를 기억합니다.

(분명히 입력 사용자 값을 케이스 블록의 다양한 git auther / name 값에 대해 정확한 원하는 이름과 이메일 주소로 상호 참조하고 필요에 따라 할당을 업데이트합니다)

git() {
  echo "Running BETTER git..."
  if [ -z "$GIT_COMMITTER_NAME" ]; then
    while true; do
      read -p "Git User: " UNAME
      case $UNAME in
          user1 ) break;;
          user2 ) break;;
          * ) echo "Invalid User";;
      esac
    done
    GIT_COMMITTER_NAME=$UNAME
    export GIT_COMMITTER_NAME
    GIT_COMMITTER_EMAIL=$UNAME@domain.com
    export GIT_COMMITTER_EMAIL
    GIT_AUTHOR_NAME=$GIT_COMMITTER_NAME
    export GIT_AUTHOR_NAME
    GIT_AUTHOR_EMAIL=$GIT_COMMITTER_EMAIL
    export GIT_AUTHOR_EMAIL
  fi
  echo "  using git user: $GIT_AUTHOR_NAME / $GIT_AUTHOR_EMAIL"
  /usr/bin/git "$@"
}

2

또한 환경 변수를 설정할 수 있습니다 GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, 및 GIT_AUTHOR_EMAIL당 쉘 또는 당 명령 기준으로.

실제로 Git 2.22 (2019 년 2 분기)부터 새로운 옵션 {author,committer}.{name,email}이 있습니다 user.{name,email}.보다 구체적인 경우 에 재정의하기 위해 4 개의 새로운 구성 변수 가 도입되었습니다 .

William Hubbs (``)의 commit 39ab4d0 (2019 년 2 월 4 일)을 참조하십시오 . (Merged by Junio ​​C Hamano -- in commit 4e021dc , 07 Mar 2019)
gitster

config: 별도의 작성자 및 커미터 ID 제공 허용

author.email, author.name, committer.emailcommitter.name설정이 유사하다 GIT_AUTHOR_*GIT_COMMITTER_*에 대한 환경 변수,하지만 git config시스템.
이를 통해 각 저장소에 대해 별도로 설정할 수 있습니다.

Git은 환경 변수를 사용하여 다른 작성자 및 커미터 정보 설정을 지원합니다. 그러나 환경 변수는 쉘에 설정되어 있으므로 다른 저장소에 대해 다른 작성자 및 커미터 정보가 필요한 경우 외부 도구가 필요합니다.

이렇게 author.email하면 author.name, committer.emailcommitter.name 설정에 대한 git config에 대한 지원이 추가되어이 정보를 저장소별로 설정할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.