지금까지 Git에서 읽은 가이드에서는 구성으로 이동하여 내 이름과 이메일 주소를 지정해야한다고 말합니다. 그들은 정교하지 않습니다. 그들은 단지 그것을하라고 말합니다.
Git에 내 전자 메일 주소가 필요한 이유는 무엇입니까? 그리고 더 중요한 것은, 예를 들어 GitHub를 통해 내 저장소를 공개적으로 사용할 수 있도록하면 내 이메일 주소가 모든 사람 (스팸봇 포함)에게 표시 되나요?
지금까지 Git에서 읽은 가이드에서는 구성으로 이동하여 내 이름과 이메일 주소를 지정해야한다고 말합니다. 그들은 정교하지 않습니다. 그들은 단지 그것을하라고 말합니다.
Git에 내 전자 메일 주소가 필요한 이유는 무엇입니까? 그리고 더 중요한 것은, 예를 들어 GitHub를 통해 내 저장소를 공개적으로 사용할 수 있도록하면 내 이메일 주소가 모든 사람 (스팸봇 포함)에게 표시 되나요?
답변:
Git은 이메일 주소를 사용하여 사용자를 식별하고 다른 작업 (예 : GPG 키로 태그에 서명)을 수행합니다. 이메일 주소는 사용자가 지정한 이름과 함께 커밋 로그 등에 ID의 일부로 포함됩니다. 예를 들어 커밋 로그의 "author"필드는 다음과 같이 표시됩니다.
Author: Joe White <joewhite@mysite.com>
따라서 정보는 식별자 역할을하므로 저장소 사본이있는 모든 사람이 사용할 수 있습니다.
웹 인터페이스를 통해 저장소를 사용할 수 있도록하기 위해 Gitweb 또는 GitHub와 같은 서비스를 사용하지 않는 한 (단순히 인터넷에 올리는 것은이 작업을 수행하지 않음) 이메일이 스팸봇에 표시되지 않을 수 있습니다 .
가짜 이메일 주소를 입력하거나 빈 문자열이나 공백 또는 무언가를 사용할 수 있다고 가정합니다 (Git가 이메일의 형식이나 유효성을 확인하지 않는다고 생각합니다). 패치를 받거나 어떤 식 으로든 연락 할 수 있습니다.
2017 년 4 월 업데이트
" 비공개 이메일, 이제 더 비공개 "참조
GitHub는 잠시 동안 웹 기반 커밋을 작성하기 위해 대체 "noreply"이메일 주소 사용을 지원했습니다. 오늘부터 명령 줄을 통해 GitHub에 커밋을 푸시 할 때 실수로 이메일 주소를 게시하지 않도록하는 또 다른 방법이 있습니다.
Git은 이메일 주소를 사용하여 작성한 커밋에 이름을 연결합니다. 커밋을 GitHub의 퍼블릭 리포지토리에 푸시하면 저작 메타 데이터도 게시됩니다.
실수로 이메일 주소를 게시하지 않으려면 이메일 설정에서 '내 이메일 주소를 비공개로 유지'및 '내 이메일을 노출하는 명령 줄 푸시 차단'옵션을 선택 하면 됩니다.
참고 : orev 에 의해 아래 에 설명 된 대로 Git 은 아무것도 노출하지 않습니다. Git 리포지토리 호스팅 서비스 인 GitHub 가 있습니다.
로컬 Git 저장소를 푸시하는 위치는 메타 데이터를 노출 할 수 있습니다.
참고 : 2013 년 8 월 9 일 부터 이제 이메일 주소를 비공개로 유지할 수 있습니다 !
이는 웹 기반 GitHub 작업을위한 것입니다. 커밋에는 여전히 GitHub 계정에 사용 된 주소와 같거나 같지 않을 수있는 이메일 주소가 포함되어 있습니다.
(git commit) 이메일도 "마스킹"하려면 아래를 참조하십시오.
오늘까지 모든 웹 기반 GitHub Flow는 기본 이메일 주소를 사용했습니다. 여기에는 파일 생성, 편집 및 삭제와 풀 요청 병합이 포함됩니다.
하지만 이제 이메일 주소를 비공개로 유지할 수 있습니다. 이렇게하려면 이메일 설정 페이지를 방문하세요.
이 기능을 켜면 웹 기반 작업에서 username@users.noreply.github.com 이메일 주소를 사용합니다.
컴퓨터에서 만든 이메일을 숨기려면 이제 GitHub에서 다른 이메일 주소 를 등록 할 수 있습니다 . 이 가이드를 참조 하세요 .
커밋을 반영하려면 GitHub로 푸시하기 전에 로컬 저장소에서 (가짜) 이메일을 구성해야합니다.
git config --global user.email "user@server.fake" # Set email to slightly changed value
git config --global user.email # Verify the setting
# user@server.fake
그때:
user@server.fake
")을 입력하고 "추가"를 클릭합니다.참고 :
이 설정은 향후 커밋에만 영향을줍니다 .
리포지토리의 커밋 내역에서 실제 이메일 주소를 지우려면 이전 커밋을 다시 작성해야합니다. 이를 수행하는 가장 쉬운 방법은 다음과 같습니다.사용
git filter-branch
저장소 역사를 다시 작성 하고 새 역사를 강제-밀어 넣습니다.
git
. git
범용, 오픈 소스, 개정 제어 도구 인 반면 GitHub는 git
저장소 를 게시 할 수있는 웹 사이트입니다 . GitHub는을 만들지 않았고 git
, 잘 작동하는 아주 멋진 웹 사이트를 만들었습니다.
GitHub에는 Keep your email address private 이라는 도움말 문서 가 있습니다.
Git은 커밋을하기 위해 자신을 식별해야하지만 가짜 주소를 사용하여 연락처 정보를 숨길 수 있습니다. Git 자체는 이메일이 유효한지 상관하지 않습니다.
알아두면 좋은 정보 : Git은 상관하지 않지만 커밋에 유효한 이메일 주소가없는 경우 일부 프로젝트에서 기여를 수락하지 않을 수 있으므로이 지침을 따르기 전에 프로젝트의 기여 정책을 조사하는 것이 좋습니다.
GitHub는 Git 커밋 이메일 주소로 스팸이 전송되었다는보고를 많이받지는 않지만 걱정이되는 경우이 가이드가 이러한 문제를 해결하는 데 도움이 될 것입니다.
이 가이드에는 가짜 주소를 사용하도록 Git 및 GitHub를 모두 구성하는 방법이 포함되어 있습니다.
예, 위의 답변은 정확합니다 ... 일반적으로 모든 프로젝트에 대해 동일한 이메일 주소를 사용하려는 경우를 제외하고 다음 명령을 사용합니다.
git config --global user.email "me@email.com"
사용자 섹션의 홈 디렉토리에있는 .gitconfig 파일을 편집 할 수도 있습니다.
전역 옵션없이 동일한 명령을 수행하여 특정 프로젝트에 대해 다른 이메일을 지정할 수 있습니다.
또한 제출물이 공개 영역으로 이동하는 경우 이메일을 난독화할 수 있습니다.
briancolfer(at)comcast.net
예로서.
수백만 개의 GitHub 커밋 이메일 유출
https://github.com/cirosantilli/all-github-commit-emails에서 추출한 GitHub 아카이브 https://www.githubarchive.org 내보내기 커밋.
GitHub 아카이브는 GitHub의 이벤트 API ( https://developer.github.com/v3/activity/events/types/#pushevent) 에서 데이터를 가져 와서 매시간 Google BigQuery로 내보내므로 쿼리하기가 더 쉽습니다.
유형의 이벤트에 이메일이 표시됩니다 PushEvent
.
커밋 이메일이 GitHub의 웹 인터페이스 어디에도 표시되지 않는다고 생각하므로 모든 컬렉션은 API 속도 제한으로 제한됩니다. TODO : API를 통해 처음부터 100 만 개의 이메일을 수집하는 데 걸리는 시간입니다.
API로 누군가의 커밋 이메일을받는 실용적인 방법
ghmail() { curl "https://api.github.com/users/$1/events/public" | grep email; }
ghmail cirosantilli
또는 방문 : https://api.github.com/users/cirosantilli/events/public
또한 다음이 있습니다.
Git 커밋 데이터 구조에는 명시 적 작성자 및 커미터 이메일 필드가 있습니다.
표시 : git commit 개체 데이터 구조의 파일 형식은 무엇입니까?
따라서이 정보는 기본적으로 커밋에 추가됩니다.
작성자 이름, 이메일 등을 소급하여 변경할 수 있습니다. 다음을 수행하면 기록이 손상 될 수 있습니다.
#!/bin/sh
git filter-branch --env-filter '
an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
if [ "$GIT_COMMITTER_EMAIL" = "your@email.to.match" ]
then
cn="Your New Committer Name"
cm="Your New Committer Email"
fi
if [ "$GIT_AUTHOR_EMAIL" = "your@email.to.match" ]
then
an="Your New Author Name"
am="Your New Author Email"
fi
export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'
여기 에서 찍은