git 으로 버전 관리할 경우 파일이나 폴더의 이름 변경도 추적할 수 있어야 합니다.

특히 리팩토링시 클래스나 패키지 폴더의 이름 변경은 자주 발생하는 작업이므로 변경 내역을 잘 관리해야 합니다.

변경 사항을 추적하기 어려워지니 절대 삭제후 add 하지 마세요.


git mv

파일 이동 명령어인 mv 사용하면 rename 와 동일한 효과를 얻을 수 있으며 이름 변경 사항을 추적할 수 있으며 다음과 같이 사용하면 됩니다.

git mv oldName newName
BASH

-n( --dry-run) 옵션을 사용하면 적용전에 어떻게 변경되는지 테스트가 가능합니다.


예로 config.production.json 를 config.production.json.example 로 변경할 경우 아래 명령을 실행한 후에 commit 해주면 됩니다.

git mv config.production.json config.production.json.example
git commit -m "rename"
BASH


변경 사항을 확인하기 위해 log --patch 명령을 실행하면 이력에서 rename history 도 확인할 수 있습니다.

git log -p -1
BASH
commit 1aa5acddea1f332bf7dec766156d63e69672ed47 (HEAD -> main)
Author: KwangSeob Jeong <lesstif@gmail.com>
Date:   Thu Oct 21 15:14:08 2021 +0900

    rename

diff --git a/config.production.json b/config.production.json.example
similarity index 100%
rename from config.production.json
rename to config.production.json.example
BASH

mv 시 invalid argument 가 발생할 경우

mv 명령시 invalid argument 에러가 발생하는 경우가 있습니다. 제 경험상 파일이나 폴더 이름의 일부를 대소문자로 변경하는 경우에 발생합니다.

예로 sprint 라는 폴더를 Sprint로 첫 글자를 대소문자로 변경하는 경우 위 에러를 접하게 됩니다.


이럴 경우 아래와 같이 임시 폴더 이름으로 rename 하고 임시 폴더 이름을 원래 바꾸려고 한 이름으로 rename 하는 2단계 절차를 거치면 됩니다. 

git mv sprint tmpDir
git mv tmpDir Sprint
BASH


Ref