Bagaimana cara menggunakan Git untuk kontrol sumber Unity3D?

499

Apa praktik terbaik untuk menggunakan kontrol sumber Git dengan Unity 3D, khususnya dalam berurusan dengan sifat biner proyek Unity 3D? Tolong jelaskan alur kerja, jalur apa yang akan disertakan dalam .gitignore, pengaturan apa yang harus ditetapkan dalam Unity dan / atau proyek, dan hal-hal khusus lainnya yang harus dicatat.

Catatan: Saya menyadari bahwa menggunakan Asset Server adalah cara yang disarankan oleh Unity, tetapi saya ingin menggunakan Git karena berbagai alasan. Tolong tidak ada jawaban yang menyatakan atau berpendapat bahwa saya harus menggunakan Server Aset. Asset Server sebenarnya bukan pilihan bagi saya.

Menekan Selalu
sumber
3
"just use svn" tanpa memperdulikan argumen git V svn yang sia-sia, git tidak untuk file biner besar. proyek unity adalah film (dan berbagai file biner yang sangat besar - tekstur dll), dengan beberapa baris kode. apakah Anda akan menggunakan git untuk menyimpan koleksi film Anda? svn setidaknya masuk akal.
Fattie
1
Solusi paling sederhana adalah dengan mengecualikan semua folder biner dengan gitignore, dan hanya menggunakan git untuk file kode aktual Anda, dan mungkin file aset Anda. Semua binari tidak perlu dimasukkan karena setiap anggota tim dapat menyusunnya sendiri?
Kokodoko
@Kokodoko Artis tidak dapat mengkompilasi executable mereka sendiri.
Crashworks
Bahkan jika itu benar, mereka masih dapat mendorong aset gambar baru ke git ... sehingga para devs dapat dikompilasi dengan karya seni baru ...
Kokodoko
@Kokodoko Itu berarti bahwa seorang seniman perlu menunggu dev untuk melihat komit dan membuat build untuk melihat perubahan mereka dalam game. Itu adalah waktu iterasi yang sangat lama.
Crashworks

Jawaban:

522

Berikut ini adalah kutipan dari blog pribadi saya .

Menggunakan Git dengan Game 3D

Pembaruan Oktober 2015: GitHub telah merilis plugin untuk Git bernama Git LFS yang secara langsung menangani masalah di bawah ini. Anda sekarang dapat dengan mudah dan efisien meng versi file biner besar!

Git dapat bekerja dengan baik dengan game 3D di luar kotak. Namun peringatan utama di sini adalah bahwa versi file media besar (> 5 MB) bisa menjadi masalah dalam jangka panjang karena sejarah komit Anda membengkak. Kami telah memecahkan masalah potensial ini dalam proyek kami dengan hanya mengversi aset biner saat dianggap final. Artis 3D kami menggunakan Dropbox untuk mengerjakan aset WIP, baik karena alasan di atas maupun karena jauh lebih cepat dan sederhana (tidak banyak artis yang secara aktif ingin menggunakan Git!).

Alur Kerja Git

Alur kerja Git Anda adalah sesuatu yang perlu Anda putuskan sendiri karena pengalaman Anda sendiri sebagai sebuah tim dan bagaimana Anda bekerja bersama. Namun. Saya akan sangat menyarankan metodologi yang tepat bernama Git Flow seperti yang dijelaskan oleh penulis asli di sini .

Saya tidak akan membahas terlalu mendalam tentang bagaimana metodologi ini bekerja sebagaimana penulis menggambarkannya dengan sempurna dan dalam beberapa kata juga sehingga mudah untuk dilalui. Saya telah menggunakan dengan tim saya untuk sementara waktu sekarang, dan ini adalah alur kerja terbaik yang kami coba sejauh ini.

Aplikasi Klien Git GUI

Ini benar-benar pilihan pribadi di sini karena ada beberapa opsi dalam hal Git GUI atau apakah akan menggunakan GUI sama sekali. Tapi saya ingin menyarankan aplikasi SourceTree gratis karena terhubung dengan ekstensi Git Flow. Baca tutorial SourceTree di sini tentang penerapan metodologi Git Flow dalam aplikasi mereka.

