Controle de versão
s
1. Controle de Versão
Quando programamos existe a necessidade de gerenciar as alterações que ocorrem durante o desenvolvimento do projeto e até mesmo depois, acompanhe o seguinte exemplo:
Abaixo o trecho de código inicial, vamos chamá-lo de A.
if (a > b) {
resultado = (a + b)
}
Então, alteramos o código, vamos chamar de B, ou mesmo o corrigimos para :
if (a > b) {
resultado = (a + b * 10)
}
Perceba que para facilitar a manutenção e desenvolvimento em equipe e pensando em documentar a lógica temos que dispor das seguintes facilidades.
-
Capacidade reverter o código atual para o estado anterior, lógica A;
-
Necessidade de compartilhar o código como outros desenvolvedores;
-
Necessidade de documentar as alterações no momento que forem compartilhadas.
2. Ferramentas para controle de versão
Existem várias ferramentas para controle de versão disponíveis no mercado, como por exemplo :
GitHub - É um serviço de armazenamento de nuvem para gerenciamento de códigos de aplicação. É possível ter uma conta gratuita e armazenar até 500Mb por projeto;
Gitlab - É um serviço de armazenamento de nuvem para gerenciamento de códigos de aplicação concorrente do Github mas com o diferencial que pode ser instalado em um ambiente corporativo;
SVN - Gerenciador de versão para vários tipos de arquivos, inclusive arquivos de mídia, para ambientes corporativos;
Git LFS - Large File System é uma versão do git para armazenamento de arquivos de mídia ou binários, podendo armazenar de forma gratuita até 1GB.
O Unreal Engine trabalha de forma nativa com SVN, Perforce e Git, esta última até o momento em versão beta.
3. Estrutura do GIT
No gráfico abaixo é apresentado a estrutura de armazenar e alguns comandos do ambiente do Git.
4. Entendo o fluxo de trabalho
Quando utilizamos um gerenciador de versão temos que seguir um fluxo de trabalho para compartilhar o código armazenado localmente, segue abaixo os comandos iniciais do fluxo:
Add
- Permite adicionar as alterações para um registro local.
git add .
Commit
- Compromete ou confirma as alterações e criar uma etiqueta ou informação para identificar o trabalhado realizado, por exemplo:
git commit -m "feat: Adicionado lógica de movimentação do jogador com mouse X e Y em BP_HeroBase."
git commit -m "fix: Corrigido o evento MostraMenu em BP_GameInstance, anteriormente o objeto apresentava erro no momento de instanciar o objeto BP_MenuPrincipal, foi adicionado o nó IsValid antes da execução."
git commit -m "fix: Lista de correções #14,#252"
Push
- “Empurra” e publica as alterações locais no servidor.
git push origin main
5. Começando a trabalhar com o Git e o Unreal Engine
Neste passo vamos preparar o ambiente e projeto para começar a trabalhar com o gerenciamento de versões, utilizaremos o GitHub como repositório de arquivos e gerenciador de versões, para tal executaremos os próximos passos.
5.1. Criando uma conta e o projeto no Github
Inscreva-se no Github para possibilitar:
-
Registro de Repositórios - Espaço de armazenamento e versionamento de arquivos e projetos;
-
Registro e acompanhamento de tarefas - Registro e acompanhamento de tarefas que podem se associadas aos
commits
; -
Registro e acompanhamento de projetos e versões - Registro de versões de projeto;
-
Wiki - Publicação de um Wiki do projeto.
5.2. Instalando Git Client e GitHub Desktop
É necessário instalar o Git Client no computador local para criar as estruturas de versionamento. Utilizaremos o PowerShell com os comandos a seguir para instalar o aplicativo cliente.
1. Instale o Cliente GIT;
2. Crie uma chave de autenticação (Key-Gen) com o GIT-BASH;
ssh-keygen
Nota: Este passo só é necessário se no momento de envio (push) solicitar senha e o sistema operacional não gerenciar as credenciais adequadamente.
-
Adicione a chave no GitHub Settings >SSH and GPG Keys;
-
Para testar execute os comandos:
mkdir -p D:\temp\testegit
cd D:\temp\testegit
git init
git status
git remote -v
3. Após a instalação do Git Client vamos baixar e instalar o ambiente visual GitHub Desktop para simplificar o fluxo de trabalho.
5.3. Configurando Unreal Engine para utilizar o Git
Para exemplificar a conexão do Unreal Engine com o Github vamos criar um novo projeto com os seguintes parâmetros:
-
Template : Blank;
-
Project Name : TestGitHub;
-
Type: Blueprint;
Nota: Iremos manter os demais parâmetros como estão.
Para Configurar o projeto utilizaremos Menu
> Edit
> Connect To Source Control
.
Abaixo a descrição dos parâmetros;
Git Path
- Caminho para o executável do Git client;
Add a .gitignore file
- Adiciona o arquivo para controle do que deve ser enviado para o servidor;
Add a basic README.md file
- Adicione um arquivo em formato Markdown para ser utilizado como documentação inicial;
Make the initial Git Commit
- Inicializa o repositório local.
Logo em seguida inicialize o projeto e clique em Accept Settings
;
Com o Content Drawer
crie as pastas de trabalho.
Nota: Utilize a estrutura de pastas definidas em Organizando as Pastas.
Salve o level atual em Projeto\Maps
com o nome LevelTest
.
5.4. Configurando o Github Desktop e adicionando o projeto
Abra o GitHub Desktop e configure a sua conta do Github para ter acesso aos seus repositórios utilizando o menu principal File
> Options
;
Adicione o projeto TestGitHub com Add an Existing Repository from your hard drive...
, informe a pasta do projeto TestGitHub;
Utilizando o Explorer navegue até a pasta do projeto e edite o arquivo .gitignore e adicione o texto ExampleContent, isso impedira a pasta ser enviada para o repositório remoto, verifique Ignorando pastas e arquivos
para mais informações;
6. Criando o projeto remoto e atualizando os arquivos
Uma vez configurados os projetos nos sistemas Unreal e GitHub Desktop, podemos confirmar as alterações dos arquivos utilizando o comando Commit to Master
.
Após confirmação das alterações devemos publicá-las no repositório remoto usando o comando Publish repository
.
O comando acima irá criar um projeto na sua conta no Github.com e adicionar todos os arquivos criados até o momento.
6.1. Testando a configuração do Git com o Unreal Engine
Para testar as configurações realizadas vamos adicionar o pacote Starter Content
e um objeto Blueprint.
Adicione o pacote Starter Content utilizando o Content Drawer
: Add
> Add Feature or Content Pack
escolha Starter Content
.
Após a instalação do pacote mova o diretório StarterContent
para a pasta ExampleContent
, isso deve impedir que a referida pasta seja publicada no repositório remoto, como por exemplo:
ExampleContent\StarterContent
.
Vamos criar o objeto BP_Ator
do tipo Actor e adicioná-lo na pasta Content\Projeto\Characters
.
No painel Changes
do GitHub Desktop devem aparecer somente os arquivos :
-
BP_Ator.usasset;
-
TestGitHub.uproject.
Após a confirmação vamos enviar as alterações para o servidor com o comando Push origin
.
7. Utilizando comandos do PowerShell para utilizar o Git Client
É interessante aprender comandos do PowerShell para utilizar o Git Client pois existem diversas situações que não estão nas ferramentas visuais, como por exemplo:
-
Resolução de conflitos.
-
Adicionar nome de versão para um determinado conjunto de arquivos.
Então vamos apresentar os principais comandos.
7.1. Clonando o projeto
Clonar o projeto significa baixar o projeto do servidor para a máquina cliente (local).
mkdir -p D:\UnrealProjects
git clone https://github.com/myerco/ProjetoAula.git
cd ProjetoMP
git status
7.2. Criando o projeto
Podemos criar um novo projeto no cliente e em seguida atualizar o servidor.
mkdir -p D:\UnrealProjects\ProjetoMP
cd D:\UnrealProjects\ProjetoMP
git init
git remote add origin https://github.com/myerco/ProjetoAula.git
git remote -v
7.3. Atualizando o projeto no servidor
Mudanças podem ser replicadas do cliente para o servidor.
git add .
git commit -m "feat: Atualizando o projeto.. Alteração de movimentação de personagem"
git push origin master
7.4. Atualizando o projeto no cliente (local)
O comando pull
baixa os arquivos do servidor.
git status
git pull origin master
8. Ignorando pastas e arquivos
É importante ignorar pastas e arquivos do cliente para que não possam ser publicadas no servidor utilizando o arquivo .gitignore
na pasta raiz do projeto, considerando os seguintes aspectos.
Segurança - Arquivos de controle de senhas ou outros dados relativos a segurança não podem ficar disponíveis publicamente.
Arquivos e pastas temporárias - Estes arquivos podem ser recriados ao compilar o projeto.
Arquivos grandes Arquivos de imagens ou elementos de grande tamanho podem ser excluídos do versionamento e devemos considerar outras métodos de armazenamento como por exemplo:
8.1. Exemplo de arquivo .gitignore para o Unreal Engine
# Projetos exemplo
ThirdPerson/
ThirdPersonBP/
Geometry/
Mannequin/
StarterContent/
# Visual Studio 2015 user specific files
.vs/
# Compiled Object files
*.slo
*.lo
*.o
*.obj
8.2. Exemplo de arquivo . gitattributes
O arquivo .gitattributes é utilizado para que o Github identifique e armazene de forma estruturada arquivos binários, como por exemplo, vídeos, imagens e outros, para saber como utilizar visite Git Large File Storage - Git LFS.
# Auto detect text files and perform LF normalization
* text=auto
*.jpg filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.hdr filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.exr filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
*.tga filter=lfs diff=lfs merge=lfs -text
*.cubemap filter=lfs diff=lfs merge=lfs -text
*.tif filter=lfs diff=lfs merge=lfs -text
*.bin.fbx filter=lfs diff=lfs merge=lfs -text
*.umap filter=lfs diff=lfs merge=lfs -text
*.duf filter=lfs diff=lfs merge=lfs -text
*.uasset filter=lfs diff=lfs merge=lfs -text
*.upk filter=lfs diff=lfs merge=lfs -text
*.udk filter=lfs diff=lfs merge=lfs -text
*.blend filter=lfs diff=lfs merge=lfs -text