Como usar o Git for Unity3D control control?

499

Quais são as práticas recomendadas para usar o controle de origem Git com o Unity 3D, principalmente ao lidar com a natureza binária dos projetos do Unity 3D? Descreva o fluxo de trabalho, quais caminhos seriam incluídos no .gitignore, quais configurações devem ser definidas no Unity e / ou no projeto e quaisquer outras coisas especiais que devem ser observadas.

Nota: Eu sei que o uso do Asset Server é a maneira recomendada pela Unity, mas eu gostaria de usar o Git por vários motivos. Por favor, não responda esse estado ou defenda que eu deveria apenas usar o Asset Server. O servidor de ativos realmente não é uma opção para mim.

PressingOnAlways
fonte
3
"apenas use svn" independentemente dos argumentos inúteis do Git V svn, o git não é para arquivos binários grandes. Os projetos de unidade são filmes (e vários arquivos binários enormes - texturas etc.), com algumas linhas de código. você usaria o git para armazenar sua coleção de filmes? svn é pelo menos razoável.
Fattie
1
A solução mais simples é simplesmente excluir todas as pastas binárias com o gitignore e usar apenas o git para os arquivos de código reais e, talvez, os arquivos de ativos. Todos os binários não precisam ser incluídos, pois todos os membros da equipe podem compilá-los por si mesmos.
Kokodoko 19/11
Os artistas @Kokodoko não podem compilar seus próprios executáveis.
Crashworks
Mesmo se isso fosse verdade, eles ainda podem empurrar novos ativos de imagem para git ... para que os devs pode compilar com a nova arte ...
Kokodoko
@Kokodoko Isso significa que um artista precisaria esperar um desenvolvedor para ver o commit e fazer uma compilação para ver suas alterações no jogo. Esse é um tempo de iteração muito longo.
Crashworks

Respostas:

522

A seguir, um trecho do meu blog pessoal .

Usando o Git com jogos 3D

Atualização em outubro de 2015: o GitHub lançou um plug-in para o Git chamado Git LFS que lida diretamente com o problema abaixo. Agora você pode versão fácil e eficiente de arquivos binários grandes!

O Git pode funcionar bem com jogos 3D prontos para uso. No entanto, a principal ressalva aqui é que o controle de versão de arquivos de mídia grandes (> 5 MB) pode ser um problema a longo prazo, à medida que o histórico de confirmação aumenta. Resolvemos esse problema em potencial em nossos projetos, apenas com a versão do ativo binário quando ele é considerado final. Nossos artistas 3D usam o Dropbox para trabalhar com ativos WIP, pelo motivo acima e porque é muito mais rápido e mais simples (poucos artistas desejam ativamente usar o Git!).

Fluxo de trabalho Git

Seu fluxo de trabalho do Git é algo que você precisa decidir por si mesmo, considerando suas próprias experiências em equipe e como você trabalha em conjunto. Contudo. Eu recomendaria fortemente a metodologia Git Flow apropriadamente chamada, conforme descrito pelo autor original aqui .

Não vou me aprofundar muito aqui sobre como a metodologia funciona, conforme o autor a descreve perfeitamente e em poucas palavras também, para que seja fácil passar. Estou usando minha equipe há algum tempo e é o melhor fluxo de trabalho que tentamos até agora.

Aplicativo cliente Git GUI

Essa é realmente uma preferência pessoal aqui, pois existem algumas opções em termos de Git GUI ou se é necessário usar uma GUI. Mas eu gostaria de sugerir o aplicativo gratuito do SourceTree, pois ele se conecta perfeitamente à extensão Git Flow. Leia o tutorial SourceTree aqui sobre como implementar a metodologia Git Flow em sua aplicação.

Unity3D Ignore Folders

Para uma verificação de versão atualizada, o Github mantinha o arquivo Unity.gitignore sem detalhes específicos do sistema operacional.

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

Configurações do Unity3D

Para versões do Unity 3D v4.3 e superior:

  1. (Pule esta etapa na v4.5 e superior) Ative a Externalopção emUnity → Preferences → Packages → Repository .
  2. Abra o Editmenu e escolhaProject Settings → Editor :
    1. Mudar Version Control ModeparaVisible Meta Files .
    2. Mudar Asset Serialization ModeparaForce Text .
  3. Salve a cena e o projeto no Filemenu.

Deseja migrar seu repo existente para o LFS?

Confira minha postagem no blog para obter etapas sobre como fazê-lo aqui .

Configuração Adicional

