Tenho um repo chamado myrepo
no beanstalk
servidor remoto .
Eu o clonado em minha máquina local. Criou duas ramificações adicionais: staging
e dev
. Empurrei essas ramificações para o controle remoto também.
Agora:
local remote server
--------------------------------------------------------
master ==> Pushes to `master` ==> deployed to `prod`
staging ==> Pushes to `staging` ==> deployed to `staging`
dev ==> Pushes to `dev` ==> deployed to `dev`
Eu tenho um arquivo chamado config.xml
que é diferente em cada ramo.
Desejo ignorar este arquivo apenas durante as fusões. Mas eu quero que isso seja incluído quando eu fizer checkout ou enviar de / para o branch repo.
O motivo pelo qual quero isso é que temos um script de implantação que puxa (verifica) o branch específico e implanta nos respectivos servidores. Portanto, precisamos que o config.xml
arquivo desse branch específico vá para o servidor específico, conforme indicado acima, quando implantado.
Eu acho que .gitignore
não vai funcionar. quais são as outras opções? Observe que o arquivo ignorado deve fazer parte do checkout e do commit, o que é importante. ele deve ser ignorado apenas durante as fusões.
Obrigado!
Respostas:
Superei esse problema usando o comando git merge com a
--no-commit
opção e, em seguida, removi explicitamente o arquivo testado e ignorei as alterações no arquivo. Ex: diga que quero ignorar quaisquer alterações paramyfile.txt
proceder da seguinte forma:Você pode colocar as instruções 2 e 3 em um loop for, se tiver uma lista de arquivos para pular.
fonte
git reset HEAD myfile.txt
faz exatamente? Como isso ajuda com nosso objetivo aqui?Acabei encontrando git
attributes
. Tentando. Trabalhando até agora. Não verifiquei todos os cenários ainda. Mas deve ser a solução.Estratégias de mesclagem - atributos do Git
fonte
.gitattributes
- é um arquivo de nível raiz de seu repositório que define os atributos para um subdiretório ou subconjunto de arquivos.Você pode especificar o atributo para dizer ao Git para usar diferentes estratégias de mesclagem para um arquivo específico. Aqui, queremos preservar o existente
config.xml
para o nosso ramo. Precisamos definir omerge=ours
paraconfig.xml
no.gitattributes
arquivo.merge=ours
diga ao git para usar nosso arquivo (branch atual), se ocorrer conflito de mesclagem.Adicione um
.gitattributes
arquivo no nível raiz do repositórioVocê pode configurar um atributo para confix.xml no
.gitattributes
arquivoE, em seguida, defina uma simulação para nossa estratégia de fusão com:
Se você mesclar o branch do
stag
formuláriodev
, em vez de ter os conflitos de mesclagem com o arquivo config.xml, o config.xml do branch do stag será preservado em qualquer versão que você tinha originalmente.fonte
config.xml
estiver completamente inalterado da base de mesclagem para qualquer versão de ponta de ramificação, o Git apenas pega a versão alterada, sem olhando para omerge.ours.driver
cenário. Então você está correto em se preocupar.theirs
é uma estratégia de mesclagem embutida. Mas parece que se pode escrever<pattern> merge=foo
, entãogit config --global merge.foo.driver true
, e funcionará da mesma maneira.Você pode começar usando
git merge --no-commit
e, em seguida, editar a mesclagem da maneira que quiser, ou seja, removendo o testeconfig.xml
ou qualquer outro arquivo e, em seguida, confirmar. Suspeito que você queira automatizar ainda mais depois disso usando ganchos, mas acho que valeria a pena passar manualmente pelo menos uma vez.fonte
git attributes
oferecem qualquer solução em linha reta? Eu não consigo entender isso. git-scm.com/book/en/…Você pode usar
.gitignore
para manter o arquivoconfig.xml
fora do repositório e, em seguida, usar um gancho post commit para enviar oconfig.xml
arquivo apropriado para o servidor.fonte
attributes
. Alguma ideia de como funciona? Eu não consigo entender isso. git-scm.com/book/en/…Exemplo:
master
,develop
develop
ramo e deseja ignorá-lo durante a fusãoCódigo:
Você também pode ignorar arquivos com a mesma extensão
por exemplo, todos os arquivos com
.txt
extensão:fonte
Aqui git-update-index - Registra o conteúdo do arquivo na árvore de trabalho para o índice.
Exemplo:-
fonte