Solucionado (ver solução)
Solucionado
(ver solução)
10
respostas

Dúvida sobre repositório git

Boa tarde galera,

Gostaria de saber se é possível a seguinte situação e como fazer caso seja possível, e também, se isso seria recomendado ou tem um jeito melhor.

  1. Vamos supor que eu tenho um repo no Git chamado ProjetoX.

  2. Eu preciso de uma versão paralela do projeto que está neste repo, pois terá uma versão do projeto com algumas alterações, que a outra não deve ter. O que fazer?

A. Criar um segundo repo, chamado ProjetoX_v2 por exemplo, copiando todo o conteúdo do repo de origem. Isso é possível? Como seria feito?

B. Criar apenas uma branch a mais no repo ProjetoX, utilizando o comando normal abaixo, por exemplo:

git checkout -b projetoX_v2

E ai nessa branch faz as alterações desta versão, mas ai teríamos algo um pouco diferente certo, pois eu teria uma versão do projeto que não tem um branch master para ela, e mais branchs de desenvolvimento dela teriam que ser criados todos a partir do projetoX_v2, tudo ficando dentro do mesmo repo da versão original.

C. Tem alguma outro meio que eu não pensei e seja uma melhor solução, mais correta quando se usa versionamento?

10 respostas

Emerson, tudo bem ?

A questão da branch é bem comum de ser utilizado ! Outro caso é você usar o esquema de Tag, que funciona como se fosse outra release.

Eu não entendi muito bem o que você deseja, não tem tanto contexto, porém essas duas soluções são boas práticas e devem ajudar a resolver seu problema.

Abraços

Fala Matheus, tranquilo?

Então, imagine que você tem um sistema qualquer. Mas precisará ter duas versões diferentes dele, uma para um cliente A e outra para um cliente B.

Então como ficaria: um repo X do projeto, e dentro dele uma branch master_a para a versão do primeiro cliente, e a branch master_b para a versão do segundo cliente?

Ou seria mais recomendado dois repositórios separados, ai cada um tem seu master (mantendo a nomenclatura padrão), e por ai vai.

Consegui explicar melhor?

Eu sempre acho melhor deixar as coisas separadas, porque são clientes diferentes, as vezes a regra de negócio de um é totalmente diferente de outro, mas como te disse é uma opnião minha.

Nesse caso eu deixaria dois projetos separados, ainda que use a mesma config, podendo ser um fork por exemplo.

Legal, pra mim também faz mais sentido deixar os dois separados.

Criar um branch a partir de outro o curso já ensinou, é tranquilo. Mas criar um repositorio copia de outro não vi, talvez nem seja possível. Tem como eu fazer isso via linha de comando no git bash?

Emerson,

Esse caso que eu disse, se chama Fork, nele você realmente copia o repositorio inteiro para você, usando o Github.

E neste caso do Fork, ficam duas raízes separadas mesmo, os commits de uma não interferem na outra certo?

Exatamente...

Caso você queira pegar as modificações que você realizou e aplicar na raíz que você pegou, existe o famoso Pull Request, que une, fazendo o merge.

Abraços

Entendi, mas eu tentei ir agora no meu github e fazer um fork do projeto e não deu certo.

Eu clico no botão e não faz nada. O próprio botão já tem um hint dizendo que o Fork é para fazer uma cópia do projeto de outra pessoa para a minha conta. E nesse caso não é isso, o projeto já está na minha conta, e queria fazer um Fork, mas para eu mesmo, isso acho que o Github não permite.

solução!

Exato, isso ele não permite mesmo.

Acho que talvez seja mais viável você ter as branchs e tags.

Deixar a parte viável - reutilizável - na master e em cada branch você ter a segmentação para cada empresa, a parte ruim dessa abordagem é que você talvez tenha retrabalho, que não vai ser muito bacana.

Boa ideia Matheus, eu não tinha pensado nisso. Se eu usar uma estrutura assim vai dar certo:

Repositório - projetoX

Branch Master - projeto base (comum a ambos os clientes)

Branch Desenvolvimento - fica para alterações da base do projeto (o que for feito aqui, depois de testado e homologado vai tanto para a Master, quando para a Master_A e Master_B)

Branch Master_A - criada a partir da Master, versão do cliente A

Branch Desenvolvimento_A - criada a partir da Master_A, fica para alterações específicas desse cliente

Branch Master_B - criada a partir da Master, versão do cliente B

Branch Desenvolvimento_B - criada a partir da Master_B, fica para alterações específicas desse cliente

Com isso não teremos retrabalho, o que mudar de comum a ambos, faço na branch Desenvolvimento e faz merge para as específicas de cada cliente. O que for alteração própria de cada cliente faz nas branchs próprias deles.

Muito obrigado pelas explicações, ajudou muito. Abraço.