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
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
--themeou o tema ativo do host, copiado do host quando o ambiente é criado.--themedeve 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=pluginnunca é 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:
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
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 exemplothemes/my-theme. O padrão é o diretório armazenado por--git; caso contrário, usa todo o diretório do ambiente.--messagetem como padrãoUpdate 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.