Um dos poucos incômodos que se pode ter com o uso de projetos Git com Unity3D é que o Git não se preocupa com diretórios e fica feliz em deixar diretórios vazios depois de remover arquivos deles. O Unity3D criará arquivos * .meta para esses diretórios e poderá causar um pouco de batalha entre os membros da equipe quando o Git confirmar continuar adicionando e removendo esses metarquivos.

Adicione este gancho de pós-mesclagem do Git à /.git/hooks/pasta de repositórios com projetos do Unity3D. Após qualquer pull / mesclagem do Git, ele examinará quais arquivos foram removidos, verifique se o diretório em que existia está vazio e, em caso afirmativo, exclua-o.

S.Richmond
fonte
2
Mencionar sobre o fluxo de trabalho do git é bom, mas talvez eu deva esclarecer na minha pergunta que estou perguntando sobre fluxos de trabalho particularmente específicos da unidade 3D. Como você deve saber, os projetos de unidade dependem muito de arquivos binários. Existem considerações especiais para lidar com isso? Algumas recomendações que encontrei ao pesquisar este tópico foi usar um fluxo de trabalho que evitasse mesclagens o máximo possível. Talvez você não compartilhe esse sentimento, mas minha pergunta é mais específica em relação a questões específicas do unity3d, em vez de preferências gerais de fluxo de trabalho.
PressingOnAlways
3
Usamos um anexo git para gerenciar nosso grande conteúdo binário. O suporte ao Windows não é incrível, mas está melhorando. Isso só é útil se você não se importa com o rastreamento de rotações em arquivos binários grandes.
Jerdak
2
Uma atualização para isso - tentamos sua configuração e ela funcionou muito bem, mas queríamos que nossos ativos fossem sincronizados automaticamente. Agora usamos o sugarsync para sincronizar seletivamente a pasta de ativos binários. O Dropbox sincronizaria apenas a pasta da caixa de depósito, mas, com a sincronização do açúcar, você pode sincronizar pastas arbitrariamente em qualquer lugar do disco rígido, o que é extremamente útil. Tivemos que mudar um pouco a estrutura de diretórios do Assets para definir uma subpasta para esses arquivos binários grandes, mas até agora funcionou muito bem. Nós apenas ignoramos essa pasta e permitimos que a sincronização com o açúcar a mantenha sincronizada.
PressingOnAlways
2
Por que a escolha de ir com Hidden Meta Files?
precisa
2
Corrigido o erro de copiar e colar - Sim, devem ser arquivos meta visíveis.
S.Richmond
60

No Unity 4.3, você também tinha que habilitar a opção Externa nas preferências, mas desde o Unity 4.5 eles abandonaram a opção, o processo de instalação é parecido com:

  1. Mudar para Visible Meta FilesnoEditor → Project Settings → Editor → Version Control Mode
  2. Mudar para Force TextnoEditor → Project Settings → Editor → Asset Serialization Mode
  3. Salvar cena e projeto no Filemenu

Além disso, nossa equipe está usando um .gitignorearquivo um pouco mais extenso :

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

Observe que as únicas pastas que você precisa manter sob controle de origem são Assetse ProjectSettings.

Mais informações sobre como manter o Unity Project sob controle de origem, você pode encontrar neste post .

zasadnyy
fonte
Pode ser melhor se você editar minha resposta na parte superior para incluir essas novas opções. :)
S.Richmond
6
Por que a escolha de ir com Hidden Meta Files?
Slip D. Thompson
O ponto um está claramente errado. Não há Unity → Preferências → Pacotes → Repositório
Agostino
1
de acordo com docs.unity3d.com/Manual/… deve ser meta-arquivos visíveis #
Markus
1
Funciona bem para minha equipe. Muito obrigado.
Eifersucht 01/04
34

O que é GIT?

O Git é um sistema de controle de versão distribuído (SCM) gratuito e de código aberto desenvolvido por Linus Torvalds em 2005 (fundador do Linux OS). Ele é criado para controlar tudo de pequenos a grandes projetos com velocidade e eficiência. Empresas líderes como Google, Facebook, Microsoft usam GIT todos os dias.

Se você quiser saber mais sobre o GIT, consulte este tutorial rápido ,

Antes de tudo, verifique se o seu ambiente Git está configurado.Você precisa configurar o ambiente local e um repositório Git (eu prefiro o Github.com).

Aplicativo cliente GIT Mac / Windows

Para o aplicativo cliente GUI do GIT, eu recomendo que você vá com o Github.com,

