recentemente mudamos de SVN para Git e, ao mesmo tempo, colocamos nossos sistemas ao vivo no controle de versão (em vez de check-out local e cópia de arquivo ao vivo).
No projeto ao qual estou designado, todos acessamos o mesmo repositório e, para obter alterações no live, estamos git pull
lá. Isso causa problemas porque nossos webdesigners enviam alterações para o VCS que ainda não deveriam estar no ar, mas deveriam estar no ambiente de teste na web.
Quando um dos desenvolvedores agora entra em operação, ele recebe todas as alterações (possivelmente inacabadas).
Pensei em mudar ao vivo para um ramo extra e apenas mesclar o que mudou, mas devido à minha falta de conhecimento do git, não faço ideia de como.
Minha ideia é:
- Crie uma nova ramificação em live (
git branch live
). - Toda vez que algo tem que ir ao ar
- Puxe alterações no mestre (como
git checkout master; git pull; git checkout live
:) git merge master
- Puxe alterações no mestre (como
O problema é que mudar para o master ou puxar tudo diretamente para o sistema ativo causaria problemas, então eu preferiria evitar isso.
Existe alguma maneira de fazer isso ou existe uma maneira melhor de gerenciar o sistema Live (exceto para treinar os webbies para não empurrar coisas inacabadas).
git pull --all
por padrão, não puxará o mestre para o live, ele puxará o master e o mesclará com o master e (se existir no servidor) puxará o live para mesclar no live. Você tentou?git checkout -f
para ignorar o problema - mas faça um backup!Respostas:
Você pode usar
git stash
antes de verificar o master e puxar e, depois de verificar o live novamente, usegit stash pop
(ou se o seu git for mais antigogit stash apply
egit stash clear
supondo que você não escondeu mais nada)fonte
git pull --all
irá buscar todos os controles remotos, mas ainda tentará mesclar um ramo (ou o ramo padrão) no ramo atual também.git fetch --all
pode ter sido uma resposta melhor--all
opção fornecerá uma fusão de polvo das diferentes versões do ramo no atual ! Portanto, meu conselho é ficar longe, a--all
menos que seja isso que você procura, porque na maioria dos outros casos isso não lhe dará nada.Eu era capaz de puxar mudanças a partir de
origin/master
dentromaster
, enquanto trabalhava em outro ramo usando o comando:fonte
fetch
! =pull
Resolva o problema primeiro. Eles não devem empurrar para uma filial para a qual não têm negócios.
O que você parece estar perguntando seria algo como
Isso tentará mesclar o mestre remoto e sua ramificação ativa.
fonte
Eu recomendo que você crie um repositório de teste git para que todos possam confirmar. Todos os repositórios, incluindo o site ao vivo, serão clones do repositório de testes. Dessa maneira, qualquer pessoa pode fazer o teste sem tocar no site ao vivo. Quando alguém precisar atualizar o site ativo, você poderá extrair o site ativo do repositório de testes do git. Esse fluxo de trabalho é bastante semelhante ao SVN. Para flexibilidade extra, recomendo usar o ramo "ao vivo" que você descreve.
Para resumir, o repositório git de todos é um clone do repositório de testes. O site de produção ao vivo também é apenas um clone do repositório de testes. Como alternativa, o teste pode ser um clone da produção ao vivo, para que um "empurrãozinho" sempre se mova em direção à produção.
Outras opções, incluindo a adição da ramificação "ativa" a esse arranjo ou a inclusão de um repositório "intermediário" entre teste e produção. Para segurança extra, recomendo restringir o acesso ao repositório ao vivo do git e forçar as pessoas a usar um script seguro que faça a atração para a produção ao vivo.
fonte