윰융
10
2021-11-25 23:11:45 작성 2021-11-25 23:12:43 수정됨
5
150

원격저장소에 .gitignore 파일을 적용하니까 팀원들이 pull 받을 때 심각한 문제가 생깁니다.


Eclipse에서 Spring boot starter 프로젝트를 생성한 후, 처음에는 .gitignore를 적용하지 않고 원격저장소에 push했습니다. (처음부터 .gitignore와 함께 push 하지 않은 이유는 .gitignore에 .settings, .classpath등 프로젝트를 구성하는데 중요한 설정파일들이 작성되어있어서, 처음부터 .gitignore를 적용해서 올리면 팀원들이 내려받을때 프로젝트로 인식하지 못합니다)

이후 다른 팀원들이 각자의 local에 클론한 후에 제가 .gitignore 파일을 적용해서 원격저장소에서 .settings, classpath를 비롯한 설정파일을 지웠습니다.(git rm -r --cached . 했습니다) 이후 팀원들이 pull을 하자 원격저장소와 팀원들의 local이 완전히 똑같아 졌습니다. 즉, gitignore로 원격저장소의 설정파일을 지우자, 팀원들이 pull할때 팀원들의 local의 설정파일도 똑같이 지워진 것입니다. 

평소 이런일이 없었는데 도대체 왜 이런일이 발생하는 것인가요? 그리고 .gitignore를 적용하더라도 원격저장소의 설정 파일만 없어지고 각자의 local에는 설정파일이 남아있게 하는 방법은 무엇인가요??

제발 도와주세요... 이것때문에 프로젝트를 할 수가 없는 상황입니다.

0
  • 답변 5

  • 제타건담
    7k
    2021-11-26 00:28:23 작성 2021-11-26 00:31:17 수정됨

    근데..지금 보면 그게 맞는 동작 아닌가요..?

    .gitignore 파일은 git의 관리대상 파일에서 제외될 파일을 정하는건데.. .gitignore 파일에서 해당 파일을 지우면 그 파일들이 관리 대상이 되는거고 그 상태에서 원격 저장소의 해당 파일들을 지우면 당연 git 서버 측에서는 삭제된 걸로 최종 상태가 된거니까 팀원들 입장에서는 해당 상태로 pull 을 받을때 그 파일들도 같이 지워지는거죠..


    원격저장소를 생성할때 다음과 같이 하시면 괜찮을꺼에요..일단 어느 한 사람의 소스로 최신 소스를 맞춘뒤에 그걸 git 의 원격저장소에 저장합니다..이때 .gitignore 파일도 같이 저장하세요..이때 .gitignore 파일 안에는 eclipse 관련 파일들이 포함되어 있어야겠죠..

    그리고 팀원들은 clone을 이용해서 받죠..그러나 여기까지의 과정에서는 eclipse를 사용하지는 않습니다..git client로 clone 을 받아서 하세요..

    그 담에 팀원들이 각자의 eclipse에서 해당 프로젝트를 import 합니다..프로젝트가 maven이면 maven 프로젝트로 import 하고 gradle 이면 gradle 프로젝트로 import 합니다..그러면 eclipse가 프로젝트를 import 하면서 각자의 환경에 맞는 eclipse 관련 파일들을 생성할꺼에요..그 담에 eclipse에서 git repository를 등록해주면 됩니다..clone 했을때 관련 정보를 같이 가져왔기 때문에 git repository 등록시 프로젝트 루트 디렉토리에 있는 .git 디렉토리로 로컬 저장소를 지정하면 될꺼에요..

  • 윰융
    10
    2021-11-26 02:24:42 작성 2021-11-26 02:28:07 수정됨

    처음부터 .gitignore파일을 같이 저장해서 원격저장소에 올리면, 처음부터 .gitignore가 적용이되서 원격저장소에 설정파일이 올라가지 않습니다..(원격 저장소는 아래사진과 같습니다. 로컬의 프로젝트는 .settings, target 폴더와, .classpath, .project 파일이 같이 들어가 있습니다.) 그래서 팀원들이 git clone 한 후 이클립스에서 import를 하려고 할때, import목록에 나오지 않는 상황입니다. 설정파일이 없는 프로젝트를 clone하면 이클립스가 프로젝트라고 인식을 하지 못하는 것 처럼 보여집니다.. 

  • 윰융
    10
    2021-11-26 02:28:24 작성 2021-11-26 02:29:03 수정됨

    이 사진 입니다.

  • fender
    24k
    2021-11-26 06:16:09

    기본적으로 정책의 문제이긴 한데, 일반적으로 말하면 지금이 맞는 모양입니다. 애초에 메이븐이 왜 등장했는지를 생각해보시면 이해하실 수 있을 겁니다.

    IDE의 설정 파일을 소스 저장소에 올리지 않는 이유는 개발자 마다 다른 제품이나 설정을 사용할 가능성이 있기 때문입니다.

    메이븐이 src/main/java 같은 디렉터리 레이아웃을 관행으로 권장하는 이유부터가, 개발자가 어떤 IDE나 편집기를 사용하더라도 일관된 프로젝트 구조를 유지해서 사람이나 프로그램이 내용을 인식하기 쉽게 하기 위해서이기도 합니다.

    그래서 보통 자바 IDE는 메이븐을 사용하는 프로젝트를 별다른 설정없이 불러올 수 있는 기능을 지원합니다. 그리고 메이븐도 이클립스와 같은 인기있는 IDE의 프로젝트 설정을 자동 생성하는 플러그인을 제공하기도 합니다.

    따라서, 원래 이클립스 프로젝트 설정 같은 것은 각자 개발자가 알아서 만드는 것이 일반적인 관행입니다.

    만일 모든 개발자가 동일한 IDE를 사용하고 IDE의 설정을 완벽히 공유한다면 CI 같은 용도를 제외하면 애초에 메이븐을 쓸 필요가 별로 없습니다.

  • 윰융
    10
    2021-11-26 17:09:17

    해결하였습니다. 답변주신 분들 말대로 저게 맞는 상황이었어요. 이클립스에서 import 할때 existing project into workspace 대신에 project from forder or archive로 하니까 잘 됩니다. 감사합니다~

  • 로그인을 하시면 답변을 등록할 수 있습니다.