O GitHub é o lugar para compartilhar código com amigos, colegas de trabalho, colegas de classe e completos estranhos. Mais de cinco milhões de pessoas usam o GitHub para criar coisas incríveis juntos.

Configurações do Unity3d

Você precisa fazer essas configurações

Alterne para Meta arquivos visíveis em Editar → Configurações do projeto → Editor → Modo de controle de versão.

insira a descrição da imagem aqui

Ative a opção Externa no Unity → Preferências → Pacotes → Repositório

insira a descrição da imagem aqui

Alterne para Forçar texto em Editar → Configurações do projeto → Editor → Modo de serialização de ativos.

insira a descrição da imagem aqui

Fonte: Usando Git com controle de fonte de jogos 3D

NabeelSaleem
fonte
6
+1 Essa resposta já está escrito acima, mas resposta @NabeelSaleem me ajudou com imagens que ele prestados e guia claro :) Obrigado
Aflatoon
3
Não consigo encontrar Preferences > Packagesno Unity 5.x Normal? ty
Yves Lange
5
@NabeelSaleem yes. Na verdade, esta etapa no Unity 5.x não é necessária. ty
Yves Lange
22

Para adicionar tudo o que foi dito, também é ideal usar git lfs com o Unity. Eu tenho usado isso desde que saiu e não tive problemas com isso.

Você quer adicionar isso .gitattributesao seu .gitignorearquivo

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

Essa é a minha lista de arquivos contínuos. Se você usar arquivos binários adicionais não listados, adicione-os.

Eu também tenho arquivos configurados para usar o yamlmerge, você precisaria configurá-lo. Você pode ler sobre isso aqui: http://docs.unity3d.com/Manual/SmartMerge.html

rygo6
fonte
11

Agora, temos uma integração perfeita à unidade com a extensão Github to Unity ... https://unity.github.com/

A nova extensão do GitHub for Unity traz o fluxo de trabalho do GitHub e muito mais para o Unity, fornecendo suporte para arquivos grandes com Git LFS e bloqueio de arquivos.

No momento da redação, o projeto está em alfa, mas ainda é utilizável para projetos pessoais.

Bhupen
fonte
você tentou isso?
Nabeel K
11

Eu pensei que eu poderia postar um mais simples .gitignorepara quem está interessado:

# Ignore Everything
/*

# Except for these:
!/.gitignore
!/Assets
!/Packages
!/ProjectSettings
Saia do meu gramado
fonte
7
Mais uma vez, todas essas respostas estão desatualizadas nesta página. se, por algum motivo, você precisar usar o git com o Unity, github.com/github/gitignore/blob/master/Unity.gitignore
Fattie
Pequeno, simples e totalmente compatível com todas as versões: acho que esse script funciona melhor, mesmo para o Unity 2017 e 2018 que mudou recentemente sua estrutura de projeto ( UnityPackageManager/e Packages/).
Isaak Eriksson
8

As principais coisas a serem lembradas ao usar o git para o controle de versão do código fonte do unity-3d:

(A) NÃO faça check-in na pasta Biblioteca . Eu cometi esse erro várias vezes no passado e sofri por isso! Exclua OU mova a pasta da biblioteca antes de adicionar seu projeto / arquivos ao git.

(B) Use "Meta arquivos visíveis" - para as versões mais recentes da unidade - 5.3.4 e acima, isso acontece por padrão. Para algumas das versões anteriores, é necessário alterar as configurações em: Editar-> Configurações do projeto-> Controle de versão

(C) Use um arquivo .gitignore para o Unity - para garantir que a sanidade seja mantida e os arquivos não sejam desnecessariamente adicionados - se no android / tizen - adicione regras para impedir que arquivos APK e TPK sejam adicionados ao repositório. Pesquise no Google por um arquivo .gitignore para a unidade OU use este modelo .gitignore for Unity fornecido pelo GitHub: https://github.com/github/gitignore/blob/master/Unity.gitignore

(D) Certifique-se de que o arquivo .gitignore seja adicionado ao repositório como o primeiro arquivo adicionado - porque no passado eu pessoalmente sentia falta de adicionar o arquivo .gitignore. Pense bem sobre o motivo disso acontecer, mas hoje em dia apenas copio e adiciono o arquivo .gitignore como primeira etapa da configuração do repositório.

Então ... para preparar um projeto do Unity para o git, faça o seguinte:

(1) Vá para a pasta do projeto

(2) Digite git init.

(3) Copie o arquivo .gitignore: No MacOS: cp ~ / Downloads / .gitignore No Windows: copie c: \ Users [yourusername] \ Downloads.gitignore.

(4) git add .gitignore

(5) git add *

Espero que isso ajude ... tudo de bom!

Naligator
fonte
6

Edit -> Project Settings -> Editor

Defina Controle de versão como metarquivos. Defina serialização de ativos para forçar o texto.

Eu acho que é isso que você quer.

afpro
fonte
1
E então, como você configura a mesclagem YAML?
shinzou 9/09/2017
6

Você pode usar o Github for Unity , uma extensão do Unity que traz o fluxo de trabalho do git para a interface do usuário do Unity.

O Github for Unity acaba de lançar a versão 1.0 da extensão.

Kyle B
fonte
5

Somente as pastas Assets e ProjectSettings precisam estar sob o controle de versão git.

Você pode fazer um gitignore como este.

[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
fonte
3

O Unity também fornece seu próprio controle de versão de origem. antes do unity5, era o unityAsset Server, mas agora é depreciado. e lance um novo sistema de controle SVN chamado unity Collaborate. mas Non of svn nos permite resolver esse tipo de conflito ou mesclar cena. portanto, dependa de você com qual SVN você está familiarizado. Estou usando a ferramenta SmartSVN no Mac. e tartaruga nas janelas.

insira a descrição da imagem aqui

Shahbaz Ali
fonte
1

Apenas adicionando o assunto do Gitignore. A maneira recomendada ignora apenas Library e Temp, se estiver na raiz do seu projeto git. se você é como eu e às vezes precisa do projeto de unidade para fazer parte do repositório, não todo o repositório, as strings corretas no gitignore seriam:

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

Eu queria adicionar um fluxo de trabalho muito simples de alguém que estava frustrado com o git no passado. Existem várias maneiras de usar o git, provavelmente as mais comuns para a unidade são GitHub Desktop, Git Bash e GitHub Unity

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

Essencialmente, todos eles fazem a mesma coisa, exceto a escolha do usuário. Você pode ter o git para configuração de arquivos grandes, que permite armazenamento gratuito de arquivos grandes de 1 GB, com armazenamento adicional disponível em pacotes de dados por US $ 4 / mês por 50 GB, e isso permitirá enviar arquivos> 100mb para repositórios remotos (ele armazena os arquivos reais em um servidor e no seu repositório um ponteiro)

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

Se você não deseja configurar o lfs por qualquer motivo, pode digitalizar seus projetos em busca de arquivos> 128 mb no windows digitando size: large no diretório em que seu projeto está sendo executado. Isso pode ser útil para procurar arquivos grandes, embora alguns arquivos entre 100mb e 128mb sejam perdidos.

insira a descrição da imagem aqui

O formato geral do git bash é

git add. (adiciona arquivos a serem confirmados)

git commit -m 'message' (confirma os arquivos com uma mensagem, eles ainda estão no seu PC e não no repositório remoto, basicamente eles foram 'versionados' como um novo commit)

git push (envia arquivos para o repositório)

A desvantagem do git bash para projetos do Unity é que, se houver um arquivo> 100mb, você não receberá um erro até pressionar. Você precisa desfazer seu commit, redefinindo sua cabeça para o commit anterior. Um tipo de aborrecimento, especialmente se você é novo no git bash.

A vantagem do GitHub Desktop é que, antes de você confirmar arquivos com 100mb, será exibida uma mensagem de erro pop-up. Em seguida, você pode reduzir esses arquivos ou adicioná-los a um arquivo .gitignore.

Para usar um arquivo .gitignore, crie um arquivo chamado .gitignore no diretório raiz do repositório local. Basta adicionar os arquivos uma linha de cada vez que você gostaria de omitir. O SharedAssets e outros arquivos de pastas que não são de ativos geralmente podem ser omitidos e serão preenchidos automaticamente novamente no editor (pacotes podem ser reimportados, etc.). Você também pode usar curingas para excluir tipos de arquivos.

Se outras pessoas estiverem usando seu repositório do GitHub e você quiser clonar ou extrair, você também terá essas opções disponíveis na área de trabalho ou no Git bash do GitHub.

Eu não mencionei muito sobre o pacote Unity GitHub, onde você pode usar o GitHub no editor porque, pessoalmente, não achei a interface muito útil, e não acho que em geral isso ajude alguém a se familiarizar com o git, mas esse é apenas o meu preferência.

vasmos
fonte