Unity3D 소스 제어에 Git을 사용하는 방법은 무엇입니까?


499

특히 Unity 3D 프로젝트의 이진 특성을 처리 할 때 Unity 3D에서 Git 소스 제어 를 사용하는 모범 사례는 무엇입니까 ? 워크 플로우, .gitignore에 포함될 경로, Unity 및 / 또는 프로젝트에서 설정해야 할 설정 및 기타 주목할 사항을 설명하십시오.

참고 : Asset Server를 사용하는 것이 Unity 권장 방법이라는 것을 알고 있지만 여러 가지 이유로 Git을 사용하고 싶습니다. 그 답을 말하거나 애셋 서버를 사용해야한다고 주장하지 마십시오. 에셋 서버는 실제로 옵션이 아닙니다.


3
무의미한 자식 V svn 인수에 관계없이 "그냥 svn을 사용하십시오", git은 단지 큰 이진 파일을위한 것이 아닙니다. 통일 프로젝트는 몇 줄의 코드로 영화 (및 다양한 이진 파일-텍스처 등)입니다. git을 사용하여 영화 컬렉션을 저장 하시겠습니까? svn은 적어도 합리적입니다.
Fattie

1
가장 간단한 해결책은 gitignore를 사용하여 모든 이진 폴더를 단순히 제외하고 실제 코드 파일 및 아마도 자산 파일에만 git을 사용하는 것입니다. 모든 팀원이 직접 컴파일 할 수 있기 때문에 모든 바이너리를 포함시킬 필요는 없습니까?
Kokodoko

@Kokodoko 아티스트는 자신의 실행 파일을 컴파일 할 수 없습니다.
Crashworks

그것이 사실
이더라도

@Kokodoko 즉, 아티스트가 개발자가 커밋을보고 게임 내 변경 사항을 확인하기 위해 빌드를 기다려야한다는 것을 의미합니다. 매우 긴 반복 시간입니다.
Crashworks

답변:


522

다음은 내 개인 블로그 에서 발췌 한 것입니다 .

3D 게임에서 Git 사용

2015 년 10 월 업데이트 : GitHub는 Git LFS 라는 플러그인을 출시 하여 아래 문제를 직접 처리합니다. 이제 큰 이진 파일을 쉽고 효율적으로 버전화할 수 있습니다!

Git은 3D 게임에서 즉시 사용할 수 있습니다. 그러나 여기서주의 할 점은 커밋 히스토리가 팽창함에 따라 대용량 (> 5MB) 미디어 파일의 버전을 관리하는 것이 장기적으로 문제가 될 수 있다는 것입니다. 바이너리 자산이 최종 버전으로 간주 될 때만 버전을 지정하여 프로젝트에서이 잠재적 문제를 해결했습니다. 우리의 3D 아티스트는 Dropbox 를 사용 하여 위의 이유로 그리고 훨씬 더 빠르고 간단 하기 때문에 WIP 자산 작업을합니다 (많은 아티스트가 적극적으로 Git을 사용하고 싶지는 않습니다!).

힘내 워크 플로우

Git 워크 플로는 팀으로서 자신의 경험과 함께 작업하는 방식을 고려하여 스스로 결정해야 할 부분입니다. 하나. 나는 원저자에 의해 묘사 된 적절한 이름의 Git Flow 방법론 강력히 추천한다 .

저자가 완벽하고 아주 짧은 단어로 설명하기 때문에 방법론이 어떻게 작동하는지에 대해서는 여기서 깊이 다루지 않겠습니다. 나는 팀과 함께 잠시 동안 사용해 왔으며 지금까지 시도한 최고의 워크 플로입니다.

Git GUI 클라이언트 애플리케이션

Git GUI 또는 GUI 사용 여부와 관련하여 몇 가지 옵션이 있기 때문에 이것은 실제로 개인적인 취향입니다. 그러나 Git Flow 확장 프로그램과 완벽하게 연결 되는 무료 SourceTree 응용 프로그램 을 제안하고 싶습니다 . 애플리케이션에서 Git Flow 방법론을 구현하는 방법에 대한 SourceTree 학습서를 읽으십시오 .

Unity3D는 폴더를 무시합니다

최신 버전 체크 아웃을 위해 Github는 OS 별 사양없이 Unity.gitignore 파일유지 관리했습니다 .

# =============== #
# Unity generated #
# =============== #
Temp/
Library/

# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj

# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

Unity3D 설정