Unity3D Abaikan Folder

Untuk checkout versi terbaru, Github memelihara file Unity.gitignore tanpa spesifikasi OS.

# =============== #
# 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

Pengaturan Unity3D

Untuk versi Unity 3D v4.3 dan lebih tinggi:

  1. (Lewati langkah ini di v4.5 dan lebih tinggi) Aktifkan Externalopsi dalam Unity → Preferences → Packages → Repository.
  2. Buka Editmenu dan pilih Project Settings → Editor:
    1. Beralih Version Control Modeke Visible Meta Files.
    2. Beralih Asset Serialization Modeke Force Text.
  3. Simpan adegan dan proyeksikan dari Filemenu.

Ingin Anda memigrasi repo yang ada ke LFS?

Lihat posting blog saya untuk langkah-langkah bagaimana melakukannya di sini .

Konfigurasi Tambahan

Salah satu dari beberapa gangguan utama yang dialami seseorang ketika menggunakan proyek Git dengan Unity3D adalah bahwa Git tidak peduli dengan direktori dan akan dengan senang hati meninggalkan direktori kosong setelah menghapus file dari mereka. Unity3D akan membuat file * .meta untuk direktori ini dan dapat menyebabkan sedikit pertempuran di antara anggota tim ketika Git terus menambahkan dan menghapus file meta ini.

Tambahkan kait pasca-gabungan Git ini ke /.git/hooks/folder untuk repositori dengan proyek Unity3D di dalamnya. Setelah Git menarik / menggabungkan, ia akan melihat file apa yang telah dihapus, periksa apakah direktori yang ada di dalamnya kosong, dan jika demikian hapuslah.

S.Richmond
sumber
2
Menyebutkan tentang alur kerja git itu bagus, tapi mungkin saya harus menjelaskan dalam pertanyaan saya, saya bertanya tentang alur kerja khususnya khusus untuk 3D kesatuan. Seperti yang Anda ketahui, proyek kesatuan sangat bergantung pada file biner. Apakah ada pertimbangan khusus untuk menghadapinya? Beberapa rekomendasi yang saya temukan ketika meneliti topik ini adalah menggunakan alur kerja yang menghindari penggabungan sebanyak mungkin. Mungkin Anda tidak berbagi dalam sentimen ini, tetapi pertanyaan saya lebih spesifik terhadap masalah spesifik unity3d daripada preferensi alur kerja umum.
PressingOnAlways
3
Kami menggunakan git-lampiran untuk mengelola konten biner besar kami. Dukungan Windows tidak luar biasa tetapi semakin baik. Ini hanya membantu jika Anda tidak peduli tentang pelacakan revs dalam file biner besar.
Jerdak
2
Pembaruan untuk ini - kami mencoba pengaturan Anda dan itu bekerja cukup baik, tetapi kami ingin aset kami secara otomatis disinkronkan. Kami sekarang menggunakan sugarsync untuk secara selektif menyinkronkan folder aset biner. Dropbox hanya akan menyinkronkan folder dropbox, tetapi dengan sinkronisasi gula, Anda dapat secara sewenang-wenang menyinkronkan folder di mana saja di hard drive yang sangat berguna. Kami harus mengubah struktur direktori Aset kami sedikit untuk mendefinisikan satu subfolder untuk file biner besar ini, tetapi sejauh ini ia telah bekerja dengan sangat baik. Kami hanya .gitignore folder itu dan memungkinkan sinkronisasi gula untuk menyimpannya dalam sinkronisasi.
PressingOnAlways
2
Mengapa harus memilih Hidden Meta Files?
Slipp D. Thompson
2
Memperbaiki kesalahan ketik copy n paste saya - Ya itu harus File Meta Terlihat.
S.Richmond
60

Di Unity 4.3 Anda juga harus mengaktifkan opsi Eksternal dari preferensi, tetapi karena Unity 4.5 mereka menjatuhkan pilihan untuk itu, sehingga proses pengaturan penuh terlihat seperti:

  1. Beralih ke Visible Meta FilesdalamEditor → Project Settings → Editor → Version Control Mode
  2. Beralih ke Force TextdalamEditor → Project Settings → Editor → Asset Serialization Mode
  3. Simpan adegan dan proyek dari Filemenu

