티스토리 뷰
기존에 로컬에서 작업하던 레포지토리를 개인 GitHub에 올리려고 하니 문제가 발생했습니다.
공부 용도로 막 개발하던 레포이다 보니, 커밋 히스토리도 지저분하고 모든 커밋 계정이 회사 계정으로 설정되어 있었습니다.
앞으로 해당 레포를 계속 발전시키고 유지보수하기 위해 개인 GitHub 계정에서 관리하기로 결정했습니다.
이를 위해 다음 작업을 진행했습니다.
- 로컬 PC에 GitHub 계정 추가
- 기존 레포지토리의 커밋 계정을 개인 계정으로 일괄 변경
- 개인 GitHub에 레포지토리 업로드
로컬 PC에 GitHub 계정 추가 설정
1. 계정별 SSH 키 생성
터미널에서 계정마다 SSH 키를 생성합니다.
# 개인 계정용 SSH 키 생성 (이메일: personal@example.com)
ssh-keygen -t ed25519 -C "personal@example.com" -f ~/.ssh/id_ed25519_personal
# 업무 계정용 SSH 키 생성 (이메일: work@example.com)
ssh-keygen -t ed25519 -C "work@example.com" -f ~/.ssh/id_ed25519_work
2. 각 ssh-aget 에 ssh 키 추가
# ssh-agent 실행
eval "$(ssh-agent -s)"
# 각 SSH 키를 ssh-agent 에 추가
ssh-add ~/.ssh/id_ed25519_personal
ssh-add ~/.ssh/id_ed25519_work
3. SSH 설정파일 작성
~/.ssh/config 파일에 계정별 Host 별칭을 추가합니다.
# 개인 GitHub 계정
Host github-personal #별칭
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
# 업무 GitHub 계정
Host github-work
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_work
이제 계정별로 다른 SSH 키를 사용할 수 있습니다.
4. 개인 깃허브에 SSH 키를 등록합니다.
로컬 SSH 공개키를 복사합니다.
pbcopy < ~/.ssh/id_ed25519_personal.pub
GitHub에서 다음 경로로 이동합니다.
Profile > Settings > SSH and GPG keys 로 이동하여 New SSH key 를 등록합니다.
Title은 식별 가능한 이름으로 입력하고, Key에는 복사한 값을 붙여넣습니다.
5. 원격에 new repository 를 생성합니다.
개인 GitHub 계정에서 새로운 Repository를 생성합니다.
6. 로컬 레포지토리에 개인 계정 설정
해당 레포지토리에서 앞으로 사용할 커밋 계정을 설정합니다.
git config user.name <user_name>
git config user.email <email>
원격 저장소를 개인 계정으로 등록합니다.
git remote add origin git@github-personal:<user_name>/<repository_name>
기존 커밋 계정 변경
기존 레포는 커밋 계정이 모두 회사 계정으로 되어 있었고, 커밋 히스토리도 정리가 필요했습니다.
히스토리를 정리하면서 커밋 계정도 함께 변경해 줬습니다.
1. .gitignore 추가 및 민감 정보 제거
기존 레포에는 .gitignore가 없었습니다.
DB 키 등 민감한 파일이 Public 레포에 올라가지 않도록 먼저 .gitignore를 추가합니다.
이후 기존 히스토리에 포함된 키 파일을 제거합니다.
# 먼저 git-filter-repo 를 다운받습니다.
brew install git-filter-repo
# 혹시모를 사고 예방을 위해 백업을 해둡니다.
git branch backup
# 커밋 히스토리에서 파일명에 해당하는 커밋이 있었으면 해당 파일을 모두 제거합니다.
git filter-repo --force --path <파일명> --invert-paths
2. 커밋 작성자/커미터 정보 변경
# 현재 커밋의 계정명과 이메일이 어떻게 되어있는지 확인합니다.
git log --pretty=format:"%h %an <%ae>"
# 커밋 메시지의 계정명/이메일 을 변경합니다.
git filter-repo --commit-callback '
if commit.author_email == b"<기존 이메일>":
commit.author_name = b"<바꿀 계정명>"
commit.author_email = b"<바꿀 이메일>"
if commit.committer_email == b"<기존 이메일>":
commit.committer_name = b"<바꿀 계정명>"
commit.committer_email = b"<바꿀 이메일>"
'
# 정상 변경됐는지 확인합니다.
git log --pretty=format:"%h %an <%ae>"
3. GitHub로 업로드
git push origin master
이로써 로컬 레포지토리를 개인 GitHub 계정으로 깔끔하게 업로드할 수 있습니다.