Unity 3D v4.3 이상의 버전 :

  1. (v4.5 이상에서이 단계 건너 뛰기)의 External옵션을 활성화하십시오 Unity → Preferences → Packages → Repository.
  2. Edit메뉴를 열고 다음 을 선택하십시오 Project Settings → Editor.
    1. 로 전환 Version Control Mode하십시오 Visible Meta Files.
    2. 로 전환 Asset Serialization Mode하십시오 Force Text.
  3. File메뉴 에서 장면과 프로젝트를 저장하십시오 .

기존 리포지토리를 LFS로 마이그레이션 하시겠습니까?

블로그 게시물을 확인하는 방법은 여기를 참조하십시오 .

추가 구성

Unity3D 프로젝트에서 Git을 사용할 때의 몇 가지 주요 성가심 중 하나는 Git이 디렉토리를 신경 쓰지 않고 파일을 제거한 후 빈 디렉토리를 남겨 두는 것입니다. Unity3D는 이러한 디렉토리에 * .meta 파일을 만들며 Git이 메타 파일을 계속 추가하고 제거 할 때 팀 구성원간에 약간의 전투를 일으킬 수 있습니다.

이 Git 포스트 병합 후크/.git/hooks/Unity3D 프로젝트가있는 리포지토리 의 폴더에 추가합니다. Git pull / merge 후에는 어떤 파일이 제거되었는지 확인하고 존재하는 디렉토리가 비어 있는지 확인한 다음 삭제하십시오.


2
git workflow에 대해 언급하는 것은 좋지만 아마도 unity 3D와 관련된 워크 플로우에 대해 질문하고 싶습니다. 아시다시피, unity 프로젝트는 바이너리 파일에 크게 의존합니다. 이를 처리하기 위해 특별히 고려해야 할 사항이 있습니까? 이 주제를 조사 할 때 내가 찾은 몇 가지 권장 사항은 가능한 한 병합을 피하는 워크 플로를 사용하는 것이 었습니다. 어쩌면 당신은이 감정에 대해 공유하지 않지만 내 질문은 일반적인 워크 플로우 환경 설정보다 unity3d 특정 문제에 대해 더 구체적입니다.
PressingOnAlways

3
우리는 git-annex 를 사용하여 큰 바이너리 콘텐츠를 관리합니다. Windows 지원은 대단 하지 않지만 점점 나아지고 있습니다. 큰 이진 파일에서 rev를 추적하지 않아도되는 경우에만 유용합니다.
Jerdak

2
이것에 대한 업데이트-설정을 시도했지만 제대로 작동했지만 자산이 자동으로 동기화되기를 원했습니다. 이제 sugarsync를 사용하여 이진 자산 폴더를 선택적으로 동기화합니다. Dropbox는 dropbox 폴더 만 동기화하지만 sugar sync를 사용하면 하드 드라이브의 어느 곳에서나 폴더를 임의로 동기화 할 수있어 매우 유용합니다. 이 큰 바이너리 파일에 대해 하나의 하위 폴더를 정의하기 위해 Assets 디렉토리 구조를 약간 변경해야했지만 지금까지는 잘 작동했습니다. 우리는 그 폴더를 .gitignore하고 설탕 동기화가 동기화되도록 유지합니다.
PressingOnAlways

2
왜 선택해야 Hidden Meta Files할까요?
Slipp D. Thompson

2
내 사본 n 붙여 넣기 오타가 수정되었습니다. 예, 표시 가능한 메타 파일이어야합니다.
S.Richmond

60

Unity 4.3에서는 환경 설정에서 외부 옵션을 활성화해야했지만 Unity 4.5 이후에는 옵션을 삭제 했으므로 전체 설정 프로세스는 다음과 같습니다.

  1. 전환 Visible Meta FilesEditor → Project Settings → Editor → Version Control Mode
  2. 전환 Force TextEditor → Project Settings → Editor → Asset Serialization Mode
  3. File메뉴 에서 장면 및 프로젝트 저장

또한 우리 팀은 좀 더 확장 된 .gitignore파일을 사용하고 있습니다 :

# =============== #
# Unity generated #
# =============== #
Temp/
Library/

