📖 reference & guide
1. git-filter-repo : https://github.com/newren/git-filter-repo/
2. git-filter-repo 설치 : https://github.com/newren/git-filter-repo/blob/main/INSTALL.md
3. mailmap이란? : https://git-scm.com/docs/gitmailmap#_examples
🚫 이 게시물은
--force
를 통해 원격 레포지토리를 덮어쓰는 내용을 포함하고 있습니다.개인 레포지토리 외에 협의 없이 사용하지 않으실게요~ 🙏
구분 | 내용 |
---|---|
문제 상황 | WSL에서 커밋 작성해서 원격 레포지토리로 올렸을 때, 기여도가 적용되지 않음 |
문제 확인하기 | Github과 Git log 확인, 기여도 Contribution activity의 기준 확인 |
문제 해결하기 | git-filter-repo를 사용해서 github 이전 커밋 변경 |
교훈: config은 미리 잘 확인하자.
😰 오늘 분명 커밋했는데?
문제 상황
문제 확인하기
문제 해결하기
dusunax authored and dusunax committed
dusunax committed
Contribution 유형 | 기준 |
---|---|
Commit | 새로운 코드를 기여할 때 |
Pull Request | 코드를 검토하고 머지할 때 |
Issue | 새로운 이슈를 만들거나 기존 이슈에 코멘트를 작성할 때 |
Review | Pull Request, Issue, Gist 등에 대한 리뷰를 작성할 때 |
git filter-branch
를 사용하여 작성자를 변경하는 것이 일반적이었다고 합니다.git filter-repo
를 사용하는 것이 좋습니다.set FILTER_BRANCH_SQUELCH_WARNING=1
로 경고을 무시할 수 있습니다. 하지만 대안이 있는 경우, 경고를 따르는 것이 경험상 대체로 맞습니다.git filter-branch --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "dusuna@DESKTOP-GOH013C" ];
then
GIT_AUTHOR_NAME="두선아 Dusuna";
GIT_AUTHOR_EMAIL="94776135+dusunax@users.noreply.github.com";
git commit-tree "$@";
else
git commit-tree "$@";
fi' HEAD
# WARNING: git-filter-branch has a glut of gotchas generating mangled history rewrites.
# Hit Ctrl-C before proceeding to abort, then use an alternative filtering tool
# such as 'git filter-repo' (https://github.com/newren/git-filter-repo/) instead.
# See the filter-branch manual page for more details;
# to squelch this warning, set FILTER_BRANCH_SQUELCH_WARNING=1.
-----------
(번역)
-----------
# 경고: git-filter-branch는 엉망으로 된 히스토리 재작성을 생성하는 많은 함정이 있습니다.
# 계속하기 전에 Ctrl-C를 눌러 중단하고 대신 'git filter-repo' (https://github.com/newren/git-filter-repo/)와 같은 대체 필터링 도구를 사용하세요.
# 자세한 내용은 filter-branch 매뉴얼 페이지를 참조하세요.
# 이 경고 메시지를 제거하려면 FILTER_BRANCH_SQUELCH_WARNING=1로 설정하세요.
# 소스 파일 다운로드
$ git clone https://github.com/newren/git-filter-repo.git
$ cd git-filter-repo
# git-filter-repo 분석
$ python3 git-filter-repo --analyze
🤔 analyze 관련 내용
analyze를 실행 했을 때, 이미.git/filter-repo/analysis
폴더가 있다면 다음 에러가 발생합니다.
Error: dir already exists (use --force to delete): ".git/filter-repo/analysis”
.git
폴더는 Git 저장소의 모든 정보가 저장되는 폴더입니다.
이 폴더 안에filter-repo
라는 폴더가 있으면, 이는git-filter-repo
도구에서 필터링을 수행할 때 생성되는 폴더입니다.
filter-repo
폴더는 다음과 같은 파일들을 포함합니다:rev_list
: Git 커밋 히스토리에서 필터링 대상인 커밋들의 리스트를 담고 있는 파일입니다.map
: 커밋의 해시 값을 새로운 해시 값으로 변경하는 매핑 정보가 담긴 파일입니다.tag-rename-map
: 태그 이름을 변경하기 위한 매핑 정보가 담긴 파일입니다.
이 폴더 안의 파일들은
git-filter-repo
도구에서 필터링 작업을 수행할 때 사용됩니다.
필터링 작업이 완료되면,filter-repo
폴더와 그 안에 있는 파일들은 더 이상 필요하지 않기 때문에, 작업이 끝나면 삭제할 수 있습니다.
.mailmap
이란?, .mailmap
생성 & 작성하기Git - gitmailmap Documentation
.mailmap
에 작성합니다.touch .mailmap
두선아 Dusuna
라는 이름의 사용자의 dusuna@DESKTOP-GOH013C
라는 이전 이메일 주소를 가진 커밋을, 94776135+dusunax@users.noreply.github.com
라는 이메일 주소로 매핑하고자 하는 예시입니다.두선아 Dusuna <94776135+dusunax@users.noreply.github.com> <dusuna@DESKTOP-GOH013C>
.mailmap
파일을 적용하여 이전 git 커밋에 이메일 주소를 강제로 필터, 매핑합니다.!위험! git clone
해서 사용하지 않았다가 큰일 날 수 있음!
python3 git-filter-repo --force --mailmap .mailmap
git push --force origin main
--force
로 push했습니다.// git config user.email "내 이메일 주소"
$ git config --global user.email 94776135+dusunax@users.noreply.github.com
// git config user.name "내 사용자 이름"
$ git config --global user.name 두선아 Dusuna