이런 상황이 생겼다.
외부에 제공하는 API를 하나 추가해야 할 일이 생겼다. 작업 위치로 들어가보니 그 전 작업자가 public_html
아래에 aa
(실제로 이 이름이 아니라 예시)라는 디렉토리를 만들고 이 디렉토리 안에서 git을 설정하고 gitlab 원격 저장소를 연결해놓은 상태.
그런데 내가 다른 endpoint가 필요해서 bb
라는 디렉토리를 만들고 작업을 하려고 보니 새로 git init
을 해야 하는 상황인 것이다. 굳이 public_html
아래에 디렉토리마다 저장소를 관리해야 할 이유가 없었기 때문에, aa
가 아닌 상위 디렉토리로 기존 git 설정을 가져오기로 했다. 물론 commit 내역도 보존해야 했다.
어떻게 하면 좋을까?
나의 검색 능력 부족 탓인지 내 상황과 맞는 방법을 찾기가 어려웠다.
repository 통합? 아니다. git 디렉토리 이동?? 그것도 아니다.
그러다가 이것을 찾았다.
딱 나의 상황에 맞는 방법이었고 생각보다 간단했다.
aa
디렉토리가 새로운 public_html
이 되도록 만들어 주면 된다.즉, 바꿔치기를 하는 것이다.
![]() |
---|
수정 전에는 이런 구조로 되어있었다.
aa
디렉토리 안에서 새로운 aa
를 만든다.
기존 aa
안에 있던 파일과 디렉토리들을 git mv
명령으로 새로 만든 aa
안으로 이동한다.
public_html$ cd aa
aa$ mkdir aa
aa$ cd aa
aa$ git mv lib index.php aa/
git status
를 입력해보면 파일명이 변경된 것 처럼 나올 것이다. 이때, 기존에 gitignore에 들어가있는 파일이나 디렉토리는 당연히 git mv
명령어로 이동되지 않는다. git이 관리하는 파일이 아니기 때문. 그런 파일들은 그냥 mv
명령으로 이동시켜 주면 된다.
기존 aa
밑에 있는 내용들을 .git
과 .gitginore
를 제외하고 새로 만든 aa
안으로 이동하는 것이 포인트다.
현재 구조를 다시 한번 확인하면 이런 상태다.
![]() |
---|
다시 기존의 aa
안에 이번에는 bb
디렉토리를 새로 만든 aa
안으로 이동한다. 여기에서는 없지만 만약 public_html
에 aa
나 bb
디렉토리 외에 다른 파일들이 있었다면 이 파일들도 새로 만든 aa
로 이동한다.
이제 디렉토리는 아래와 같이 되었다.
![]() |
---|
이제 public_html
로 이동해서 aa
디렉토리를 public_html
로 변경하기만 하면 끝이다. 다만, 그 전에 일단 public_html
의 이름을 임시로 다른 이름으로 변경한 후에aa
를 변경해야 한다.
public_html$ cd ..
~$ mv public_html public_html2
~$ cd public_html2
public_html2$ mv aa ../public_html
이렇게 해서 원하던 대로 아래와 같은 경로의 디렉토리 구조를 가지게 되었다.
git log
를 확인해보면 기존 commit 내역들도 그대로 남아있는 것을 확인할 수 있다.
gitignore
파일을 열어서 기존 경로를 aa
아래로 수정해주고, 새로 추가된 파일들과 변경된 경로들에 대한 내용을 commit 해주면 완료.![]() |
---|