회사나 github이 아닌 다른 git 저장소의 레포를 나의 개인 github으로 옮겨올 수 있습니다.
뿐만 아니라 잔디도 옮겨 심을 수 있죠.🌱
(작업 내용 요약)
1. GitHub에서 복사해올 빈 레포 생성 (private로)
2. GitLab 레포에서 1번에서 생성한 미러링 레포 경로 입력
3. 서로 이메일이 달라서 커밋내역이 나오지 않는다면, 이메일 변경하여 푸쉬하기.
원본 레포를 복사해올 새로운 GitHub 레포를 생성합니다.
(선택) 회사 레포 처럼 오픈되면 안되는 레포의 경우 private로 생성합니다.
저는 미러링 레포라는 것을 알 수 있도록 mirror_
라는 이름을 추가해주었습니다.
그리고 개인적인 레포라 private
로 설정해주었어요.
이제 미러링할 GitLab 레포로 이동합니다.
해당 레포 경로 > Settings > Repository > Mirroring repositories
에서 Expand
클릭.
Add New
버튼을 클릭하여 미러링 레포 경로를 입력합니다.
미러링할 레포에 1번에서 생성한 GitHub 경로를 입력합니다.
여기서 주의할 점은 Password에는 GitHub 토큰을 입력해야 한다는 것입니다.
그리고 Mirror repository
를 클릭하면 이렇게 레포가 추가됩니다.
--mirror
옵션을 붙이면 모든 브랜치와 태그를 포함한 완벽한 복제를 수행합니다.
git clone --mirror https://gitlab.com/your-gitlab-repo.git
cd your-gitlab-repo.git
기존 커밋에 포함된 사용자 메일 주소와 이름을 일괄 변경하려면 Git filter-repo
도구를 사용합니다. 이 패키지를 파이썬을 기반으로 설치, 실행 해야 합니다.(파이썬 설치는 이 글 참조: https://velog.io/@suji5358/Windows-Python-pip-설치하기)
pip install git-filter-repo
Windows에서는 명령 프롬프트(cmd)
또는 Git Bash
를 사용해 git filter-repo
명령어를 실행할 수 있습니다.
여기서 "old_email@example.com"
에 원본 레포(gitlab 메일주소)를 입력하고,
"new_email@example.com"
에 미러링할 레포(github 메일주소)를 입력합니다.
git filter-repo --commit-callback '
if commit.author_email == b"old_email@example.com":
commit.author_email = b"new_email@example.com"
commit.author_name = b"New Name"
if commit.committer_email == b"old_email@example.com":
commit.committer_email = b"new_email@example.com"
commit.committer_name = b"New Name"
'
아래와 같이 "Completely finished after 1.28 seconds."
라고 나오면 복사에 성공한 것입니다!🎉
cmd에서 git log를 출력하여 실제로도 잘 반영되었는지 확인합니다.
git log
git push -f
명령어로 강제 push를 해줍니다.
그럼 모든 브랜치와 태그가 푸시됩니다.
그리고 GitHub 레포지토리에서 커밋 기록과 사용자 정보(이름, 이메일)가 올바르게 변경되었는지 확인하고, 잔디도 확인합니다.
gitlab의 커밋내역이 잘 복사되었네요👍