Tim kami juga menggunakan .gitignorefile yang lebih panjang :

# =============== #
# 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

Perhatikan bahwa satu-satunya folder yang perlu Anda jaga di bawah kendali sumber adalah Assetsdan ProjectSettings.

Informasi lebih lanjut tentang menjaga Proyek Persatuan di bawah kendali sumber dapat Anda temukan di posting ini .

zasadnyy
sumber
Mungkin lebih baik jika Anda mengedit jawaban saya di atas untuk memasukkan opsi-opsi baru ini. :)
S.Richmond
6
Mengapa harus memilih Hidden Meta Files?
Slipp D. Thompson
Poin satu jelas salah. Tidak ada Persatuan → Preferensi → Paket → Repositori
Agostino
1
menurut docs.unity3d.com/Manual/… itu harus Visible Meta Files
Markus
1
Bekerja dengan baik untuk tim saya. Terima kasih banyak.
eifersucht
34

Apa itu GIT?

Git adalah sistem kontrol versi terdistribusi gratis dan open source (SCM) yang dikembangkan oleh Linus Torvalds pada 2005 (pendiri OS Linux). Ini dibuat untuk mengontrol segala sesuatu dari proyek kecil hingga besar dengan kecepatan dan efisiensi. Perusahaan terkemuka seperti Google, Facebook, Microsoft menggunakan GIT setiap hari.

Jika Anda ingin mempelajari lebih lanjut tentang GIT, periksa tutorial Cepat ini ,

Pertama-tama pastikan Anda telah menyiapkan lingkungan Git Anda. Anda perlu mengatur lingkungan lokal Anda dan repositori Git (Saya lebih suka Github.com).

Aplikasi klien GIT Mac / Windows

Untuk aplikasi klien GIT gui saya merekomendasikan Anda untuk pergi dengan Github.com,

GitHub adalah tempat untuk berbagi kode dengan teman, rekan kerja, teman sekelas, dan orang asing. Lebih dari lima juta orang menggunakan GitHub untuk membangun hal-hal luar biasa bersama.

Pengaturan Unity3d

Anda perlu melakukan pengaturan ini

Beralih ke File Meta Terlihat di Edit → Pengaturan Proyek → Editor → Mode Kontrol Versi.

masukkan deskripsi gambar di sini

Aktifkan opsi Eksternal di Persatuan → Preferensi → Paket → Repositori

masukkan deskripsi gambar di sini

Beralih ke Memaksa Teks dalam Edit → Pengaturan Proyek → Editor → Mode Serialisasi Aset.

masukkan deskripsi gambar di sini

Sumber: Menggunakan Git Dengan Kontrol Sumber Game 3D Games

NabeelSaleem
sumber
6
+1 Jawaban ini sudah dituliskan di atas tetapi jawaban @NabeelSaleem membantu saya dengan gambar yang dia berikan dan menghapus panduan :) terima kasih
sore
3
Saya tidak dapat menemukan Preferences > Packagesdi Unity 5.x Normal? ty
Yves Lange
5
@NabeelSaleem ya. Sebenarnya langkah ini di Unity 5.x tidak perlu. ty
Yves Lange
22

Untuk menambah semua yang dinyatakan, juga ideal untuk menggunakan git lfs dengan Unity. Saya telah menggunakan ini sejak keluar dan saya tidak punya masalah dengan itu.

Anda akan ingin menambahkan ini di .gitattributessebelah .gitignorefile Anda

*.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

Itu adalah daftar file bergulir saya. Jika Anda menggunakan file biner tambahan yang tidak terdaftar, tambahkan mereka.

Saya juga memiliki file yang dikonfigurasi untuk menggunakan yamlmerge, Anda perlu mengatur ini. Anda dapat membacanya di sini: http://docs.unity3d.com/Manual/SmartMerge.html

rygo6
sumber
11

Kami sekarang memiliki integrasi tanpa batas ke kesatuan dengan ekstensi Github ke Persatuan ... https://unity.github.com/

