Git: ignore alguns arquivos durante uma mesclagem (mantenha alguns arquivos restritos a um branch)

Eu tenho dois ramos, A e B A ramificação A tem um diretório examples com alguns arquivos que são rastreados pelo git, e esses arquivos não devem aparecer na ramificação B No meu stream de trabalho, mesclei as alterações feitas em A em B frequência, o que é um problema sempre que há algumas alterações nos examples . No momento estou fazendo isso manualmente: apagando os arquivos após a mesclagem ou resolvendo conflitos quando houve uma alteração em um arquivo que eu já havia apagado.

É possível ignorar esses arquivos durante uma mesclagem? (Ou é possível manter alguns arquivos restritos a um ramo ( A ) ou longe de um ramo ( B )?)


Deixe-me tentar explicar por que estou fazendo isso: A é um esqueleto de um blog (modelo, scripts, etc), B é o meu blog ( A preenchido com meus próprios posts, imagens, rascunhos, etc). A é público e estou tentando torná-lo genérico para outras pessoas olhar e usá-lo, mas por causa disso eu preciso de alguns posts lá como um showcase / testes (o diretório de examples ). Todas as mudanças em A e mais tarde são mescladas em B para que isso mude na minha instância do blog – assim todos os novos exemplos aparecem em B e todos os exemplos excluídos em B que foram alterados em A desde a última mesclagem resultam em conflito.

Eu encontrei uma boa resposta aqui: stackoverflow Q332528

Utiliza ideias tiradas daqui: Estratégias de mesclagem do Pro-Git

Aqui está uma cópia:

Digamos que você queira excluir o arquivo config.php

Na ramificação A:

  1. Crie um arquivo chamado ‘.gitattributes’ no mesmo diretório, com esta linha: config.php merge = ours. Isso diz ao git que estratégia usar ao mesclar o arquivo. Neste caso, mantenha sempre a sua versão, ou seja. a versão no ramo em que você está se fundindo.

  2. Adicione o arquivo .gitattributes e confirme

Na ramificação B: repita os passos 1-2

Tente mesclar agora. Seu arquivo deve ser deixado intacto.


Editar:
A partir do git book sobre merge=ours , “Uma opção muito útil é dizer ao Git para não tentar mesclar arquivos específicos quando eles tiverem conflitos , mas sim para usar o seu lado da mesclagem sobre os de outra pessoa.”

Portanto, essa resposta não se aplica tão bem quanto poderia à pergunta. A resposta do pjmorse sobre o uso de submódulos é boa.

Outra opção seria usar uma mesclagem de sub-tree , que pode ter benefícios adicionais.

Você pode achar útil o comando rerere do git. Com isso, você pode gravar resoluções para determinados conflitos de mesclagem e reutilizá-los posteriormente.

Com suas atualizações: Sim, os submódulos seriam apropriados para esse uso se todos os A se encheckboxssem em um subdiretório de B (ou vice-versa). Um exemplo de submódulos usando o WordPress seria se você tivesse um repository git do WordPress; você poderia adicionar um submódulo para um tema que estaria dentro do diretório /wp-content/themes/ .

A documentação para submódulos pode ajudar.

Se os arquivos dos dois forem intercalados, talvez seja mais difícil. Na maioria dos casos em que os submódulos podem ser usados ​​dessa maneira, o aplicativo em questão foi projetado para permitir isso.