현재 다른 사이트에서 작성한 것을 임시로 옮긴 것이라 가독성이 떨어질 수 있습니다.
0. 커닝페이퍼
Pull
→ 본격적인 작업 시작 전 → 작업 도중 커밋을 하지 않은 상태에서 절대 실행하지 마세요! → 저장되지 않은 사항 롤백될 가능성 있음
Commit
→ 작업을 완료 했을 때, 저장하고 싶을 때 Commit을 하여 리포에 저장할 수 있습니다.
Push
→ 커밋, 저장을 한 데이터를 서버에 반영합니다

Discard

→ 변경된 파일을 서버의 데이터로 롤백
→ 작업하지 않은 파일인데 유니티에서 지멋대로 바꾸는 파일들이 있습니다.
→ 그 친구들을 선택하여 Discard해주어 롤백하면 충돌의 위험이 대폭 줄어듭니다.
1. git 최초 설치
1.1. git 설치

1.1.1. **https://git-scm.com/downloads/win** → 해당 사이트에서 64-bit Git for Windows setup을 클릭하여 다운로드 받아주세요

1.1.2. Git 설치 응용프로그램을 실행하여 우측 하단 install 클릭해 설치해주세요
<aside> 💡
싹 다 Next 로 넘기시면 됩니다.
</aside>
1.2. Fork 설치

**1.2.1. https://git-fork.com/** → 해당 사이트에서 64-bit Git for Windows setup을 클릭하여 다운로드 받아주세요

1.2.2. Fork 설치 응용프로그램을 실행하여 우측 하단 Finish 버튼을 눌러주세요(위에 User name과 Email 채워주세요)

1.2.3. Fork가 정상적으로 설치되었습니다.
<aside> 💡
다크모드 설정하는 법

</aside>
2. git Repository 최초 연결
2.1. gitlab 가입

2.1.1. https://gitlab.molayo1419.synology.me/ → 해당 주소로 이동하여 우측 하단 Register now 버튼을 클릭하세요.

2.1.2. 노란 부분을 모두 채워주시고, Continue 버튼을 클릭합니다. (본명 안적고 활동명 채우셔도 됩니다)
2.1.3. 관리자(몰라요)의 승인을 기다립니다.
2.2. git Repository 최초 연결

2.2.1. 디스코드서버에서 ‘몰라요’가 공유한 git Repository 주소를 찾아 복사합니다.

2.2.2. Fork 창을 열어 좌측 상단, File → Clone 버튼을 찾아 클릭합니다.

2.2.3. Repository Url에 ‘몰라요’가 공유한 Repository 주소를 입력합니다.
2.2.4. parent Folder 우측 폴더 아이콘을 선택하여 컴퓨터에 저장할 위치를 지정합니다.
2.2.5. Clone 버튼을 누릅니다.
<aside> 💡
If 로그인창이 뜨면
</aside>
→ 아까 gitlab 가입하신 닉네임과 비밀번호를 기입하여 로그인합니다.

2.2.6. 정상적으로 불러와졌다면 이것과 비슷한 상태입니다.
2.2.7. 가장 상단 커밋을 더블 클릭(앞에 origin/develop이라는 문구가 있을 겁니다)하여 가장 최신 버전 커밋을 다운받습니다.
<aside> 💡
If Track 창이 뜬다면?

→ 새로운 창의 우측하단, Track 버튼을 클릭합니다
</aside>
2.3. 유니티에 파일 연결

2.3.1. 좌측 상단, Repository → Open in File Explorer를 누르면 파일탐색기에서 유니티 파일을 확인할 수 있습니다.


2.3.2. 유니티 Hub에서 Add project from disk를 통해 저장된 유니티 프로젝트를 실행합니다.
2.4. 브챗 프로젝트라면

2.4.1. Add Existing Project를 통해 저장된 유니티 프로젝트를 실행합니다.

2.4.2. Manage Project를 창 내부를 들어갑니다. 창이 하나 뜨는데 Resolve 버튼을 누릅니다.
2.4.3. Open Project로 프로젝트 여시면 됩니다.
3. git의 구조
3.1. git이란?
Git이란 분산형 버전 관리 시스템(Version Control System) 의 한 종류입니다.
버전관리란?
버전관리 시스템은 파일변화를 시간에 따라 기록했다가 나중에 특정시점의 버전을 다시 꺼내올 수 있는 시스템입니다.
- 시간에 따라 수정 내용을 비교해 볼 수 있습니다.
- 누가 문제를 일으켰는지도 추적할 수 있습니다.
- 파일을 잃어버리거나 잘못 고쳤을 때도 쉽게 복구할 수 있습니다.
3.2. git의 작동 구조