Ekstensi GitHub untuk Unity yang baru membawa alur kerja GitHub dan lebih banyak lagi ke Unity, memberikan dukungan untuk file besar dengan Git LFS dan penguncian file.

Pada saat penulisan proyek ini dalam alfa, tetapi masih dapat digunakan untuk proyek pribadi.

Bhupen
sumber
Apakah kamu mencoba ini?
Nabeel K
11

Saya pikir saya mungkin memposting yang lebih sederhana .gitignoreuntuk siapa saja yang tertarik:

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings
Lepaskan Rumput Saya
sumber
7
Sekali lagi, semua jawaban ini sudah ketinggalan zaman di halaman ini. jika karena alasan tertentu Anda harus menggunakan git dengan Unity, github.com/github/gitignore/blob/master/Unity.gitignore
Fattie
Kecil, sederhana, dan sepenuhnya kompatibel dengan semua versi: Saya menemukan skrip ini bekerja paling baik, bahkan untuk Unity 2017 dan 2018 yang baru saja mengubah struktur proyek mereka ( UnityPackageManager/dan Packages/).
Isaak Eriksson
8

Hal-hal utama yang perlu diingat ketika menggunakan git untuk kontrol versi kode sumber unity-3d:

(A) JANGAN check-in di folder Library . Saya telah membuat kesalahan ini beberapa kali di masa lalu dan telah menderita karenanya! Hapus ATAU pindah folder folder sebelum menambahkan proyek / file Anda ke git.

(B) Gunakan "File Meta Terlihat" - untuk versi kesatuan terbaru - 5.3.4 dan di atas ini terjadi secara default. Untuk beberapa versi sebelumnya, Anda perlu mengubah pengaturan di bawah: Edit-> Pengaturan Proyek-> Kontrol Versi

(C) Gunakan file .gitignore untuk Unity- untuk memastikan kewarasan tetap terjaga dan file tidak perlu ditambahkan - jika di android / tizen - tambahkan aturan untuk mengecualikan file APK dan TPK agar tidak ditambahkan ke repositori. Google berkeliling untuk file .gitignore untuk persatuan ATAU menggunakan model ini .gitignore untuk Persatuan yang disediakan oleh GitHub: https://github.com/github/gitignore/blob/master/Unity.gitignore

(D) Pastikan file .gitignore ditambahkan ke repositori sebagai file pertama yang ditambahkan - karena sebelumnya saya secara pribadi telah melewatkan menambahkan file .gitignore. Punya banyak pemikiran di belakang tentang mengapa ini terjadi- tetapi saat ini saya hanya menyalin dan menambahkan file .gitignore sebagai langkah pertama pengaturan repositori.

Jadi ... untuk membuat proyek Persatuan siap untuk git, lakukan hal berikut:

(1) Buka folder proyek

(2) Ketikkan git init.

(3) Salin file .gitignore: Di MacOS: cp ~ / Downloads / .gitignore Di Windows: salin c: \ Users [nama pengguna] \ Downloads.gitignore.

(4) git tambahkan .gitignore

(5) git add *

Semoga ini bisa membantu ... semua yang terbaik!

Naligator
sumber
6

Edit -> Project Settings -> Editor

Setel Kontrol Versi ke file meta. Atur Serialisasi Aset untuk memaksa teks.

Saya pikir ini yang Anda inginkan.

afpro
sumber
1
Dan kemudian bagaimana Anda mengatur penggabungan YAML?
shinzou
6

Anda bisa menggunakan Github for Unity , sebuah Unity Extension yang membawa alur kerja git ke UI Unity.

Github for Unity baru saja merilis versi 1.0 dari ekstensi.

Kyle B
sumber
5

Hanya Aset dan Pengaturan Proyek folder perlu berada di bawah kendali versi git.

Anda dapat membuat gitignore seperti ini.

