본문 바로가기
카테고리 없음

[Git] 팀 프로젝트 형상관리를 하며 알게된 사실들 - intelliJ를 기본 충돌 해결법으로 등록하기, 로컬 브랜치를 원격 브랜치와 연결하기

by niahh 2025. 3. 2.

3월 2일 일요일

 

2번째 연습 팀 프로젝트가 막 시작했다. 작업을 하며 깃과 이런저런 사투를 벌이다가 알게된 몇가지 사실들을 공유 한다.

원격 브랜치로 올릴 필요 없는 파일을 git 추적하지 않는 법

팀프로젝트 작업을 하다가 계속 .idea/폴더가 깃으로 추적 되고 있는걸 발견했다. idea/ 폴더는 IDE가 자동으로 생성하고 관리하는 메타데이터(환경설정을 담고있는) 파일이기 때문에 깃헙에 올릴 필요가 없다.

.gitignore 에 .idea/를 올려도 계속 폴더가 추적되고 있다면,

git rm --cached -r .idea/ 로 idea/를 깃의 추적 대상에서 제외한다. 실제 파일은 삭제하지 않는다.

그럼 아래와 같은 결과를 볼 수 있다:

그밖에 발견한 사실들

./idea 는 숨겨지는 폴더라서 ls 만으로 보이지 않는다. ls -a 로 숨겨진 파일을 모두 볼 수 있다.

  • gitignore 폴더는 프로젝트의 루트에 있어야 한다. 
  • /out 폴더 또한 깃헙에 올릴 필요가 없다. 컴파일된 바이너리 파일이나 빌드 결과물이 저장되는 폴더이다. 소스 코드가 아니기 때문에 깃헙에 오리지 않는다. 소스코드만 있으면 가질 수 있는 정보이다.

변경사항이 있는 브랜치를 완전히 버리고 다른 브랜치를 그대로 받아오기

로컬에서 생성한 브랜치에서 작업한 결과를 모두 버리고 다른 브랜치의 최신 코드를 받아오려면 git reset --hard origin/<otherBranchName> 하면 된다.

IntelliJ를 기본 Merge Conflict 해결 방식으로 설정하기

깃 충돌이 일어났을때 CLI 에서 충돌을 해결하는 것이 아직 익숙하지 않다면 인텔리제이 에디터를 사용해 충돌을 해결할 수 있다. 그러려면 먼저 깃 충돌이 났을때 인텔리제이를 사용하겠다고 설정을 해두어야 한다.

맥에서는:

git config --global merge.tool intellij
git config --global mergetool.intellij.cmd "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea diff $LOCAL $REMOTE $BASE $MERGED"
git config --global mergetool.prompt true

윈도우에서는 :

git config --global merge.tool intellij
git config --global mergetool.intellij.cmd "\"C:/Program Files/JetBrains/IntelliJ IDEA/bin/idea64.exe\" diff $LOCAL $REMOTE $BASE $MERGED"
git config --global mergetool.prompt true

잘 설정 되었는지 확인하고 싶다면 git config --global --list | grep merge.tool 하여 확인할 수 있다.

이제 충돌이 발생하면 git mergetool 하여 인텔리제이의 충돌 해결창 사용할 수 있다.

충돌이 일어난 모든 파일이 창으로 띄워지는데, 이때 왼쪽이 지금 내가 보고 있는 HEAD 이고 오른쪽이 원격 브랜치에 있는 파일이다. 수정 후에 accept 버튼 눌러 병합 결과를 저장하면 된다. 그리고 창을 닫는다.

충돌이 일어나는 모든 파일들을 해결하고 나서는 커밋을 해줘야 한다:

git add .
git commit -m "Resolved merge conflicts"

Git diff intellij로 볼 수 있게 설정하기

git config --global diff.tool intellij

git config --global difftool.intellij.cmd "/Applications/IntelliJ\ IDEA.app/Contents/MacOS/idea diff $LOCAL $REMOTE"

git difftool

하면 인텔리제이에서 바뀐 모든 파일들이 하나씩 차례로 나타난다. 닫기를 누르면 다른 파일이, 또 다른 파일이..

이미 생성한 로컬 브랜치를 원격 브랜치와 연결하기

로컬에 브랜치를 생성해 작업하는 도중, 원격 브랜치 생성을 하지 않았다는 것을 깨달았다.

이렇게 원격 브랜치를 만들고, git fetch origin dev, git pull origin dev 하니

라고 한다.

fatal: the requested upstream branch 'origin/dev' does not exist

깃이 자동으로 원격 브랜치 정보를 받아오지 않는다. 제일 최근 원격 브랜치를 fetch 했을때의 정보만 알고 있다. 그래서 만약 새로운 브랜치를 생성했다면, 깃에게도 git fetch 를 사용하여 알려줘야 한다.

fetch 하여 최신 원격 브랜치 정보를 받아 온후 git branch -r 하여 내가 생성한 원격 브랜치가 원격 브랜치 리스트에 있는지 확인한다.