[Git/GitHub] 프로젝트 레포지토리 이전하기(--mirror)

왜 프로젝트를 이전하게 되었을까?

현재 필자가 작업 중인 프로젝트를 이전할 일이 생겼다.
간단하게 요약하면, A라는 팀에서 프로젝트를 진행하고 있었다.
프로젝트를 진행하다 팀이 해체되었고, 해당 팀 레포지토리에서 계속 작업하기에는 무리가 있었다.
그리하여 팀원과 함께 레포지토리를 개설했고, 해당 레포지토리로 파일과 커밋 history를 모두 이전할 수 있는 방법을 찾게 되었다.


Commit History까지 모두 이전할 수 있는 방법을 찾다

모든 개발자들이 그렇듯, 필자도 구글링을 통해 방안을 모색했다.
그렇게 찾은 방법이 --bare--mirror이다.

--mirror을 선택한 이유?

사실 --bare가 뭔지 모른다...

 

근데 왜 --mirror을 선택했나요?

사실 단순 네이밍만 보고

     "mirror..? 거울처럼 이전할 수 있다는 건가? 이거 한 번 써봐야지!"

라는 단순한 생각으로 사용하게 되었다.

 

--bare에 관해서는 필자도 한번 찾아보고 블로깅하겠다 !!
(기대 부탁 :) )


그래서 어떻게 사용한다고?

우선 모르는 사람들을 위해 짚고 가야 할 것이 있다.

git init을 통해 프로젝트 디렉터리에 초기화를 진행하면 git이 우리의 프로젝트를 추적하기 위해 숨겨진 디렉터리(.git)를 생성한다는 사실이다.

이와 같이 .git디렉터리에는 git이 프로젝트를 감시하며 추출하는 모든 정보가 담겨있다.

 

그래서 프로젝트 이전하는 방법은 언제 알려주나요?

이제부터 진짜다!

앞서 말한 것과 같이, .git에는 프로젝트를 추적하며 기록된 모든 것이 담겨있는데, 프로젝트 파일 뿐만 아니라 history까지 모두 이전하려면 이 .git파일을 옮겨야 한다는 것이다.

그러기 위해서는 우선 기존 레포지토리의 추적 디렉터리를 복사해야 한다.

기존 레포지토리 복사

$ git clone --mirror "기존 레포지토리 주소"

 

위 명령어를 실행하면 "기존 레포지토리명".git이라는 디렉터리가 생기는데, 이 추적 디렉토리를 이전할 디렉토리에 옮겨주어야 한다.

 

단, 여기서 주의해야 할 점은 "기존 레포지토리명".git이렇게 네이밍된 디렉터리 명을 초기상태처럼 .git으로 변경해줘야 한다.

 

명령어로는

$ git mv "기존 레포지토리명".git .git

위와 같이 실행해주고, 이전할 디렉터리에 옮겨주면 된다.

 

한 번에 하기 위해서는

$ git mv "기존 레포지토리명".git [이전할 디렉터리 경로]/.git

 

새로운 디렉터리에 레포지토리 SET!

우선 프로젝트를 이전하기 위해 디렉터리를 생성해준다.

프로젝트를 시작할 때 우리는 디렉터리 생성 후 뭘 하는지 살펴보겠다.

  1. git init
  2. git config user.name "github 이름"
  3. git config user.email "github email"
  4. git remote add origin "깃 레포지토리 주소"
  5. git remote -v
    위 과정을 진행하는 것과 같이 진행해주는데,
    4번의 과정만 6번으로 변경해준다.
  6. $ git remote set-url origin "새로운 레포지토리 주소"

이제 이전시키기면 하면 된다!!

 

새로운 디렉터리에 프로젝트 이전!

이렇게 remote주소까지 이전했다면, 예전 디렉터리에서 clon.git파일을 push해줘야 한다.

$ git push --mirror

이렇게 프로젝트 이전이 완료되었다!

refspecs 오류 발생?

혹시 프로젝트 이전이 끝나고, 아래와 같은 오류가 발생한다면 추후 포스팅을 해드리겠다!

 

fatal: --mirror 옵션은 레퍼런스명세와 같이 쓸 수 없습니다
혹은
error: --mirror can't be combined with refspecs

'형상&버전 관리' 카테고리의 다른 글

[Git/GitHub] `--bare`와 `--mirror` 뭐가 다른가?  (0) 2024.04.13