컴파일러, JVM버전과 클래스 파일(바이트코드)에 대한 이야기로 시작헤보자.
JVM은 Bytecode 실행에 대하여 하위호환성을 보장한다.
높은 버전의 JVM은 낮은 버전의 컴파일러가 생성한 바이트코드는 실행할 수 있다.
그러나 낮은 버전의 JVM은 자기보다 높은 버전의 컴파일러가 생성한 바이트코드는 실행할 수 없다.
*컴파일 시 호환되는 JVM의 버전을 하위버전도 호환되도록 설정해주어야 한다.
*컴파일 시 같은 버전의 JVM만 호환되도록 설정할 수도 있다.
그러면 버전관리를 할 때, java 소스파일을 컴파일 한 .class 파일을 보관해야 하는지 의문이 생긴다.
버전 관리 시스템의 관리 대상을 생각해보자.
아래의 항목들은 버전 관리 시스템에서 관리해줘야 하는 대상일까?
- 소스파일
- 문서
- 설정파일
- 개발도구 설정파일
- 빌드나 컴파일의 결과로 생성된 파일들
소스파일, 문서, 설정파일은 관리대상임에 이견이 없다.
그러나 개발도구 설정파일, 빌드의 결과로 나온 파일들은 관리를 해야 하는지 의문이 생긴다.
환경마다 달라질 수 있는 것이기 때문이다.
그래서 개발도구 설정파일, 컴파일 및 빌드 결과 파일들은 버전관리 시스템에서 관리 대상이 아니다.
예시를 들면, .class, .exe, .jar 같은 형식의 파일들이다.
관리 대상이 아닌 파일들은 git server에 업로드할 필요가 없다.
그런데 working directory에 그러한 파일들이 생성될 확률이 높다.
그래서 어떤 파일들을 깃에 애드할 때 무시할 것인지 사전 설정할 수 있는 기능이 만들어졌다.
그것이 .gitignore 파일이다. 이 파일은 리포지토리의 루트에 위치시킨다.
어떤 파일이나 경로를 버전관리 대상에서 제외할 지 알려주는 파일이다.
.gitignore는 와일드카드(asterisk)를 허용하며 파일명.확장자 로 두면 된다.
*bash 가 뭔가? born again shell 이다.
리눅스 쪽에서 많이 쓰던 쉘이고 지금도 많이 쓴다. (지금은 리눅스도 zsh 많이 쓴다.)
쉘마다 명령어가 좀 다르다.
참고로 https://www.toptal.com/developers/gitignore 요 사이트에서 개발 언어, 운영체제 등 환경에 따라 필요한 .gitignore 의 내용을 자동생성할 수 있다.