본문 바로가기

프로젝트 관리/Git

UE4 X Git 기능 테스트 기록

# 이 포스팅은

Git의 기초적인 기능들이 언리얼 에디터에서 또 Git Gui 등 외부 툴에서 어떻게 동작하는지 테스트를 하면서 작성했다.

그리고 Git을 사용할 때 몰랐던 내용을 정리했다. 특히 Reset 및 Revert를 잘 몰랐었는데 이번기회에 정리를 했다.

 

# Git Gui, not Source Tree

깃을 설치하면 기본으로 제공되는 Git Gui로 테스트 했다. 소스트리는 다음에 얘기하자.

Sourcetree | Free Git GUI for Mac and Windows

A Git GUI that offers a visual representation of your repositories. Sourcetree is a free Git client for Windows and Mac.

www.sourcetreeapp.com

 

# 파일 생성 및 수정

언리얼 에디터 내에서 파일을 생성하고 저장하면 바로 Staging Area로 들어간다. 이 때, 커밋을 하지 않고 바로 수정을 가하면 동일한 파일에 대해 Unstaged Change 항목이 만들어진다.

 

 

꼭 에디터에서 하지 않아도 Git Gui에서 Staging 및 Commit 모두 잘 된다. 에디터를 켜놓은 채로 해도 된다.

 

# 이름 변경

기존 에셋의 이름을 변경하고 Commit 해보자. 에디터에서는 Submit 이라고 한다. Perforce의 영향인 것 같다.

 

 

에디터에서 신뢰성 있게 동작한다. 이름을 바꾼 상태에서 GitGui로 커밋을 해보자.

 

 

 

마찬가지로 잘 된다. 다만 에디터에서 보여지는 빨간 십자표시(Staged 표시)는 몇 초 있다가 사라진다. 이름 변경 및 커밋도 웬만하면 에디터에서 하자.

 

이름 변경 심화 내용

이름 변경은 Git 입장에서는 새로운 파일이 생기고, 기존 파일은 삭제되는 것으로 취급한다. 하지만 언리얼 에셋은 이름이 바뀌면 기존 이름으로 Redirector가 생긴다. Redirector 파일 또한 .uasset이기 때문에 Git에게 추적당한다. 따라서 GIt은 기존 에셋은 수정이 됐다고 인식하며, 동시에 새로운 에셋이 추가됐다고 본다.

 

Filters에서 Redirector를 켜보면 확인할 수 있다.

 

 

이때 Fix Up Redirectors in Folder 기능으로 Redirector 파일까지 지운다면

 

 

 

그제서야 파일이 삭제된 것으로 인식한다.

 

 

 

Redirector 정리(를 포함한 파일 삭제 작업) 후에, Gui에서는 Commit 하지 말자. 에디터에서 찌꺼기가 남는다. 이 문제도 물론, 에디터를 재시작하면 해결되긴 한다.

 

이미 Commit 된 파일 삭제 내역이 반영이 안된 모습이다.

 

당연한 말일 수 있는데, 에디터에서 구현되어 있는 기능들은 Gui에서 안쓰는 게 좋은 것 같다. 에디터가 외부에서 일어난 변경사항을 반영하지 못할 수도 있기 때문.

 

# 파일 삭제

파일을 삭제하면 에디터 상에서는 수정이 됐다는 것을 확인할 수 있는 표시가 없기 때문에, 그때 그때 커밋을 해주는 게 좋을 것 같다.

 

 

잘 동작한다.

 

# 과거 시점으로 되돌아가기

트리에서 Reset master branch to here

 

 

 

 

Reset type을 고른다.

Soft는 가리키는 커밋만 해당 시점으로 바꾼다.

Mixed(디폴트)는 가리키는 커밋과 Index를 해당 시점으로 바꾼다.

Hard는 가리키는 커밋, Index와 함께 Working Directory의 파일까지 바꾼다.

 

 

 

Hard는 커밋하지 않은 내역은 모두 삭제한다. 반대로 얘기해서 모든 수정사항이 커밋되어있다면 Hard를 선택해도 어떤 상태든 복원 가능하다. 오히려 Hard가 다른 옵션들보다 깔끔할 수 있다. Reset 관련 내용은 아래 링크에서 확인해보자.

 

Git - Reset 명확히 알고 가기

지금까지 reset 명령을 실행하는 기본 형태와 사용 방법을 살펴봤다. reset 명령을 실행할 때 경로를 지정하면 1단계를 건너뛰고 정해진 경로의 파일에만 나머지 reset 단계를 적용한다. 이는 당연한

git-scm.com

 

# Revert로 파일 수정사항 되돌리기

파일 단위의 수정사항을 되돌릴 땐 Revert가 유용하다. 이 때 조건은, 파일 단위로 Commit을 해 놓았어야 한다는 것이다. 아래 이미지를 잘 보면, Deleted 2 unused buttons 이후에 다른 커밋(Created Print~)이 있었다. 이 때 Reset으로 Deleted 2~ 커밋으로 되돌아 가버리면 그 이후 커밋까지도 초기화가 된다. 이 사태를 막기 위해 Revert로 해당 커밋의 변경사항만 되돌릴 수 있다. Revert는 새로운 커밋을 만든다.

 

 

 

# 이 Revert 저 Revert

Revert라는 이름을 가진 또 다른 기능이 있다. Unstaged Change를 되돌리는 것도 Revert 라고 한다. 이 Revert는 에디터에서 지원한다. 그리고 귀찮은 일을 만들기 싫다면 반드시 에디터에서 이 기능을 사용해야 한다. 외부에서 Revert Changes를 할 경우, 제대로 에셋이 복원되지 않을 수 있다. (물론 에디터를 껐다 키면 제대로 복원된 것을 확인할 수 있다.)

 

 

 

# 에디터는 끄고 Reset / Revert 하자

Git으로 Reset 이나 Revert(커밋 복원) 등을 하기 전에 엔진은 꺼주는 게 좋다. Staging / Commit은 에디터에서 지원하는 기능이기 때문에 자유롭게 사용하면 된다.