Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Precisa de ajuda?

Livesearch
spaceKeyPROT
sizelarge
placeholderEstou procurando por ...
typepage
labelssmarterp

Para a realização do processo de guarda e verificação de qualidade, a TOTVS disponibiliza um serviço de armazenagem de artefatos.

Trata-se de uma ferramenta de controle de versão realizado por meio de um Git.

Controle de Versão

O controle de versão é um sistema que registra as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo, de forma que seja possível recuperar versões específicas.

O controle de versão permite reverter arquivos ou um projeto inteiro para um estado anterior, comparar mudanças feitas no decorrer do tempo, descobrir quem foi o último a modificar algo que pode estar causando problemas, quem introduziu um bug e quando isso ocorreu, além de muito mais. Usar um controle de versão, normalmente significa que se algo foi danificado ou se arquivos foram perdidos, facilmente será possível reavê-los. Além disso, você pode controlar tudo sem maiores esforços.

Git é um sistema de controle de versão de arquivos. Através dele, podemos desenvolver projetos, onde diversas pessoas podem contribuir simultaneamente, editando e criando novos arquivos e permitindo que os mesmos possam existir sem o risco de suas alterações serem sobrescritas.

Se não houvesse um sistema de versão, imagine o caos quando duas pessoas abrissem um arquivo ao mesmo tempo. Uma das aplicações do Git é justamente permitir que um arquivo possa ser editado ao mesmo tempo por pessoas diferentes. Por mais complexo que isso seja, ele tenta manter tudo em ordem para evitar problemas para os desenvolvedores.

Para o SmartERP Protheus, seguiremos o conceito do Git Flow.

