Git에서 프로젝트를 관리하기 위한 목적은 일반적으로 소스이지 결과문이 아닌 경우가 많다. 또는 개인화된 파일들(프로젝트 개인 설정, 라이센스)등도 관리의 대상이 아니다.
이런 파일들을 관리 대상에서 제외하기 위해서 .gitignore를 설정할 수 있다.
하지만 깜빡 잊고 .gitignore를 설정하지 않은 상태에서 서버에 push를 해버렸다면 이미 등록된 파일로 인해 불필요한 충돌 상황이 발생한다.
이번 포스트에서는 이미 git에 등록된 불필요한 내용들을 삭제하는 방법에 대해서 살펴보자.
cmd 를 이용한 remote 파일 절차
여기서 삭제하려는 파일들은 local에는 필요하지만 remote에서 관리하지 않을 것들을 대상으로 한다. 따라서 무조건 local에서 삭제하면 안된다.
git rm
git의 rm 명령은 기본적으로 index는 물론 working tree에서도 삭제해버린다.
git-rm - Remove files from the working tree and from the index
SYNOPSIS
git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch]
[--quiet] [--pathspec-from-file=<file> [--pathspec-file-nul]]
[--] [<pathspec>…]
index에서만 파일을 삭제하기 위해서는 --cached 옵션을 사용한다. 만약 디렉토리를 재귀적으로 삭제하려면 -r 옵션을 추가한다.
// .bin/hello.class 파일 삭제
$ git rm --cached .bin/hello.class
// .target 폴더 하위의 모든 파일 삭제
$ git rm --cached -r target/
다음은 bin 폴더를 삭제하는 예이다.
d:\ws_sts\utils\util_git>git rm --cached -r ./target/
rm 'target/classes/META-INF/MANIFEST.MF'
rm 'target/classes/META-INF/maven/UseJgit/UseJgit/pom.properties'
rm 'target/classes/META-INF/maven/UseJgit/UseJgit/pom.xml'
rm 'target/classes/com/gray22/common/Infos.class'
rm 'target/classes/com/gray22/common/Student.class'
지금까지의 동작은 index에서 삭제한 것이지 당연히 remote repository에 반영된 것은 아니다.
.gitignore 설정
아직 .gitignore에 대한 설정이 완료되지 않았다면 지금이라도 .gitignore를 설정해준다.
변경 내용 서버에 반영하기
지금까지의 내용을 서버에 반영하기 위해서는 당연히 commit --> push의 과정을 거쳐야 한다.
d:\ws_sts\utils\util_git>git commit -m "불필요한 파일 삭제 처리"
[master 8a3c26b] 불필요한 파일 삭제 처리
12 files changed, 74 deletions(-)
delete mode 100644 target/classes/META-INF/MANIFEST.MF
delete mode 100644 target/classes/META-INF/maven/UseJgit/UseJgit/pom.properties
delete mode 100644 target/classes/META-INF/maven/UseJgit/UseJgit/pom.xml
delete mode 100644 target/classes/com/gray22/common/Infos.class
delete mode 100644 target/classes/com/gray22/common/Student.class
commit 후 push를 통해서 remote에 반영해주자.
d:\ws_sts\utils\util_git>git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 260 bytes | 260.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/quietjun/util_git.git
c350bca..8a3c26b master -> master
다시 remote를 방문하면 변경 내용이 잘 반영된 것을 확인할 수 있다.