당황하지 않고 Git Master가 되는 그 날까지.
개요
최근 진행했던 프로젝트 요구사항 때문에 GitLab Private 저장소에서 개발을 진행했습니다.
해당 프로젝트를 포트폴리오로 쓰기 위해서는 개인 Public 저장소인 Github로 옮길 필요가 있습니다.
해당 포스팅에서는 GitLab to GitHub 방법에 대해서 알아보겠습니다.
당연히 Commit 기록까지 같이 옮기기 위한 방법을 설명하겠습니다.
git clone (normal)
1. 옮기고자하는 기존 원격 레포지토리 clone
$ git clone [레포지토리 주소]
2. 옮기고자하는 새로운 원격 레포지토리로 remote 변경
$ git remote set-url origin [새로운 레포지토리 주소]
3. push
$ git push
기존에 사용하던 git clone (normal) 또한 commit 내역을 가져오기 때문에 그대로 새로운 원격 레포지토리에 push해도 커밋내역이 반영이 됩니다.
git clone --mirror
--mirror 옵션을 사용하게 될 경우 기존 normal clone과 비교하여 차이점이 궁금하여
검색을 다양하게 해보았지만 결과적으로 자세하게 이해하기는 힘들었다.
찾아보며 뚜렷하다 느낀 차이점은 다음과 같다.
git clone의 경우 추적 브랜치만 새로 복제될 레포지토리에 반영됨. 복제된 모든 원격 브랜치 및 refs는 무시
그에반해 mirror의 경우에는 모든 로컬, 원격 브랜치 및 ref를 가져온다. 이말은 즉슨 모든 것이 정확하게 복제되어 반영이 된다는 걸 의미함.
1. 작업하던 GitLab 레포지토리 Bash 오픈.
2. GitLab 프로젝트의 원본을 Clone.
$ git clone --mirror [원본 레포지토리 경로]
3. Clone한 프로젝트로 이동.
$ cd [원본 저장소 이름].git
2번에서 clone이 정상적으로 이루어졌다면 해당 디렉토리에서 .git으로 된 폴더가 하나 생성되었을 겁니다.
해당 폴더로 이동후 다음 4번을 진행하시면 됩니다.
4. 미러링할 GitHub 레포지토리 생성
GitLab에서 진행된 프로젝트를 미러링할 레포지토리를 생성하는 과정이며,
Repository name, Public/Private 등등 원하는 옵션을 지정 후 새롭게 만들어 주시면 되겠습니다.
5. Clone한 프로젝트의 원격 URL을 GitHub으로 변경.
$ git remote set-url --push origin [새로 생성한 GitHub 레포지토리 주소]
새롭게 생성된 GitHub 주소를 찾지 못할 경우 아래 더보기+를 클릭해주세요.
새롭게 생성된 GitHub 레포지토리 주소를 못찾을 경우 아래 사진을 참조하시면 됩니다.
이 후 remote가 변경되었는지 확인
$ git remote -v
push url만 변경하였기 때문에 fetch url은 기존과 동일한 점 참고해주세요.
6. 변경된 remote url로 Push.
$ git push --mirror
여기까지 정상적으로 수행되셨다면 GitHub 레포지토리로 가셔서 새로고침을 클릭하면 정상적으로 반영이 된 걸 확인할 수 있습니다.
만약 push과정에서 다음과 같은 Authentication 에러가 발생할 수 도 있습니다.
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for ~
원인은 Github에서 2021년 8월 13일부로 비밀번호 인증이 제거되고 Token or SSH 인증만 허용하도록 바뀌어서 생기는 문제입니다.
해결방법으로는 당연히 Token 혹은 SSH 인증방식을 통해 인증을 해주면 됩니다.
다음은 해결하는 과정에 대한 흐름입니다.
Authentication Error 해결하기
1. 현재 적용된 git config의 global값이 올바른지 확인합니다.
$ git config --list
user.name = GitHub Nickname과 동일한지
user.email = GitHub Email과 동일한지
user.password = 이 부분이 로그인할 때 쓰이는 비밀번호 값인지
아마 Authentication 에러가 발생하였다면 당연히 password부분은 로그인할 때 쓰이는 비밀번호 값이거나 비었거나 둘 중 하나일 겁니다.
만약 name과 email 부분에서 특이사항이 없다면 Github 토큰을 발행해봅니다.
2. GitHub Token 발행
GitHub -> Setting
아래로 내려보다 보면 Developer settings 탭을 클릭합니다.
Personal access tokens -> Tokens (classic) -> Generate new token -> Generate new token (classic)
Note : 해당 토큰을 설명하는 부분입니다.
Expiration : 해당 토큰의 유효기간을 설정하는 부분입니다.
Select scopes : 해당 토큰이 가지는 권한을 설정하는 부분입니다. (미러링할 목적이므로 기본적인 권한만 주면 되므로 repo 부분만 클릭 후 생성하시면 됩니다.)
발행 후 토큰은 1회 복사 가능하니 이 점 유의해주시고 별도로 기록해두시는 걸 추천합니다.
2. 발행된 Token으로 git config 재설정
git config --global user.password = "[발행한 토큰]"
위 명령어를 통해 발행된 토큰값으로 password를 재설정 해줍니다.
이 후 다시 아래 명령어를 통해 push를 해줍니다.
$ git push --mirror
push 후 GitHub 레포지토리를 확인해보면 제대로 미러링이 된 것을 확인해볼 수 있습니다.
정리
GitLab -> GitHub로 레포지토리를 복제하는 과정에 대해서 normal clone 및 mirror clone 두 가지 방식에 대해 알아보았습니다.
두 clone 명령의 차이점을 명확하게 알 수는 없었지만 알아보며 느낀점은 다음과 같습니다.
만약 완성된 프로젝트이며 이 후 두 레포지토리 사이의 연관성이 보장되지 않아도 된다고 한다면 normal clone을 진행하여 단순 복제를 진행하면 되며,
기존 원격 레포지토리의 모든 브랜치 및 refs의 내용이 필요하며 연관성을 유지할 필요가 있다면 clone --mirror를 통해 복제하는 것이 좋을 것 같습니다.
이상 GitLab to GitHub Mirroring 과정에 대한 포스팅이였습니다.
'DevOps. > Git' 카테고리의 다른 글
[Git] 특정 파일 혹은 폴더만 add하기 (1) | 2024.01.31 |
---|---|
[Git] Gerrit을 통한 Commit 단위 코드리뷰 (0) | 2024.01.23 |
[Git] Github-Flow [깃 브랜치 전략] (0) | 2024.01.16 |
[Git] 원격 레포지토리 변경사항 로컬 브랜치로 가져오기 (0) | 2024.01.15 |
[Git] Git-Flow [깃 브랜치 전략] (0) | 2024.01.15 |
개발 기술 블로그, Dev
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!