Git Flow, trata-se de um modelo de organização de branches desenvolvido especialmente para o Git. Por ser primariamente um modelo de organização de branches, isso significa que o Git Flow estabelece algumas regras de nomenclaturas para tipos de branches enquanto, ao mesmo tempo, define o que cada tipo de branch faz. Para referência, segue uma lista dos tipos de branches definidos pelo Git Flow e suas respectivas descrições:

  • Branch master - É a branch que contém código em nível de produção, ou seja, o código mais maduro existente na sua aplicação. Todo o código novo produzido eventualmente é juntado com a branch master, em algum momento do desenvolvimento;
  • Branch develop - É a branch que contém código em nível preparatório para o próximo deploy. Ou seja, quando features são terminadas, elas são juntadas com a branch develop, testadas (em conjunto, no caso de mais de uma feature), e somente depois as atualizações da branch develop passam por mais um processo para então ser juntadas com a branch master;
  • Branches feature/* - São branches no qual são desenvolvidos recursos novos para o projeto em questão. Essas branches tem por convenção nome começando com feature/ (exemplo: feature/new-layout) e são criadas a partir da branch develop (pois um recurso pode depender diretamente de outro recurso em algumas situações) e, ao final, são juntadas com a branch develop;
  • Branches hotfix/* - São branches no qual são realizadas correções de bugs críticos encontrados em ambiente de produção, e que por isso são criadas a partir da branch master, e são juntadas diretamente com a branch master e com a branch develop (pois os próximos deploys também devem receber correções de bugs críticos, certo?). Por convenção, essas branches tem o nome começando com hotfix/ e terminando com o próximo sub-número de versão (exemplo: hotfix/2.31.1), normalmente seguindo as regras de algum padrão de versionamento.
  • Branches release/* - São branches com um nível de confiança maior do que a branch develop, e que se encontram em nível de preparação para ser juntada com a branch master e com a branch develop (para caso tenha ocorrido alguma correção de bug na branch release/* em questão). Note que, nessas branches, bugs encontrados durante os testes das features que vão para produção podem ser corrigidos mais tranquilamente, antes de irem efetivamente para produção. Por convenção, essas branches tem o nome começando com release/ e terminando com o número da próxima versão do software (seguindo o exemplo do hotfix, dado acima, seria algo como release/2.32.0), normalmente seguindo as regras do versionamento semântico, como mencionado acima.

O processo de trabalho ficaria assim:

Image Removed

Section
$ git clone https://joao.dasilva%40.totvs.com.br:asdfgh1234qwert@git












Ciclo de desenvolvimento:

Para toda personalização realizada dentro do ambiente SmartERP, seguimos o seguinte fluxo:

Image Added  Image Added

Este processo nos garante uma segurança maior e uma maior transparência no que esta sendo disponibilizado dentro do seu ambiente.

Em termos gerais, após o desenvolvimento em máquina local (testado e homologado pelo desenvolvedor), o desenvolvedor deverá submeter as correções/melhorias para o repositório de fontes remoto. Com a confirmação da gravação dos artefatos, a topologia irá iniciar os processos de avaliação dos fontes - realizada pelo SonarQube (afim de mantermos a qualidade e regras aceitáveis para futuras migrações), compilar o fonte no RPO de específicos do cliente (cada topologia possui um RPO auxiliar exclusivo para cada environment), criar/atualizar o environment de homologação do cliente (este sempre será um espelho da branch criada) e posteriormente disponibilizar o ambiente ao cliente/projeto para testes.


Para realizarmos este processo, utilizamos a ferramenta de GIT para controle dos arquivos fontes e artefatos do FileSystem (protheus_data) do cliente e SonarQube.

Painel

Image Modified

O ambiente do SmartERP possui algumas diferenças em comparação com ambiente on-premisse, Uma dela é a aplicação e disponibilização de personalização via 

Controle de Versão

O controle de versão é um sistema que registra as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo, de forma que seja possível recuperar versões específicas.

O controle de versão permite reverter arquivos ou um projeto inteiro para um estado anterior, comparar mudanças feitas no decorrer do tempo, descobrir quem foi o último a modificar algo que pode estar causando problemas, quem introduziu um bug e quando isso ocorreu, além de muito mais. Usar um controle de versão, normalmente significa que se algo foi danificado ou se arquivos foram perdidos, facilmente será possível reavê-los. Além disso, você pode controlar tudo sem maiores esforços.

Com adoção de um controle de versão dentro do SmartERP, precisaremos organizar as branches, afinal, são muitos os problemas que um projeto pode enfrentar: De bugs urgentes que devem ser corrigidos, a criação de inúmeras features em conjunto com releases agrupando os deploys relativos a essas features. Pensando nisso, adotamos o fluxo de trabalho utilizado pelo Git Flow, um modelo de organização de branches criado por Vincent Driessen que mais tarde se tornou uma excelente extensão ao Git, permitindo seu uso de forma fácil com qualquer repositório git

O que é o Git Flow?

Quando estamos trabalhando em times pequenos, é comum adotarmos pouco controle (às vezes até nenhum) sobre o fluxo de branches dos nosso repositórios, porém conforme a complexidade do projeto e equipe vão aumentando coisas que antes eram simples, como um hotfix, começam a se tornar difíceis de controlar.

O Git Flow é um modelo de conjunto de diretrizes que equipes de desenvolvimento podem seguir para organizar as branches.

Como Funciona

O Git Flow trabalha com diretrizes para a organização dos nossos branches, e por esse motivo ele estabelece padrões de nomes e funções para cada tipo de branch, são eles:

  • master: contém o nosso código de produção, todo o código que estamos desenvolvendo, em algum momento será “juntado” com essa branch
  • develop: contém o código do nosso próximo deploy, isso significa que conforme as features vão sendo finalizadas elas vão sendo juntadas nessa branch para posteriormente passarem por mais uma etapa antes de ser juntada com a master
  • feature/*: são branches para o desenvolvimento de uma funcionalidade específica, por convenção elas tem o nome iniciado por feature/, por exemplo: feature/cadastro-usuarios. Importante ressaltar que essas branches são criadas sempre à partir da branch develop
  • hotfix/*: são branches responsáveis pela realização de alguma correção crítica encontrada em produção e por isso são criadas à partir da master. Importante ressaltar que essa branch deve ser juntada tanto com a master quanto com a develop
  • release/*: tem uma confiança maior que a branch develop e que se encontra em nível de preparação para ser juntada com a master e com a develop (caso alguma coisa tenha sido modificada na branch em questão)

É importante ressaltar, que sempre que uma branch hotfix/ ou release/ é mesclada com a master o Git Flow gera automaticamente tags facilitando assim uma eventual necessidade de mudarmos para uma versão mais antiga.

O processo de trabalho ficaria assim:

Image Removed

Aplicando na prática

Existe um plugin do Git que nos ajuda a executar todos os comandos de criação de branches, tags, etc, facilitando assim todo o processo.

1. Instalando o plugin

O Git Flow não é uma ferramenta padrão do Git, e por esse motivo precisamos antes de tudo realizar a instalação do plugin. No github tem o passo a passo de como instalar em todos os ambientes.

2. Clonando um repositório Git do ambiente SmartERP

Primeiramente vamos criar uma pasta em sua máquina e posteriormente realizar o GIT CLONE deste ambiente.

Em seguida, vamos obter o endereço e as credências para obtenção dos arquivos. Para ambos, devemos acessar o ambiente do TCLOUD e na aba builds copiar o endereço descrito no botão: Clonar repositório (https://git-codecommit.us-east-2.amazonaws.com/v1/repos/smartprotheus-cxxxxxx-repository) e o usuário e senha pelo botão credenciais.

Importante: Todos os repositórios para customização do SmartERP Protheus são protegidos e sua cópia somente pode ocorrer mediante o usuário possuir um par de chaves (credencial + senha) que serão utilizados sempre que enviar suas alterações para o servidor.

Dica: Caso trabalhe em diversos clientes que possuam GIT, recomendamos que baixe o repositório já informando o usuário e senha no git clone,

Bloco de código
$ git clone usuario:senha@endereço do git

Exemplo: 

Bloco de código
Aviso
titleImportante:

A garantia de qualidade implica em:

  • como está escrito o artefato;
  • estar de acordo com as técnicas e as normas de desenvolvimento TOTVS;
  • compatibilidade entre o que está sendo personalizado e o que já se encontra no ambiente.

Para acessar as regras vigentes, acesse: https://sonar-rules.engpro.totvs.com.br

Observação: 

  • A regra de negócio não está contemplada no robô de qualidade da TOTVS e, portanto, deve ser avaliada e coberta durante os testes de homologação do cliente, antes da entrada em produção.

Controle de Versão

O controle de versão é um sistema que registra as mudanças feitas em um arquivo ou um conjunto de arquivos ao longo do tempo, de forma que seja possível recuperar versões específicas.

O controle de versão permite reverter arquivos ou um projeto inteiro para um estado anterior, comparar mudanças feitas no decorrer do tempo, descobrir quem foi o último a modificar algo que pode estar causando problemas, quem introduziu um bug e quando isso ocorreu, além de muito mais. Usar um controle de versão, normalmente significa que se algo foi danificado ou se arquivos foram perdidos, facilmente será possível reavê-los. Além disso, você pode controlar tudo sem maiores esforços. 

Para maiores informações sobre o GIT e de como instala-lo, acesse: 8.1.1. SmartERP Protheus - Conhecendo e Instalando o GIT

Com adoção de um controle de versão dentro do SmartERP, precisaremos organizar as branches, afinal, são muitos os problemas que um projeto pode enfrentar: De bugs urgentes que devem ser corrigidos, a criação de inúmeras features em conjunto com releases agrupando os deploys relativos a essas features. Pensando nisso, adotamos o fluxo de trabalho utilizado pelo Git Flow, um modelo de organização de branches criado por Vincent Driessen que mais tarde se tornou uma excelente extensão ao Git, permitindo seu uso de forma fácil com qualquer repositório git

O que é o Git Flow?

Quando estamos trabalhando em times pequenos, é comum adotarmos pouco controle (às vezes até nenhum) sobre o fluxo de branches dos nosso repositórios, porém conforme a complexidade do projeto e equipe vão aumentando coisas que antes eram simples, como um hotfix, começam a se tornar difíceis de controlar.

O Git Flow é um modelo de conjunto de diretrizes que equipes de desenvolvimento podem seguir para organizar as branches.

Como Funciona

O Git Flow trabalha com diretrizes para a organização dos nossos branches, e por esse motivo ele estabelece padrões de nomes e funções para cada tipo de branch, são eles:

  • master: contém o nosso código de produção, todo o código que estamos desenvolvendo, em algum momento será “juntado” com essa branch
  • develop: contém o código do nosso próximo deploy, isso significa que conforme as features vão sendo finalizadas elas vão sendo juntadas nessa branch para posteriormente passarem por mais uma etapa antes de ser juntada com a master
  • feature/*: são branches para o desenvolvimento de uma funcionalidade específica, por convenção elas tem o nome iniciado por feature/, por exemplo: feature/cadastro-usuarios. Importante ressaltar que essas branches são criadas sempre à partir da branch develop
  • hotfix/*: são branches responsáveis pela realização de alguma correção crítica encontrada em produção e por isso são criadas à partir da master. Importante ressaltar que essa branch deve ser juntada tanto com a master quanto com a develop
  • release/*: tem uma confiança maior que a branch develop e que se encontra em nível de preparação para ser juntada com a master e com a develop (caso alguma coisa tenha sido modificada na branch em questão)

É importante ressaltar, que sempre que uma branch hotfix/ ou release/ é mesclada com a master o Git Flow gera automaticamente tags facilitando assim uma eventual necessidade de mudarmos para uma versão mais antiga.

O processo de trabalho ficaria assim:

Image Added

Aplicando na prática

Existe um plugin do Git que nos ajuda a executar todos os comandos de criação de branches, tags, etc, facilitando assim todo o processo.

1. Instalando o plugin

O Git Flow não é uma ferramenta padrão do Git, e por esse motivo precisamos antes de tudo realizar a instalação do plugin. No github tem o passo a passo de como instalar em todos os ambientes.

2. Clonando um repositório Git do ambiente SmartERP

Primeiramente vamos criar uma pasta em sua máquina e posteriormente realizar o GIT CLONE deste ambiente.

Em seguida, vamos obter o endereço e as credências para obtenção dos arquivos. Para ambos, devemos acessar o ambiente do TCLOUD e na aba builds copiar o endereço descrito no botão: Clonar repositório (https://git-codecommit.us-east-2.amazonaws.com/v1/repos/smartprotheus-cxxxxxx-repository) e o usuário e senha pelo botão credenciais.

Importante: Temos que converter os caracteres especiais para a decimal, pois os caracteres especiais são entendidos como composto do endereço, neste caso, o @ do e-mail fica %40.

Expandir
titleTabela de Conversão Caracteres

asciifull.gifImage Removed

3. Inicializando o Git Flow


Para maiores informações sobre o painel TCloud, acesse: 4. SmartERP Protheus - Painel Gestão do Ambiente


Informações

Importante: Todos os repositórios para customização do SmartERP Protheus são protegidos e sua cópia somente pode ocorrer mediante o usuário possuir um par de chaves (credencial + senha) que serão utilizados sempre que enviar suas alterações para o servidor.


Dica: Caso trabalhe em diversos clientes que possuam GIT, recomendamos que baixe o repositório já informando o usuário e senha no git clone,Vamos inicializar o Git Flow no nosso repositório:

Bloco de código
$ git flow init

Algumas perguntas referentes à nomenclatura serão feitas, recomendo apenas apertar ENTER e não alterar nenhuma configuração aqui.

Image Removed

Interessante observar que apenas executando o comando acima já foi criado e feito o checkout para a branch develop.

4. Iniciando uma feature branch

Vamos realizar a criação de uma feature para inclusão de um fonte personalizado:

Bloco de código
$ git flow feature start testebranch

Image Removed

Após executado o comando acima, vamos entrar na pasta SRC e criar um arquivo teste.prw (apenas para simular o desenvolvimento de uma feature). E após isso vou realizar o commit.

Bloco de código
$ cd src
$ touch teste.prw
$ git add .
$ git commit -m "Criado cadastro de usuarios"

5. Finalizando a feature branch

Agora que já temos nossa feature criada, podemos finalizar a branch e mesclá-la com a develop.

$ git flow feature finish cadastro-usuarios

feature finishImage Removed

6. Iniciando o release

Agora que já temos a nossa funcionalidade de usuários na branch develop vamos iniciar o release

$ git flow release start 1.0.0

release startImage Removed

Lembrando que mudanças podem acontecer na release antes de ser mesclada para master, porém em muitos cenários essa branch é imediatamente já juntada com a master.

7. Finalizando o release

Agora vamos finalizar o release

$ git flow release finish 1.0.0

release finishImage Removed

Se você está seguindo o passo a passo, irá notar que o Git Flow abre o editor de texto para que possamos editar algumas coisas:

  • Primeira para editar o texto do merge commit relacionado ao merge entre a release branch 1.0.0 e master (texto opcional)
  • Segunda para a descrição da tag 1.0.0, que será criada pelo Git Flow para facilitar mudanças de versão (texto obrigatório)

Feito isso seu código está na master pronto para ir para produção e sem maiores problemas de versionamento.

Conclusão

O objetivo desse post foi mostrar o básico do que o Git Flow é capaz de fornecer, maiores informações podem ser encontradas no repositório do GitHub.

Na minha visão esse modelo para organizar as nossas branches é bem legal de ser seguido para times de desenvolvimento, pois permite tanto o desenvolvimento “paralelo” de features quanto a correção de bugs críticos encontrados em produção.

Controle de versão

Fluxo de 

Card
defaulttrue
id01
labelPersonalizando via fonte (ADV/PL)
Deck of Cards
id02
Card
defaulttrue
idC00
labelNoções Básicas de Git
Aviso

A Branch master sempre reflete o que está na produção do cliente, ou seja, se houver um commit de artefatos nesta branch, automaticamente entenderemos que precisamos promovê-las para a PRODUÇÃO. Portanto, utilize com muita "sabedoria" esta branch.

A Branch hotfix será gerada todas as vezes que forem encontrados erros críticos em produção. Sempre que ocorrer a criação desta branch, devemos executar um merge das correções na branch master e na branch develop sempre que concluir o desenvolvimento. Se esquecer de realizar este merge, você poderá perder as personalizações em produção ou em desenvolvimento.

A Develop é a branch que contém todos os novos desenvolvimentos solicitados pelo cliente. Todos os commits realizados nesta branch, serão promovidos para o ambiente de Develop do cliente, podendo assim, ser homologado pelo cliente.

As Features são branchs locais de desenvolvimento para que o Dev possa construir seus códigos e testar em tempo de desenvolvimento, sem a necessidade de concorrência com outros Devs. Estas features geraram um ambiente espelho da produção para homologação do desenvolvedor. Atualmente, temos disponíveis até 5 features branchs dentro do ambiente do cliente.

Card
idC01
labelInstalando o GIT

Instalação

O Git pode ser instalado tanto via linha de comando como por meio de download. Para obter o Git em sua máquina confira o passo a passo neste link: https://git-scm.com/book/pt-br/v1/Primeiros-passos-Instalando-Git

Configurando o usuário Git

Nesta etapa vamos configurar o nome de usuário e e-mail que o Git irá utilizar sempre que realizarmos uma alteração em um arquivo de código fonte, estes dados serão importantes no futuro, pois dentro do processo de submeter um código fonte para aprovação e aplicação em um ambiente, o responsável por esta avaliação irá checar estas informações.

Para concluir esta etapa de configuração, basta executar dois comandos cujo objetivo é informar ao Git qual o nome de usuário da pessoa que está utilizando a ferramenta e qual seu e-mail.

Os comandos devem ser executados em um terminal, caso você esteja utilizando Windows, ao instalar o Git será instalado uma ferramenta de terminal chamada Git Bash.

  1. Para abrir o Git Bash, execute o Windows Explorer.
  2. Acesse uma pasta de sua preferência.
  3. Clique com o botão direito e escolha a opção Git Bash Here.

Image Removed

      4. Com o terminal Git aberto, digite:

Bloco de código
$ git config --global user.name "Seu usuário"

$ git config --global user.email "Seu e-mail"

Estas configurações ficam alocadas no arquivo ~/.gitconfig, onde: o ~ é o diretório home.

No Windows, ficam em c:\Usuarios\<username>\.gitconfig.

clone usuario:senha@endereço do git

Exemplo: 


Bloco de código
$ git clone https://joao.dasilva%40.totvs.com.br:[email protected]/v1/repos/smartprotheus-cxxxxxx-repository

Importante: Temos que converter os caracteres especiais para a decimal, pois os caracteres especiais são entendidos como composto do endereço, neste caso, o @ do e-mail fica %40.

Expandir
titleTabela de Conversão Caracteres

asciifull.gifImage Added

Após clonar o ambiente, será realizado o download de todo conteúdo do cliente salvo no repositório. De padrão temos as seguintes pastas/arquivos criados:

Importante: Na criação do repositório remote GIT, automaticamente serão criadas algumas pastas e estas estrutura deve ser mantida. 

Image Added

  • src: Pasta que contêm todos os fontes (.prw) e includes (*.ch) customizados, que serão compilados no RPO do ambiente
  • protheus_data: Pasta que contêm todos os artefatos customizados que serão atualizados na RootPath(\proteus_data) do ambiente. Este é utilizado caso o cliente queira manter a versão de um artefato mesmo após a atualização do ambiente. Na prática, a cada atualização realizamos a cópia ou substituição de diversos artefatos dentro do volume do cliente e caso o cliente tenha personalizado um artefato atualizável, este será perdido.
  • dictionary.json: Arquivo de configuração que contêm todos os projeto do Master Metadata (dicionários) que devem ser aplicados no ambiente
  • .git: A pasta .git é uma pasta oculta e não deve ser alterada;

3. Inicializando o Git Flow

Vamos inicializar o Git Flow no nosso repositório:

Bloco de código
$ git flow init

Algumas perguntas referentes à nomenclatura serão feitas, recomendo apenas apertar ENTER e não alterar nenhuma configuração aqui.

Image Added

Interessante observar que apenas executando o comando acima já foi criado e feito o checkout para a branch develop.

4. Iniciando uma feature branch

Vamos realizar a criação de uma feature para inclusão de um fonte personalizado:

Bloco de código
$ git flow feature start testebranch

Image Added

Após executado o comando acima, vamos entrar na pasta SRC e criar um arquivo teste.prw (apenas para simular o desenvolvimento de uma feature). E após isso vou realizar o commit.

Bloco de código
$ cd src
$ touch teste.prw
$ git add .
$ git commit -m "inclusão do fonte para teste da branch"

Image Added


Caso queira realizar o teste do fonte criado dentro do ambiente SmartERP, precisamos empurrar o que comitamos para o repositório remoto. Até este momento, todas as ações efetuadas foram no nosso repositório clonado em nossa maquina, ou seja, o ambiente SmartERP não sabe que existe este novo fonte para compilar e disponibilizar dentro do ambiente.

Para isto temos que utilizar o comando GIT PUSH

Image Added


Após isto, basta acessar o painel TCLOUD, acompanhar a build na aba builds e coletar o endpoint para homologação na aba meus ambientes.

Image Added


Aviso

Todas as features/branchs criadas no ambiente, usam como referência o ambiente de homologação (ou develop). Desta forma todas as features/branchs criadas estarão apontando para o ambiente cxxxx-development (ambiente de homologacao).

Para coletar os endpoints basta entrar no menu meu ambiente do TCLOUD e verificar os endereços que comecem com app-feateurebranch-cxxxxx.development. 

Dica: o nome do environment é o mesmo nome da featurebranch criada, ou seja, teremos um endpoint com o nome da featurebranch e o environment do protheus também.

5. Finalizando a feature branch

Agora que já temos nossa feature criada, podemos finalizar a branch e mesclá-la com a develop.

Bloco de código
$ git flow feature finish testebranch
$ git push

Image Added


Se você está seguindo o passo a passo, irá notar que o Git Flow abre o editor de texto para que possamos editar algumas coisas:

  • Primeira para editar o texto do merge commit relacionado ao merge entre a release branch 1.0.0 e master (texto opcional)

Feito isso seu código está na develop pronto para ir para produção e sem maiores problemas de versionamento.

Para realizar o processo para a master, basta realizar o processo idêntico ao descrito até agora.


Informações
titleImportante

Branch master sempre reflete o que está na produção do cliente, ou seja, se houver um commit de artefatos nesta branch, automaticamente entenderemos que precisamos promovê-las para a PRODUÇÃO. Portanto, utilize com muita "sabedoria" esta branch.


Develop é a branch que contém todos os novos desenvolvimentos solicitados pelo cliente à serem homologados por ele. Todos os commits realizados nesta branch, serão promovidos para o ambiente de Development (homologação) do cliente, podendo assim, ser homologado pelo cliente.


Branch hotfix será gerada todas as vezes que forem encontrados erros críticos em produção. Sempre que ocorrer a criação desta branch, devemos executar um merge das correções na branch master e na branch develop sempre que concluir o desenvolvimento. Se esquecer de realizar este merge, você poderá perder as personalizações em produção ou em desenvolvimento.


As 
Features são branchs locais de desenvolvimento para que o Dev possa construir seus códigos e testar em tempo de desenvolvimento, sem a necessidade de concorrência com outros Devs. Estas features geraram um ambiente espelho da produção para homologação do desenvolvedor. Atualmente, temos disponíveis até 5 features branchs dentro do ambiente do cliente.

A Release é a branch espelho da produção que contém todos os desenvolvimentos para a nova release a ser liberada. Todos os commits realizados nesta branch, deverão promovidos  para o ambiente de RELEASE do cliente.

Aviso

As atualizações no branch master e develop forçam a parada dos ambientes de produção ou homologação e atualização do mesmo.


Caso tenha alguma dúvida no processo completo (sem gitflow) acesse: 8.1.2. SmartERP Protheus - Promovendo alterações na prática

Card
idC02
labelIniciando um projeto

Baixando um Repositório

Após configurar o usuário e e-mail, pode-se baixar uma cópia local do repositório. 

O primeiro passo é obter as credências e a url para obtenção dos arquivos.

Todos os repositórios para customização do SmartERP Protheus são protegidos e sua cópia somente pode ocorrer mediante o usuário possuir um par de chaves (credencial + senha) que serão utilizados sempre que enviar suas alterações para o servidor.

Aviso
titleAtenção

Não distribua seu par de chaves, caso perca ou suspeite que a segurança foi comprometida, solicite um novo par imediatamente.

Em posse do par de chaves e da url utilize o comando git clone:

Bloco de código
git clone git.totvs.com/v1/repos/smartprotheus-XXXXXXX-repository

(Este link você poderá coletar diretamente em seu painel de serviços TCLOUD)

Ao executar o git clone, o projeto é "baixado" para a máquina e uma pasta com o nome do projeto é criada.

Comandos iniciais do Git

Com o repositório na máquina, verificaremos quatro comandos iniciais importantíssimos:

Bloco de código
$ git add <arquivos...>

Este comando adiciona o(s) arquivo(s) em um lugar que chamamos de INDEX, que funciona como uma área do Git, no qual os arquivos possam ser enviados ao Repositório ERP. É importante saber que ADD não está adicionando um arquivo novo ao repositório, mas sim dizendo que o arquivo (novo ou não) está sendo preparado para entrar na próxima revisão do repositório.

Bloco de código
$ git commit -m "comentário qualquer"

Este comando realiza o que chamamos de commit, que significa pegar todos os arquivos que foram adicionados pelo comando add, no INDEX e criar uma revisão com um número e um comentário, que será vista por todos.

Bloco de código
$ git push

Push (empurrar) é usado para publicar todos os commits para o repositório ERP. Neste momento, é solicitada a pedido a senha.Push (empurrar) é usado para publicar todos os commits para o repositório ERP. Neste momento, é solicitado um pedido de senha.

Bloco de código
$ git status

Exibe o status do repositório atual.

Errei a mensagem do commit, como corrijo?

Imagine que você tenha errado a mensagem que escreveu no commit ou simplesmente queira melhorar a descrição do seu trabalho.

Se você já entregou a mensagem, mas ainda não fez o push das suas modificações para o servidor, pode usar a flag --amend:

Bloco de código
$ git commit --amend

O git commit --amend modifica a mensagem do commit mais recente, ou seja, o último commit.

Além de mudar a mensagem do commit, também é possível adicionar ou retirar arquivos. 

O Git cria um commit totalmente novo e corrigido.

Card
idC03
labelTrabalhando com Branches

Trabalhando com branches

No Git, o conceito de branch é muito simples e fácil de usar.

Quando é necessário criar uma branch?

Imagine que o código esteja pronto, tudo funcionando perfeitamente, mas surge a necessidade de alterar algumas partes dele como forma de melhorá-lo. Além disso, é necessário manter estas alterações tanto no computador pessoal quanto do trabalho.

Por exemplo: Se você começa a alterar os arquivos em casa, pára na metade da implementação e precisa terminar no trabalho, como você iria entregar tudo pela metade e deixar as personalizações incompletas?

Para isso existe o conceito de branch, que é justamente ramificar o seu projeto em dois, como se cada um deles fosse um repositório, e depois juntá-lo novamente.

Em projetos que usam Git, é possível ter branches locais, presentes apenas na máquina do programador e branches remotas, que apontam para outras máquinas.

Por padrão, a branch principal é chamada master, tanto no repositório local quanto no remoto. Idealmente, a master é uma branch estável, isto é, o código nessa branch estará testado e pronto para ser entregue.

Para listar as branches existentes no repositório Git, basta executar:

Bloco de código
$ git branch

Criando uma branch

Uma prática comum é ter no repositório, branches novas para o desenvolvimento de funcionalidades que ainda estão em andamento, contendo os commits do que já foi feito até então.

Para criar uma branch nova, de nome especifico a partir do último commit da master, execute:

Bloco de código
$ git branch especifico

Ao criar uma nova branch, ainda não estamos automaticamente nela. Para selecioná-la, execute:

Bloco de código
$ git checkout específico

Criando e selecionando uma branch

É possível criar e selecionar uma branch com apenas um comando:

Bloco de código
$ git checkout -b especifico

Para visualizar o histórico de commits de todas as branches, execute:

Bloco de código
$ git log –all

Para uma representação gráfica baseada em texto do histórico, há a opção:

Bloco de código
$ git log --graph
Card
idC04
labelReunindo Commits

Reunindo commits de outra branch

Como liberar as melhorias e novas funcionalidades?

É preciso mesclar o código de uma branch com a branch master.

Em geral, os sistemas de controle de versão têm um comando chamado merge, que permite fazer a junção de uma branch em outra, de maneira automática.

Vamos dizer que temos o seguinte cenário: a master tem os commits A e B.

Então:

  1. Cria-se uma branch especifica;
  2. Implementa-se uma nova funcionalidade;
  3. Realiza-se o commit D;
  4. Retorna-se à master, obtém-se o repositório remoto (as mudanças feitas por um outro membro do time);
  5. Recebe-se o commit C.

Image Removed

Se estivermos na branch master, podemos fazer o merge das alterações que estão na branch específica da seguinte maneira:

Bloco de código
$ git merge especifico

Ao realizar o merge, as alterações da branch especifica são colocadas na branch master e é criado um commit M, apenas para o merge.

O git, até mesmo abre um editor de texto para que seja possível definir a mensagem desse commit de merge.

Os comandos git log --graph ou gitk exibem o gráfico de commits da master:

Image Removed

Aviso
titleImportante

Caso a gravação dos artefatos seja realizada diretamente na branch MASTER, consideraremos que o código gravado deverá ser promovido para o ambiente produtivo, ou seja, a utilização de branchs diferentes da MASTER irá nos garantir que os códigos sejam validados no ambiente produtivo.

Para normalizarmos os nomes das branches, convencionaremos a utilização da seguinte sintaxe:

Bloco de código
$ git checkout -b feature/nova_branch
Card
idC05
labelAplicando na prática

Processo de Inovação no ambiente SmartERP

Para iniciar um processo de personalização dentro do ambiente do cliente, deve-se primeiramente, criar uma referência do projeto do cliente na máquina local do desenvolvedor. Para isto, clona-se o repositório com o seguinte comando:

Bloco de código
$ git clone https://repositorio_do_cliente.totvs.com.br (este link será fornecido pelo cliente no início do projeto)

Após, será solicitado o usuário e senha do repositório, que devem ser fornecidos pelo cliente.

Feita a clonagem do repositório do cliente, deve-se criar uma nova branch de trabalho, para isto devemos utilizar os seguintes comandos:

Bloco de código
$ git checkout -b feature/minha-inovacao

O nome da branch deve seguir o conceito do projeto que será executado dentro do cliente. Recomendamos separar o projeto por frente de trabalho, em ciclos pequenos de desenvolvimento. Desta forma, a promoção das personalizações fica mais simples.

A partir deste ponto, o desenvolvedor irá codificar as personalizações solicitadas pelo cliente em máquina local.

Como o desenvolvimento poderá demorar, é recomendável que de tempos em tempos seja feita a gravação dos dados dentro da branch criada, pois assim, garantimos que não ocorram inconvenientes como perda de informações e/ou retrabalho.

Para isto, utilizamos os seguintes comandos:

Bloco de código
$ git add --all

$ git commit -m "Descricao da alteracao"

$ git push origin feature/minha-inovacao

Estes comandos servem para "empurrar os artefatos para dentro da branch e, com isto, o robô de análise de código entrará em ação para avisar sobre qualquer ocorrência fora do padrão de desenvolvimento TOTVS.

Neste momento, provisionaremos um ambiente de desenvolvimento para a branch criada, para que o desenvolvedor realize a homologação das personalizações realizadas.

Ao término do processo de desenvolvimento, o desenvolvedor deverá "empurrar os artefatos gravados dentro da branch para a MASTER. Este processo deverá ser efetuado através de um merge com a branch master. Para realizar isto, deve-se resolver todos os conflitos que surgirem.


...