Pular para o conteúdo

Git

Rudel usa operações Git nativas de PHP por meio de Pitmaster. Não exige o binário git do host. Os repositórios remotos são acessados por HTTP(S) ou SSH.

Cada ambiente isolado tem um nome de branch, rudel/{sandbox-id}, usado por todos os fluxos de trabalho Git abaixo.

Clonar um repositório remoto em um novo ambiente isolado

Shell
wp rudel create --name=feature-x --git=https://example.test/my-theme.git

Rudel cria o ambiente isolado, clona o repositório remoto em themes/my-theme dentro do diretório do ambiente (o nome do diretório é o nome do repositório), cria o branch rudel/{id} a partir do branch padrão e faz o checkout dele. Com --type=plugin, o checkout vai para plugins/my-theme. O repositório remoto, o diretório e o branch base são armazenados no ambiente isolado para permitir pushes posteriores. Se a clonagem falhar, o ambiente permanece e o comando exibe um aviso.

O checkout é uma cópia de trabalho para wp rudel push. Na versão atual, o ambiente isolado não o serve (problema #11):

  • O ambiente isolado serve o tema escolhido com --theme ou o tema ativo do host, copiado do host quando o ambiente é criado. --theme deve indicar um tema instalado no host, então o checkout só é servido quando o nome do repositório corresponde a esse slug e a clonagem grava no diretório do tema copiado.
  • Os plugins sempre são carregados do diretório de plugins do host, então um checkout --type=plugin nunca é executado.

Worktrees vinculados

Ao clonar um ambiente isolado cujo diretório do tema é um repositório Git, Rudel cria um worktree vinculado para o novo ambiente em vez de copiar arquivos:

Shell
wp rudel create --name=feature-y --clone-from=feature-x-3be7

O worktree usa o branch rudel/{new-id}. Rudel o registra nos metadados do novo ambiente isolado com um nome explícito de worktree baseado no ID do ambiente, no tipo de conteúdo e no slug do tema, para que dois ambientes que usam o mesmo slug de tema não entrem em conflito. Destruir o ambiente remove o worktree e exclui o branch.

wp rudel cleanup --merged considera apenas esses worktrees vinculados. Consulte Limpeza.

Enviar alterações

Shell
wp rudel push feature-x-3be7 --message="Update checkout template"

push faz commit de todas as alterações no checkout e envia o branch rudel/{id} para origin. Retorna No changes to push. quando não há alterações.

  • --git=<remote> define o remoto quando nenhum está armazenado; após o primeiro push bem-sucedido, ele fica salvo.
  • --dir=<dir> escolhe o diretório relativo ao diretório do ambiente isolado, por exemplo themes/my-theme. O padrão é o diretório armazenado por --git; caso contrário, usa todo o diretório do ambiente.
  • --message tem como padrão Update from Rudel sandbox.

A partir de PHP, Rudel::push( $id, $remote_url, $message, $subdir ) faz o mesmo e aciona os hooks rudel_*_environment_push.

Identidade do commit

Se o checkout não tiver user.name nem user.email na configuração Git, Rudel grava Rudel e rudel@localhost. Defina RUDEL_GIT_AUTHOR_NAME e RUDEL_GIT_AUTHOR_EMAIL em wp-config.php para usar outros valores.