Eu tenho um repositório Git no qual todo o meu código está na ramificação mestre e anteriormente estava ignorando todos os arquivos do Drupal, para manter uma separação estrita entre o código que escrevi (ou modifiquei ou pode modificar) e o código que poderia ser gerado com Drush ou o que seja.
Parecia uma boa estratégia até que eu tive que atualizar o Drupal. Percebi que quero ser capaz de reverter se as coisas correrem mal e que ferramenta melhor usar do que o Git para fazer isso. Pensei comigo mesmo que essa seria a situação perfeita para um ramo de recursos; portanto, criei um drupal-7.14
ramo, dando-lhe o direito .gitignore
de ignorar todos os meus arquivos de código e configurações e prestando atenção apenas nos arquivos que fazem parte da instalação do Drupal que eu não faria ' Não toque. Fiz uma atualização manualmente (faça o download, descompacte, descompacte, copie), classificando os casos limítrofes como robots.txt e .htaccess e substituindo o .gitignore do Drupal pelos meus. Corrigi algumas configurações que funcionavam com o 7.14, mas não com o 7.15, para recuperar um erro de 500 e, em seguida, tudo parecia perfeito. Renomeei o ramo para drupal-7.15
e estava prestes a seguir feliz no meu caminho.
Até que eu percebi o que havia feito inadvertidamente: arquivos que anteriormente não eram rastreados pelo meu ramo mestre, mas deixados no diretório de trabalho, agora eram removidos do diretório de trabalho quando eu fazia o check-out do mestre, já que não eram mais arquivos não rastreados! D'oh!
Se eu mesclar o drupal-7.15
ramo com o mestre, perderei a separação do código.
Provavelmente existe uma maneira de converter uma ramificação em um submódulo. Supondo que isso seja possível, essa pode ser a melhor estratégia. Antes de fazer isso, eu sabia que os submódulos eram a solução "certa", mas como não percebi o efeito colateral de usar ramificações para arquivos não rastreados anteriormente, decidi cortar os cantos e seguir esse caminho. (Além disso, todas as abordagens que utilizei nos submódulos com o Drupal assumem que você está iniciando um novo projeto e o Drupal será o ramo principal. É indesejável para mim tornar o código de outra pessoa o ramo principal, e eu já tinha um repositório com uma ramificação mestre. Parecia que seria desnecessariamente complicado apenas fazer uma atualização.)
Pode haver alguma outra solução que eu não tenha pensado.
Como posso me recuperar melhor com o menor número possível de desvantagens?
ATUALIZAÇÃO : Isso está em desenvolvimento (em uma VM Linux no meu laptop) e ainda não foi produzido. No momento em que vamos para a produção, planejo incluir tudo em módulos de recursos, mas isso ainda não está em vigor.
ATUALIZAÇÃO 2 : Sub-módulos podem não funcionar. De acordo com o Pro Git , "Os submódulos permitem manter um repositório Git como um subdiretório de outro repositório Git". Drupal não fornece uma separação tão agradável. Em vez de todo o código Drupal estar em um subdiretório, o relacionamento é mais ou menos invertido, mas ainda não existe uma separação limpa, pois você pode estar editando seu .htaccess e robots.txt, para que seu código e o repositório Drupal sejam misturados. Estou procurando uma solução alternativa para esse problema .
fonte
Respostas:
Parece da discussão acima que sua pergunta não é sobre como corrigir seu repositório git, mas sobre como manter um site Drupal no git e como isso funciona com as atualizações principais.
Eu acho que a prática padrão é de fato manter todos os arquivos no seu repositório, incluindo o núcleo do Drupal. A separação do código Drupal do código personalizado parece uma boa ideia, mas não acho que seja necessário e não vejo quais vantagens ele oferece. Parece também presumir que você nunca desejará corrigir o núcleo (ou precisará fazê-lo como parte de sua implantação), que, embora não seja uma prática recomendada, é definitivamente algo que você deseja poder fazer se algo quebrar em produção. Manter seus compromissos agradáveis e focados também ajuda a obter esse tipo de separação.
A solução que usei é manter todo o código no mesmo repositório, colocar o máximo possível em Recursos ou outros tipos de exportação / código / configuração e manter uma lista de patches que precisam ser aplicados a -box core e contrib.
Ao atualizar o núcleo, inicie no seu ambiente de desenvolvimento:
drush sql-dump
). Faça um commit com o despejo ou salve-o em algum lugar seguro.drush up drupal
)drush updb
na produção.git reset --hard HEAD~2
deve fazê-lo) ou reverta as duas confirmações se desejar manter o histórico. Substitua seu banco de dados pelo despejo.O despejo de banco de dados é necessário porque, caso contrário, não é possível desfazer as alterações feitas no banco de dados por atualizações. Você também pode fazer a atualização em uma ramificação; nesse caso, reverter significa apenas fazer check-out do mestre. É um pouco desaconselhável se você estiver trabalhando em um site de desenvolvimento porque não pode realmente voltar ao master e continuar trabalhando lá em paralelo por causa do banco de dados.
O uso desse fluxo de trabalho mais simples do lado do git permitirá que você use toda a força do git quando necessário, sem a complicação dos submódulos etc. Se isso não parecer adequado, você poderia explicar por que precisa de mais separação de código?
fonte
Dos meus comentários acima, esta pergunta é sobre como manter os arquivos de um site Drupal com o git e como isso funciona com as atualizações principais. Você não mencionou nada sobre como fazer backup e atualizar o banco de dados. Vou tentar não copiar nada da resposta do goron.
Eu criei uma postagem no blog sobre esse problema Atualizando o núcleo do Drupal no seu site com o Git
Métodos alternativos
Você não declarou isso, mas se estiver interessado em acompanhar as alterações entre as versões do Drupal, eu faria isso usando tags em vez de branches . Depois de concluir a confirmação de atualização para mestre , marque seu código como 7.x.
fonte
Estou executando a instalação com duas ramificações, assim como o OP: uma ramificação apenas com meu código personalizado e uma ramificação que possui meus arquivos personalizados e principais. Corri para a mesma situação: os arquivos principais ignorados são removidos ao alternar entre ramificações.
Acabei tendo dois diretórios git idênticos: - um para trabalhar no meu código personalizado, com os arquivos principais presentes, mas ignorados, e nunca mudaria para a ramificação "completa" neste diretório - uma para executar mesclagens, para que eu execute a alternância e mesclagem de ramificações somente dentro deste diretório.
A razão pela qual escolhi essa configuração de duas filiais é porque desejo rastrear facilmente todas as confirmações locais nos arquivos principais; é mais fácil examinar e reaplicar os mods principais ao atualizar os arquivos principais.
fonte