# ===================================== #
# Visual Studio / MonoDevelop generated #
# ===================================== #
ExportedObj/
obj/
*.svd
*.userprefs
/*.csproj
*.pidb
*.suo
/*.sln
*.user
*.unityproj
*.booproj

# ============ #
# OS generated #
# ============ #
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

소스 제어하에 유지해야하는 유일한 폴더는 AssetsProjectSettings입니다.

Unity Project를 소스 제어하에 유지하는 방법에 대한 자세한 내용은 이 게시물 에서 찾을 수 있습니다 .


이 새로운 옵션을 포함하도록 맨 위의 답변을 편집하면 더 나을 수 있습니다. :)
S.Richmond

6
왜 선택해야 Hidden Meta Files할까요?
Slipp D. Thompson

포인트 1은 분명히 잘못되었습니다. 유니티 → 환경 설정 → 패키지 → 리포지토리가 없습니다
Agostino

1
docs.unity3d.com/Manual/… 에 따르면 보이는 메타 파일이어야합니다
Markus

1
우리 팀에 잘 작동합니다. 대단히 감사합니다.
eifersucht

34

GIT 란 무엇입니까?

Git은 Linus Torvalds가 2005 년에 개발 한 무료 오픈 소스 분산 버전 관리 시스템 (SCM)입니다 (Linux OS 설립자). 소규모에서 대규모 프로젝트까지 모든 것을 빠르고 효율적으로 제어하기 위해 만들어졌습니다. Google, Facebook, Microsoft와 같은 주요 회사는 매일 GIT를 사용합니다.

GIT에 대한 자세한 내용을 보려면이 빠른 자습서를 확인하십시오 .

우선 Git 환경을 설정해야합니다. 로컬 환경과 Git 리포지토리를 모두 설정해야합니다 (Github.com을 선호합니다).

GIT 클라이언트 애플리케이션 Mac / Windows

GIT GUI 클라이언트 응용 프로그램의 경우 Github.com을 사용하는 것이 좋습니다.

GitHub는 친구, 동료, 반 친구 및 완전한 낯선 사람과 코드를 공유 할 수있는 곳입니다. 5 백만 명이 넘는 사람들이 GitHub를 사용하여 놀라운 것을 함께 구축합니다.

Unity3d 설정

이 설정을 수행해야합니다

편집 → 프로젝트 설정 → 편집기 → 버전 제어 모드에서 보이는 메타 파일로 전환하십시오.

여기에 이미지 설명을 입력하십시오

Unity → 환경 설정 → 패키지 → 리포지토리에서 외부 옵션 활성화

여기에 이미지 설명을 입력하십시오

편집 → 프로젝트 설정 → 편집기 → 자산 직렬화 모드에서 강제 텍스트로 전환하십시오.

여기에 이미지 설명을 입력하십시오

출처 : 3D 게임에서 Git 사용하기 소스 제어


6
+1이 답변은 이미 작성되었지만 @NabeelSaleem의 답변은 그가 제공 한 이미지와 명확한 안내를 통해 도움이되었습니다. :) thanks
aflatoon

3
Preferences > PackagesUnity 5.x Normal에서 찾을 수 없습니까? ty
Yves Lange

5
@NabeelSaleem 예. 실제로 Unity 5.x의이 단계는 필요하지 않습니다. ty
Yves Lange

22

명시된 모든 것을 추가하려면 Unity와 함께 git lfs 를 사용하는 것이 이상적입니다 . 나는 그것이 나온 이후로 이것을 사용 해 왔으며 아무런 문제가 없었습니다.

파일 .gitattributes옆에 이것을 추가하고 싶을 것입니다.gitignore

*.cs diff=csharp text
*.cginc text
*.shader text

*.mat merge=unityyamlmerge eol=lf
*.anim merge=unityyamlmerge eol=lf
*.unity merge=unityyamlmerge eol=lf
*.prefab merge=unityyamlmerge eol=lf
*.physicsMaterial2D merge=unityyamlmerge eol=lf
*.physicsMaterial merge=unityyamlmerge eol=lf
*.asset merge=unityyamlmerge eol=lf
*.meta merge=unityyamlmerge eol=lf
*.controller merge=unityyamlmerge eol=lf

*.a filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.aif filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.exr filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.FBX filter=lfs diff=lfs merge=lfs -text
*.rns filter=lfs diff=lfs merge=lfs -text
*.reason filter=lfs diff=lfs merge=lfs -text
*.lxo filter=lfs diff=lfs merge=lfs -text

이것이 내 롤링 파일 목록입니다. 나열되지 않은 추가 이진 파일을 사용하는 경우 추가하십시오.

yamlmerge를 사용하도록 구성된 파일도 있습니다.이를 설정해야합니다. 여기에서 읽을 수 있습니다 : http://docs.unity3d.com/Manual/SmartMerge.html


11

우리는 이제 Github와 Unity 확장의 통합에 완벽하게 통합되었습니다 ... https://unity.github.com/

새로운 GitHub for Unity 확장 기능은 GitHub 워크 플로우 등을 Unity에 제공하여 Git LFS 및 파일 잠금 기능이있는 대용량 파일을 지원합니다.

글을 쓰는 시점에서 프로젝트는 알파이지만 개인 프로젝트에는 여전히 사용할 수 있습니다.


이것을 시도 했습니까?
Nabeel K

11

.gitignore관심있는 사람을 위해 더 간단하게 게시 할 수 있다고 생각했습니다 .

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings

7
이 모든 답변은이 페이지에서 최신 정보가 아닙니다. 어떤 이유로 Unity와 함께 git을 사용해야하는 경우 github.com/github/gitignore/blob/master/Unity.gitignore
Fattie

작고 단순하며 모든 버전과 완벽하게 호환됩니다.이 스크립트는 최근 프로젝트 구조 ( UnityPackageManager/Packages/)를 변경 한 Unity 2017 및 2018에서도 가장 잘 작동합니다 .
Isaak Eriksson 12

8

unity-3d 소스 코드 버전 제어를 위해 git을 사용할 때 기억해야 할 주요 사항 :

(A) 라이브러리 폴더를 체크인 하지 마십시오 . 나는 과거 에이 실수를 여러 번 해왔고 그것을 겪었습니다! 프로젝트 / 파일을 git에 추가하기 전에 라이브러리 폴더를 삭제하거나 옮기십시오.

(B) "Visible Meta Files"를 사용하십시오 -최신 유니티 버전-5.3.4 이상에서는 기본적으로 발생합니다. 일부 이전 버전의 경우 편집-> 프로젝트 설정-> 버전 제어에서 설정을 변경해야합니다.

(C) Unity에 .gitignore 파일을 사용하여 온전함을 유지하고 파일이 불필요하게 추가되지 않도록 합니다 (Android / tizen의 경우). APK 및 TPK 파일이 리포지토리에 추가되지 않도록하는 규칙을 추가합니다. 구글은 화합을 위해 .gitignore 파일을 찾거나 GitHub가 제공하는 Unity 용이 모델 .gitignore를 사용합니다 : https://github.com/github/gitignore/blob/master/Unity.gitignore

(D) .gitignore 파일이 첫 번째 파일 추가로 저장소에 추가되었는지 확인하십시오. 과거에는 개인적으로 .gitignore 파일 추가를 놓 쳤기 때문입니다. 왜 이런 일이 일어 났는지에 대해 많은 생각을 가지고 있지만 요즘에는 저장소를 설정하는 첫 단계로 .gitignore 파일을 복사하여 추가합니다.

따라서 ... git 프로젝트에 Unity 프로젝트를 준비하려면 다음을 수행하십시오.

(1) 프로젝트 폴더로 이동

(2) git init를 입력하십시오.

(3) .gitignore 파일을 복사하십시오. MacOS : cp ~ / Downloads / .gitignore Windows : c : \ Users [yourusername] \ Downloads.gitignore를 복사하십시오.

(4) git add .gitignore

(5) 자식 추가 *

이것이 도움이되기를 바랍니다.


6

Edit -> Project Settings -> Editor

버전 제어를 메타 파일로 설정하십시오. 텍스트를 강제 적용하려면 자산 직렬화를 설정하십시오.

나는 이것이 당신이 원하는 것이라고 생각합니다.


1
그런 다음 YAML 병합을 어떻게 설정합니까?
shinzou


6

당신은 사용할 수 있습니다 유니티에 대한 Github에서를 하는 유니티 확장 유니티의 UI에 자식 워크 플로우를 제공합니다.

Github for Unity 는 확장 버전 1.0을 출시했습니다.


5

AssetsProjectSettings 폴더 만 git 버전 제어하에 있어야합니다.

이런 식으로 gitignore를 만들 수 있습니다.

[Ll]ibrary/
[Tt]emp/
[Oo]bj/

# Autogenerated VS/MD solution and project files
*.csproj
*.unityproj
*.sln
*.suo
*.userprefs

# Mac
.DS_Store
*.swp
*.swo

Thumbs.db
Thumbs.db.meta

.vs/

3

Unity는 또한 자체 소스 버전 제어를 제공합니다. unity5 이전에는 unityAsset Server 였지만 이제는 감가 상각되었습니다. 그리고 unity collaborate.라는 새로운 SVN 제어 시스템을 시작하지만 unity와 모든 SVN을 사용하는 주요 문제는 장면을 커밋하고 병합하는 것입니다. 그러나 svn이 아닌 것은 이런 종류의 충돌을 해결하거나 장면을 병합하는 방법을 제공합니다. 어떤 SVN에 익숙한 지에 따라 달라집니다. Mac에서 SmartSVN 도구를 사용하고 있습니다. 그리고 창문에 거북이.

여기에 이미지 설명을 입력하십시오


1

Gitignore의 서브 젯을 추가하기 만하면됩니다. 권장되는 방법은 라이브러리 및 Temp가 git 프로젝트의 루트 인 경우에만 무시합니다. 당신이 나와 같고 때로는 repo의 일부가 아닌 repo의 일부가 되려면 단일 프로젝트가 필요하다면 gitignore의 올바른 문자열은 다음과 같습니다.

**/[Tt]emp
**/[Ll]ibrary
**/[Bb]uild