그림은 복잡하지만 4개만 알면 됩니다.
Git Directory 별 설명
Workspace : 실제 파일탐색기에서 확인 가능한 온전한 작업 공간
Staging : 내가 직접 선택하여 저장소에 올릴려는 파일들
Local Repository : 개인 컴퓨터에 각자 존재하는 git 저장소 Remote Repository : 원격 git 저장소(서버), 파일을 원격 저장소에 업로드(Push)함으로써 다른 사람도 내 파일을 공유받을 수 있는 상태가 됩니다.
Git 작업 행위
Git add(stage) : 최신 Local Repository와 비교해 변경된 파일 중, 업로드할 파일을 선택하는 행위
Git commit : staging한 파일을 Local Repository에 적용하는 행위 Git push : Local Repository의 적용사항을 Remote Repository에 다시 적용하는 행위
Git pull : Remote Repository의 최신 커밋을 내 Local repository와 Local Workspace에 적용하는 행위
→ 정리하자면, 우리는 Remote Repository에서 최신 작업물을 받고, 내 작업물을 Remote Repository에 적용하는 것입니다.
4. Fork 사용 방법
4.1. 인터페이스 설명

All Commits 창
빨간 구역 : 지금까지의 모든 커밋 이력을 확인할 수 있습니다.
주황 구역 : 빨간 구역에서 선택한 커밋의 세부 기록을 확인할 수 있습니다. 파랑 구역 : Branch 및 Submodules를 확인할 수 있습니다(어지간하면 사용X) 노랑 구역 : Fetch, Pull, Push 버튼이 모여 있습니다.
→ Remote Repository와 Local Repository의 상태를 확인할 수 있습니다.

Local Changes 창
빨간 구억 : 최신 Local Repository와 비교해, 파일의 변경점을 트래킹하여 표시해줍니다. 파일을 선택한 후, 빨간 구역 우측 상단 stage 버튼을 클릭해 아래 노란 구역으로 이동시킬 수 있습니다.
보라 구역 : 선택한 파일의 변경점을 확인할 수 있습니다.
노랑 구역 : staging 된 파일들을 확인할 수 있는 곳으로, Commit을 할 때 저장될 파일들입니다.
초록 구역 : Commit을 할 수 있는 구역으로, Commit subject에 간단한 메모를 남겨 다른 작업자에게 무슨 작업물을 업로드했는지 알려줄 수 있습니다. Description에 세부적인 설명을 첨가할 수 있습니다. 최종적으로 우측 하단 Commit 버튼을 클릭하여 Commit을 진행할 수 있습니다.
→ Workspace와 Staging한 파일들, Commit할 파일들을 확인할 수 있고, Commit을 할 수 있는 창입니다.
4.2. 다른 사람 작업물 받기(Pull)
<aside> 💡
Pull 땡기기
</aside>

4.2.1. Fork 창 좌측 상단 Pull 버튼을 클릭합니다.

4.2.2. Pull 창이 뜨고, 좌측 상단 Pull 버튼을 클릭합니다.
<aside> 💡
Stash and reapply local changes 모두 체크해주세요!
최초 1회 체크하면, 세팅이 기록되어 다음부터 안 만져도 됩니다.
</aside>
4.3. 내 작업물 업로드(Commit,Push)하기(Commit)

4.3.1. 최신 파일과 비교해 변경된 파일은 Local Changes의 Unstaged 창에서 확인할 수 있습니다.
4.3.2. Unstaged 창에서 작업한 파일을 선택하고, 우측 상단 Stage 버튼으로 아래 Staged 창으로 내립니다. 4.3.3. Staged 창에 작업 내역을 모두 내린 뒤, unstaged 창에 있는 파일을 전체 선택, Discard 합니다.
ㄴ Discard를 하면 파일이 롤백이 됩니다. 작업하지 않은 파일을 초기 상태로 원복하기 위함입니다.
4.3.4. Staged에 커밋할 파일을 모두 내린 상태에서 Commit Subject(커밋 제목)과 Description(부가 설명)을 적은 후 Commit을 합니다.

4.3.5. All commits 창에서 자신의 커밋 내역을 다시 한 번 확인할 수 있습니다.
4.3.6. 좌측 상단 Push 버튼을 눌러 서버에 자신의 작업물을 업로드합니다.

