programing

Git에서 저자와 커미셔너의 차이점은 무엇입니까?

instargram 2023. 5. 22. 20:18
반응형

Git에서 저자와 커미셔너의 차이점은 무엇입니까?

나는 다음과 같은 약속을 하려고 합니다.

git commit --author="John Doe <john@doe.com>" -m "<the usual commit message>"

여기서 John Doe는 내가 커밋하고 싶은 이름의 사용자입니다.

에도 문제가 없습니다.git log, 를 할 할가때내.gitk작성자 이름은 맞지만 커밋 이름은 글로벌 git 구성 설정에서 선택됩니다(따라서 내 이름/이메일로 설정됨).

문의사항

  1. 두 가지(커밋터 대 저자)의 차이점은 무엇입니까?

  2. 커밋을 다른 사용자에게도 설정해야 합니까?

  3. 만약 그렇다면, 어떻게?

원본 포스터는 다음과 같이 묻습니다.

두 가지(커미터 대 저자)의 차이점은 무엇입니까?

작성자는 원래 코드를 작성한 사람입니다.그러나 위원은 원저작자를 대신하여 코드를 범한 자로 추정됩니다.Git에서는 역사를 다시 쓰거나 다른 사람을 대신하여 패치를 적용할 수 있기 때문에 이것이 중요합니다.무료 온라인 ProGit 은 다음과 같이 설명합니다.

저자와 커미셔너차이점이 무엇인지 궁금하실 수 있습니다.작성자는 패치를 처음 작성한 사용자이고 커미터는 패치를 마지막으로 적용한 사용자입니다.따라서 프로젝트에 패치를 보내고 핵심 구성원 중 한 명이 패치를 적용하면 작성자와 커미셔너의 핵심 구성원이 둘 다 크레딧을 받게 됩니다.

원본 포스터는 다음과 같이 묻습니다.

커밋을 다른 사용자에게도 설정해야 합니까?

아니요, 만약 당신이 정직하고 싶다면, 저자와 커미터가 실제로 동일한 사람이 아니라면 커미터를 저자로 설정해서는 안 됩니다.

리스트 + 메일링 리스트 +git format-patch+git apply할 수 = committer ! = 커밋터작성

리눅스 커널과 같은 프로젝트에서 패치는 다음과 같습니다.

다른 작성자 및 커밋을 사용하여 단일 새 커밋 생성:

  • 패치를 작성한 사람이 저자입니다.
  • 커미터는 누가 프로젝트 관리자이고 누가 패치를 병합했는지입니다.

예를 들어 임의로 선택한 패치와 해당 커밋을 참조하십시오.

GitHub 및 GitLab과 같은 Git 웹 인터페이스는 작성자를 생성할 수도 있고 생성하지 않을 수도 있습니다!= 커미터

Git(Hub|Lab)는 동일한 시스템에서 업스트림 및 포크 저장소를 모두 보유하므로 다음 중 하나를 포함하여 로컬에서도 수행할 수 있는 모든 작업을 자동으로 수행할 수 있습니다.

  • 병합 커밋을 만듭니다.

    작성자!= 커밋터를 생성하지 않습니다.

    SHA 또는 새 커밋을 그대로 유지하고 새 커밋을 만듭니다.

    * Merge commit (committer == author == project maintainer)
    |\
    | * Feature commit (committer == author == contributor)
    |/
    * Old master (random committer and author)
    

    역사적으로 이것은 GitHub에서 사용할 수 있는 최초의 방법이었습니다.

    로컬에서 이 작업은 다음을 통해 수행됩니다.git merge --no-ff.

    이렇게 하면 풀 요청당 2개의 커밋이 생성되고 Git 내역에 포크가 유지됩니다.

  • 에 근거하여 기지를 다시 설치.master

    GitHub은 또한 커밋을 해킹하여 커밋 == 병합 버튼을 누른 사람을 설정합니다.필수 사항이 .git rebase프로젝트 관리자에게 책임을 부여합니다.

    깃 트리의 모양은 다음과 같습니다.

    * Feature commit (committer == maintainer, author == contributor)
    |
    * Old master (random committer and author)    
    

    그것은 정확히 그것과 같습니다.git apply전자 메일 패치

GitHub에서 현재:

  • 병합 버튼의 드롭다운을 통해 병합할 때 방법을 선택합니다.
  • 소유자가 repo 설정에서 메서드를 사용하거나 사용하지 않도록 설정할 수 있습니다.

https://help.github.com/articles/about-merge-methods-on-github/

새로운 커밋의 커밋을 어떻게 설정합니까?

제가 찾을 수 있는 최선의 방법은 환경 변수를 사용하여 커미터를 재정의하는 것이었습니다.

GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'

지정된 커밋의 커밋 및 커밋 날짜를 얻는 방법은 무엇입니까?

만 본적으 됩니다.git log.

커밋 날짜를 보려면 다음 중 하나를 수행할 수 있습니다.

  • 로그 형식을 지정합니다.

    git log --pretty='%cn %cd' -n1 HEAD
    

    cn그리고.cdCommitter Name그리고.Committer Date

  • 을 사용합니다.fuller미리 정의된 형식:

    git log --format=fuller
    

    참고 항목:'commit date'를 표시하도록 'git log'를 구성하는 방법

  • 낮은 수준으로 이동하여 전체 커밋 데이터를 표시합니다.

    git cat-file -p HEAD
    

새로운 커밋의 커밋 날짜를 어떻게 설정합니까?

git commit --date작성자 날짜만 설정합니다. 커밋 날짜에 대해 내가 찾을 수 있는 최선의 방법은 환경 변수를 사용하는 것이었습니다.

GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000' git commit --date='2000-01-01T00:00:00+0000'

참고 항목:Git에서 저자와 커미셔너의 차이점은 무엇입니까?

Git는 작성자 대 커미셔너를 내부적으로 어떻게 저장합니까?

참고: git commit 개체의 파일 형식은 무엇입니까?

기본적으로 커밋은 텍스트 파일이며 두 줄로 구분된 필드가 포함되어 있습니다.

author {author_name} <{author_email}> {author_date_seconds} {author_date_timezone}
committer {committer_name} <{committer_email}> {committer_date_seconds} {committer_date_timezone}

이렇게 하면 둘 다 커밋 개체에 있는 두 개의 완전히 독립적인 데이터 항목임을 알 수 있습니다.

사용을 제안함

GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author 'a <a>'

실수로 다른 이름과 전자 메일을 사용한 경우 동일한 값으로 설정하려는 경우:

GIT_COMMITTER_NAME='a' GIT_COMMITTER_EMAIL='a' git commit --author "$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"

변수를 먼저 설정한 다음 변수를 사용합니다.git commitcall(이중 괄호에 주의).

언급URL : https://stackoverflow.com/questions/18750808/difference-between-author-and-committer-in-git

반응형