다른 사용자로 코드를 커밋하는 방법은 무엇입니까?


112

스크립트에 대해이 작업을 수행하고 싶습니다. 나는 본질적으로 Git에서 일부 코드의 전체 버전 기록을 다시 만들고 있으며 현재 다른 버전 제어 시스템을 사용합니다. 커밋의 원래 작성자 (및 날짜)를 유지하면서 Git에 커밋을 추가 할 수있는 스크립트가 필요합니다.

커밋 작성자와 변경 날짜 / 시간을 알고 있다고 가정하면이를 수행 할 수있는 Git 명령이 있습니까? 나는 git-p4가 비슷한 일을하기 때문에 거기에 있다고 가정하고 있습니다. 나는 그것을 할 수있는 최선의 방법을 요구하고있다.


1
빠른 가져 오기를 사용해 보셨습니까?
대안

동의합니다. 빠른 가져 오기 가 가장 좋은 방법 일 것입니다. 당신은 사용할 수 커밋 GIT : (더 적절 기본 배관 또는 해시 객체 , 갱신 인덱스 , 쓰기 트리 , 커밋 트리 , 갱신-REF 등),하지만 빠르게 가져 오기가 더 빨리, 잘 될 것입니다.
Chris Johnsen

빠른 가져 오기를 생각했지만 나 자신이 git 초보자이기 때문에 기본 명령을 사용하기로 결정했습니다. 솔직히 말해서 저는 fast-import가 어떻게 작동하는지 완전히 이해하지 못하기 때문에 더 잘 이해할 때까지 사용하는 것을 조금 주저합니다. 예, 커밋을 사용하면 훨씬 느리지 만 적어도 디버깅하는 동안 무엇을 기대해야하는지 알 것입니다.
Carl

1
git commit --author = "Name <name@example.com>"-a -m "commit msg"
Masih

답변:


148

다음에 대한 --author옵션을 확인하십시오 git commit.

로부터 man 페이지 :

--author=<author>

커밋 작성자를 재정의합니다. 표준 A U Thor <author@example.com>형식을 사용하여 명시 적 작성자를 지정하십시오 . 그렇지 않으면 <author>패턴으로 간주되고 해당 작성자가 기존 커밋을 검색하는 데 사용됩니다 (예 :) rev-list --all -i --author=<author>. 커밋 작성자는 찾은 첫 번째 커밋에서 복사됩니다.


18
또한 --date날짜를 재정의 하는 옵션입니다.
Chris Johnsen

구체적인 예를 들어 주
시겠습니까

@Tim Henigan : 이제 문서가 Github에서 호스팅되는 것 같습니다. 따라서 게시 한 man 페이지 링크가 작동하지 않습니다. 새 페이지가 동일한 지 확인할 수 있습니까 (링크 업데이트가 필요한 다른 답변이있는 경우)?
R0MANARMY

@ R0MANARMY : URL을 업데이트했습니다. GitHub 페이지가 정확합니다. man 페이지가 더 이상 kernel.org에서 호스팅되지 않기 때문에 링크를 업데이트했습니다. 변경 사항을 알려 주셔서 감사합니다.
Tim Henigan 2012

1
내가 사용한 결과는 다음과 같습니다.git commit -a --author="$user_details" --date="submit_date $submit_time" --file=/tmp/commit_msg
Carl

113

이것에 추가하기 : --author수락 된 답변에 언급 된 옵션 은 커밋 의 커미터 정보가 아닌 작성자 만 재정의합니다 .

대부분의 경우 올바른 동작이지만 어떤 이유로 커미터 정보 도 수동으로 재정의해야하는 경우 GIT_COMMITTER_NAMEGIT_COMMITTER_EMAIL환경 변수를 사용합니다 (도 GIT_COMMITTER_DATE있습니다). 참고 힘내 - 내부 구조 - 환경 - 변수

$ GIT_COMMITTER_NAME="New Name" GIT_COMMITTER_EMAIL="name@email.com" git commit --author="New Name <name@email.com>"

이렇게하면 지정된 사용자 가 작성 하고 커밋 한 것처럼 커밋이 표시됩니다 .


16
... 그리고 차이를 확인하려면 :git log --pretty=fuller
bluenote10

2
완전한. 이것이 내가 원했던 것이고 git 내부 매뉴얼 페이지를 결코 찾을 수 없었을 것입니다.
ksp

3

~ / .gitconfig 파일을 편집하고 기본이 아닌 사용자 및 이메일을 사용자 정의 할 수있는 새 별칭을 추가합니다.

[user]
  name = My Name
  email = default@email.com

[alias]
  commit-x = -c user.name='My X Name' -c user.email='mr_x@email.com' commit
  commit-y = -c user.name='My Y Name' -c user.email='mr_y@email.com' commit
  commit-z = -c user.name='My Z Name' -c user.email='mr_z@email.com' commit

테스트

git commit -m "Custom message with committer and author My Name <default@email.com>"
git commit-x -m "Custom message with committer and author My X Name <mr_x@email.com>"
git commit-y -m "Custom message with committer and author My Y Name <mr_y@email.com>"
git commit-z -m "Custom message with committer and author My Z Name <mr_z@email.com>"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.