0

과거에 git에 좌절 한 사람의 매우 간단한 워크 플로우를 추가하고 싶었습니다. git을 사용하는 방법에는 여러 가지가 있습니다. 아마도 통일에 가장 일반적인 것은 GitHub Desktop, Git Bash 및 GitHub Unity입니다.

https://assetstore.unity.com/packages/tools/version-control/github-for-unity-118069 .

본질적으로 그들은 모두 똑같은 일을하지만 사용자 선택입니다. 50GB의 경우 $ 4 / mo의 데이터 팩으로 추가 스토리지를 사용할 수있는 1GB의 무료 대용량 파일 스토리지를 허용하는 대용량 파일 설정을 위해 git을 가질 수 있습니다. 서버 및 저장소에 포인터)

https://git-lfs.github.com/

어떤 이유로 든 lfs를 설정하지 않으려면 프로젝트가있는 디렉토리에 size : large를 입력하여 창에서 128MB보다 큰 파일을 프로젝트에서 스캔 할 수 있습니다. 100mb에서 128mb 사이에 누락 된 파일이있을 수 있지만 큰 파일을 검색하는 데 편리 할 수 ​​있습니다.

여기에 이미지 설명을 입력하십시오

git bash의 일반적인 형식은

git add. (커밋 할 파일을 추가합니다)