4.3.7. push 창이 뜨고, 아래 체크박스는 모두 해제한 상태에서 Push를 진행합니다.
4.3.8. 이제 다른 작업자도 pull을 받아 당신의 작업물을 열람할 수 있습니다.
<aside> 💡
유니티의 경우 .meta 파일까지 같이 올려야 합니다!
</aside>
<aside> 💡
Discard 부가 설명
자신이 작업하지 않더라도 유니티에서 자동적으로 수정되는 파일들이 있습니다. Ex) Compile File, TextMeshPro, SerializedUdonsharp 등….. 해당 파일들을 업로드할 경우, 다른 작업자가 높은 확률로 Confict(충돌)이 일어날 수 있으므로 Commit에 올리지 않습니다. 또한, 계속 떠 있는 것이 불편하므로 Discard를 통해 롤백을 시켜 Unstaged창에 안 뜨도록 할 수 있습니다.
</aside>

참고영상
5. git 작업 흐름(중요)
5.1. 컴퓨터에 앉기
일단 앉자!
5.2. Fork 켜서 pull 받기
<aside> 💡
본격적인 작업 들어가기 전, 내 파일을 최신 버전 프로젝트 파일로 만들기 위함입니다.
</aside>
5.3. 열심히 작업하기
<aside> 💡
중간중간 커밋해줘도 좋습니다. 오히려 많이 할 수록 되돌아갈 수 있는 시간대가 늘어나는 것이니 자주자주 해주면 좋습니다.
</aside>
5.4. Local Changes → Unstaged 창에서 작업한 파일 Stage하기
<aside> 💡
꼭 자신이 작업한 파일만 골라 업로드해주세요. 건드리지 않은 파일까지 묶어 Commit하면 다른 사람이 충돌이 일어날 가능성이 높습니다. Commit할 때 작업하지 않은 파일들은 Unstage 창에서 선택하여 우클릭→discard(단축키 delete)하여 본래 파일로 롤백해주세요.
</aside>
5.5. Commit하기
<aside> 💡
Commit을 할 때에도 한꺼번에 모든 작업 내역을 올리지 않고 특정 작업 파트끼리 묶어서 Commit한다면, 추후 Revert를 통하여 롤백하기에도 편하니 귀찮지 않다면 잘게 잘라서 업로드해봅시다.
</aside>
5.6. push 하기
<aside> 💡
가장 Error가 발생할 확률이 높은 구간입니다. 아래 Error 해결 가이드를 참고하여 직접 해결하거나, 다른 사람의 도움을 받으세요.
</aside>
6. git submodule(아바타 보안 접근)
후추….
이…일단 서버 관리자가 아니면 작업자 입장에서 추가로 하실 건 없으십니다..
7. git 협업 Tip
제에발 커밋하세요 어떻게든 살려드립니다..
작업 시작 전 Pull 땡기고 시작하자
<aside> 💡
이전까지의 모든 작업 사항을 업데이트하고, 제일 최신 버전에서 작업을 시작해야 추후 충돌 참사를 피할 수 있습니다!
</aside>
Local Changes의 unstaged 창은 최대한 비우자
<aside> 💡
Unstaged 창에 파일이 존재하는 순간, 남들과는 다른 화면을 보고 있다는 뜻입니다. 작업하지 않는 파일은 주기적으로 Discard를 통해 롤백해주세요.
</aside>
그때그때 commit 하자
<aside> 💡
Commit을 할 수록 되돌아갈 수 있는 세이브포인트가 늘어납니다. Commit을 할 때에도 한꺼번에 모든 작업 내역을 올리지 않고 특정 작업 파트끼리 묶어서 업로드한다면, 추후 Revert를 통하여 롤백하기에도 편하니 잘개 잘라서 업로드도 해봅시다.
</aside>
충돌을 두려워하지 말자
<aside> 💡
자신의 작업물이 Commit만 되어있다면 어떻게든 살릴 수 있습니다. 충돌을 완벽히 대응할 수 없더라도, 도움의 손길을 통해 문제를 해결할 수 있으니 주변에 도움을 요청하세요.
</aside>
같은 Scene은 동시에 작업하지 말자
<aside> 💡
두 명이 같은 Scene의 완벽히 다른 Object를 만지면 Git에서 Merge를 시켜줄 수 있지만, 어지간하면 그런 일은 발생하지 않으니 같은 Scene은 동시에 만지지 맙시다.
</aside>
Commit은 이기적으로, 최대한 빨리 push하자
<aside> 💡
충돌나면 일반적으로 원격 리포(서버)의 데이터를 살리려 합니다. 내 작업물을 충돌로부터 보호하고 싶다면 일단 서버에 업로드하여 권리를 주장하세요.
</aside>
8. 여러 Error 해결 방법
후추…