[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/
EllisonLee
sumber
3

Unity juga Menyediakan kontrol versi Sumbernya sendiri. sebelum unity5 itu unityAsset Server tapi sekarang sudah didepresiasi. dan meluncurkan sistem kontrol SVN baru yang disebut unity kolaborasi. tetapi masalah utama menggunakan unity dan setiap SVN melakukan dan menggabungkan adegan. tetapi Non svn memberi kita cara untuk menyelesaikan konflik semacam ini atau menggabungkan adegan. jadi tergantung pada Anda yang SVN Anda kenal. Saya menggunakan alat SmartSVN di Mac. dan kura-kura di jendela.

masukkan deskripsi gambar di sini

Shahbaz Ali
sumber
1

Hanya menambahkan pada subjet dari Gitignore. Cara yang disarankan hanya mengabaikan Library dan Temp, jika itu adalah akar dari proyek git Anda. jika Anda seperti saya dan kadang-kadang membutuhkan proyek persatuan untuk menjadi bagian dari repo, bukan keseluruhan repo, string yang benar di gitignore adalah:

**/[Tt]emp
**/[Ll]ibrary
**/[Bb]uild
zambari
sumber
0

Saya ingin menambahkan alur kerja yang sangat sederhana dari seseorang yang telah frustrasi dengan git di masa lalu. Ada beberapa cara untuk menggunakan git, mungkin yang paling umum untuk unity adalah GitHub Desktop, Git Bash dan GitHub Unity

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

Intinya mereka semua melakukan hal yang sama tetapi pilihan penggunanya. Anda dapat memiliki git untuk pengaturan file besar yang memungkinkan penyimpanan file besar gratis 1GB dengan penyimpanan tambahan yang tersedia dalam paket data sebesar $ 4 / bln untuk 50GB, dan ini memungkinkan Anda untuk mendorong file> 100mb ke repositori jarak jauh (ini menyimpan file aktual pada sebuah server dan dalam repo Anda sebuah pointer)

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

Jika Anda tidak ingin mengatur lfs untuk alasan apa pun Anda dapat memindai proyek Anda untuk file> 128 mb di windows dengan mengetikkan ukuran: besar di direktori tempat Anda memiliki proyek Anda. Ini bisa berguna untuk mencari file besar, meskipun mungkin ada beberapa file antara 100mb dan 128mb yang terlewat.

masukkan deskripsi gambar di sini

Format umum dari git bash adalah

git add. (menambahkan file yang akan dikomit)

git commit -m 'message' (melakukan file dengan pesan, mereka masih ada di komputer Anda dan tidak di repo jarak jauh, pada dasarnya mereka telah 'diversi' sebagai komit baru)

git push (dorong file ke repositori)

Kerugian dari git bash untuk proyek-proyek kesatuan adalah bahwa jika ada file> 100mb, Anda tidak akan mendapatkan kesalahan sampai Anda mendorong. Anda kemudian harus membatalkan komit Anda dengan mengatur ulang kepala Anda ke komit sebelumnya. Agak merepotkan, terutama jika Anda baru menggunakan git bash.

Keuntungan dari GitHub Desktop, adalah SEBELUM Anda melakukan file dengan 100mb itu akan memberi Anda pesan kesalahan popup. Anda kemudian dapat mengecilkan file-file itu atau menambahkannya ke file .gitignore.

Untuk menggunakan file .gitignore, buat file bernama .gitignore di direktori root repositori lokal Anda. Cukup tambahkan file satu baris pada satu waktu yang ingin Anda hilangkan. SharedAssets dan file folder non-Aset lainnya biasanya dapat dihilangkan dan secara otomatis akan terisi kembali di editor (paket dapat diimpor kembali dll). Anda juga dapat menggunakan wildcard untuk mengecualikan jenis file.

Jika orang lain menggunakan repo GitHub Anda dan Anda ingin mengkloning atau menarik, Anda juga memiliki opsi-opsi itu di desktop GitHub atau Git bash.

Saya tidak menyebutkan banyak tentang paket Unity GitHub di mana Anda dapat menggunakan GitHub di editor karena secara pribadi saya tidak menemukan antarmuka yang sangat berguna, dan saya tidak berpikir secara keseluruhan itu akan membantu orang mengenal git, tapi ini hanya saya Pilihan.

vasmos
sumber