git commit -m 'message'(메시지와 함께 파일을 커밋하고 파일은 여전히 ​​원격 저장소가 아닌 PC에 있으며 기본적으로 새 커밋으로 '버전 화되었습니다')

git push (파일을 리포지토리에 푸시)

단일 프로젝트의 git bash의 단점은 100MB보다 큰 파일이 있으면 푸시 할 때까지 오류가 발생하지 않는다는 것입니다. 그런 다음 머리를 이전 커밋으로 재설정하여 커밋을 취소해야합니다. 특히 git bash를 처음 사용하는 경우 번거 롭습니다.

GitHub Desktop의 장점은 100MB로 파일을 커밋하기 전에 팝업 오류 메시지를 표시한다는 것입니다. 그런 다음 해당 파일을 축소하거나 .gitignore 파일에 추가 할 수 있습니다.

.gitignore 파일을 사용하려면 로컬 저장소 루트 디렉토리에 .gitignore라는 파일을 작성하십시오. 생략 할 파일을 한 번에 한 줄씩 추가하면됩니다. SharedAssets 및 기타 비 자산 폴더 파일은 일반적으로 생략 할 수 있으며 편집기에서 자동으로 다시 채워집니다 (패키지를 다시 가져올 수 있음 등). 와일드 카드를 사용하여 파일 형식을 제외 할 수도 있습니다.

다른 사람들이 GitHub 리포지토리를 사용하고 있고 복제하거나 가져 오려면 GitHub 데스크톱 또는 Git bash에서 해당 옵션을 사용할 수 있습니다.

개인적으로 인터페이스가 매우 유용하지 않기 때문에 에디터에서 GitHub를 사용할 수있는 Unity GitHub 패키지에 대해서는 언급하지 않았으며 전반적인 인터페이스가 누군가가 git에 익숙해 지도록 도울 것이라고 생각하지는 않지만 이것은 단지 내 것입니다. 우선권.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.