인프런 커뮤니티 질문&답변

윤경훈님의 프로필 이미지
윤경훈

작성한 질문수

실무자가 알려주는 Git - 입문편

.gitignore 관련 문의입니다.

작성

·

1K

1

안녕하세요.

이번에 좋은 기회로 수강을 하게 되었는데요.

아직 강의 초반이긴 하지만 협업 관련 궁금해서 문의드립니다

깃허브에 A라는 프로젝트가 올라가 있습니다.

이를 로컬 pc에서 clone을 이용해서 다운로드 하여서 이클립스에 import를 하였습니다. 해당 프로젝트를 B라고 하겠습니다.

A프로젝트는 tomcat7, jdk8 구성이었고 로컬PC는 tomcat9, jdk8 환경입니다.

A프로젝트를 로컬로 가져온 B프로젝트에서 tomcat을 9로 설정하니 

.classpath

.settings/org.eclipse.wst.common.component

.settings/org.eclipse.wst.common.project.facet.core.xml 

등이 새로 생기더라고요 

보니깐 A프로젝트를 깃허브에 올릴때 환경과 B프로젝트에서의 환경차이로 인해 생기는거 같은데요.

처음부터 .ignore 를 썼으면 모르겠지만, ignore에 작성을 하지 않아서 위의 파일들이 tracking 대상이 되는거 같습니다.

여기서 제가 하고 싶었던건 환경차이로 인해 생긴 B프로젝트의 .classpath파일같은 것을 더 이상 tracking하지 않고 B프로젝트에서 수정만 소스만 깃허브에 올리고 싶습니다.

그래서 인터넷에 찾아보니 

.gitignore를 수정하고

git rm -r --cached 

git add .

git commit -m 'remove ignore'

git push {remote}{brach}

이렇게 ignore 를 수정해서 다시 올리는 방법이 있더라고요.

저렇게 해서 올리면 일단 history에 ignore 수정한 내역이 올라옵니다.

여기서 궁금했던게 깃허브에 있는 A프로젝트를 다른 제 3자가 pull을 해서 받습니다.

이때 gitIgnore로 추가한 .classpath 등의 파일이 삭제된 상태로 제3자한테 pull이 됩니다 ㅠㅠ 

간략 요략드리면 

A프로젝트의 .classpath는 그대로 유지하면서 

로컬의 gitIgnore 대상이 아니라서 tracking 대상이 된 B프로젝트의 .classpath 파일만 tracking 대상에서 제외할수 잇는 방법은 없을까요?

A프로젝트의 저런 환경파일들이 실제 서버의 배포환경부분이 포함되어 있다면 이 부분은 건들지 않고 그대류 유지만 하고 수정한 소스만 올리고 싶어서요......

말로 하니 설명이 기네요 ㅠㅠ

답변 3

1

윤경훈님의 프로필 이미지
윤경훈
질문자

제 질문이 조금 부족한거 같습니다.

그림과 같이 다시 질문 드려요.

A라는 사람이 최초에 스프링 프로젝트를 이클립스에서 생성하고 원격저장소에 올렸습니다. ( 이때 .gitignore 설정을 안했다고 가정)

그리고 그걸 B라는 사람이 PULL 해서 로컬로 받았습니다.

B라는 사람이 PULL해서 받은 프로젝트를 이클립스에서 JDK 및 톰캣 버전으로 바꾸어서 설정을 하였습니다.

그러고 나서 보니 아래와 같이 환경관련 파일이 git 수정대상으로 올라왔습니다.

해당 파일들은 설정파일이므로 최초에 원격저장소에 있는 설정파일과 내용이 다르겠죠..

따라서, 이 파일들을 제외하고 수정한 java파일만 push하고 싶습니다.

이미 트랭킹을 당하고 있는 파일이다 보니 git ignore에 해당 내역을 추가해서 실행합니다.

git rm -r --cached .

git add .

git commit -m 'gitignre add'

까지 하게 되면, 

이렇게 gitignore 대상이 삭제가 되고, 트래킹대상에서 제외가 됩니다.

이 상태에서 문제는 B라는 사람의 로컬 프로젝트에서도 저 .setting 등이 사라지면서 tomcat에 프로젝트 add도 안되고

maven update 시 

Could not update project testMVC configuration

Preference node "org.eclipse.wst.validation" has been removed.

이런 에러가 나오더라고요.

즉 설정파일이 지워져서 그런건데....

이럴 경우 어떻게 해야 하나요?

B가 최초에 PULL해서 받았을떄 설정파일들은 원격저장소에 올리지 않길 바래서 gitIgnore를 썼더니 제외파일들이 사라지면서 로컬도 프로젝트 구조가 망가져 버리는데요....

0

Country님의 프로필 이미지
Country
지식공유자

안녕하세요.

이 상태에서 문제는 B라는 사람의 로컬 프로젝트에서도 저 .setting 등이 사라지면서 

<-- 파일이 사라 지시나요? 

제가 조금전에 비슷한 상황 만들어서 테스트 해보았는데요,

1) 기존에 git 트래킹 되다가 2) .gitignore에 추가되고 3) 적어주신 옵션들을 입력해서 더이상 git 트래킹이 되지 않는 것 확인했고 파일도 여전히 존재 하는 것을 확인했습니다.

제가 테스트한 내용 공유드립니다.

감사합니다.

0

Country님의 프로필 이미지
Country
지식공유자

안녕하세요 경훈님. 고민이 느껴지는 질문이네요~

아시겠지만 .gitignore에 추가하시면 그 폴더/파일 자체가 더 이상 git이 관리하지 않습니다.

그래서 .gitignore에 .classpath, .settings* 같이 추가하시면  git이 관리하지 않게 되죠.

제가 예전에 이클립스를 써보고 했던 기억을 바탕으로 말씀드리자면

.classpath, .settings* 같은 것들은 .gitignore에 추가해서 사용했던 것 같습니다. 

(IDE들에서도 기본적으로 만들어주는 .gitignore파일에는 추가가 되어 있는 것 같네요)

답변이 잘 되셨는지 모르겠네요 ㅠㅠ

감사합니다.

윤경훈님의 프로필 이미지
윤경훈

작성한 질문수

질문하기