Andares

Andares permitem trabalhar em branches isolados sem sair do seu workspace. Cada andar é uma cópia completa do seu repositório que compartilha armazenamento com o original — graças ao copy-on-write do APFS (Apple Filesystem), criar um andar é muito rápido e usa quase nenhum espaço extra em disco.

Por que Andares?

Quando você está imerso em uma tarefa e precisa mudar de contexto — talvez para corrigir um bug em outra branch, revisar um PR ou experimentar uma abordagem diferente — normalmente teria que fazer stash do seu trabalho, trocar de branch e lembrar onde parou depois.

Andares eliminam esse atrito. Crie um novo andar e você terá um ambiente completamente isolado com seu próprio terminal, branch e working tree. Seu workspace original permanece exatamente como você deixou.

Criando um andar

  1. Clique no botão de andar no canto inferior direito do app, ao lado do minimapa.
  2. O canvas se reposiciona em um espaço 3D — clique no botão de novo andar.
  3. Dê um nome (ex: "Corrigir bug de login").
  4. Se você tiver um repositório git inicializado, escolha criar uma nova branch ou usar uma existente.
  5. Clique em Criar.

O Maestri clona seu repositório instantaneamente e faz checkout da branch do andar. Qualquer terminal que você adicionar no novo andar funciona neste ambiente isolado — você pode até rodar servidores de desenvolvimento, IDEs e comandos de build simultaneamente sem conflitos.

Trabalhando em um andar

Cada andar é um repositório git real. Você pode:

  • Fazer commits, criar branches, rodar testes
  • Abrir múltiplos terminais no mesmo andar
  • Ver alterações de arquivos e estatísticas de diff no painel do andar
  • Verificar conflitos de merge antes de aterrissar

A branch do andar é espelhada no seu repositório original, então outras ferramentas (GitHub, seu IDE) podem vê-la também.

Aterrissando um andar

Quando seu trabalho estiver pronto, é hora de aterrissar. Certifique-se de que todas as alterações estão commitadas (sem working tree sujo), então clique em Aterrissar no painel do andar.

O botão Aterrissar no painel do andar

A interface de aterrissagem mostra a branch do seu andar à esquerda e a branch de destino (térreo) à direita, com um ícone de avião representando a transferência de commits.

Interface de aterrissagem mostrando a branch do andar e a branch do térreo

Selecione em qual branch aterrissar:

  • Mesma branch do andar — O Maestri transfere os commits diretamente para o repositório original.
  • Branch diferente — O Maestri também realiza um merge (se não houver conflitos).

Após selecionar, você verá uma prévia do merge com estatísticas de diff e quaisquer conflitos potenciais.

Prévia do merge mostrando estatísticas de diff e o botão de merge

Clique em Merge para completar a aterrissagem. O Maestri busca os commits do seu andar para o repositório original e os mescla na branch de destino.

Nota

Resolver conflitos de merge não é suportado atualmente na interface de andares. Resolva os conflitos no seu IDE ou terminal antes de mesclar.

Excluindo um andar

Clique no x em um andar para excluí-lo. Você pode escolher:

  • Manter a branch — a branch permanece no seu repositório para uso posterior
  • Excluir a branch — remove tanto o andar quanto sua branch

O diretório clonado é sempre removido, liberando qualquer espaço em disco usado por arquivos divergentes.

Requisitos

Andares precisam de duas coisas para funcionar:

  • Volume APFS — Andares usam clonagem copy-on-write, que só funciona em APFS (o padrão em Macs modernos).
  • Repositório Git — Seu workspace deve ser um repo git.

Como funciona

Por baixo dos panos, andares usam clonagem APFS instantânea. O clone compartilha todos os arquivos inalterados com o original — apenas arquivos modificados ocupam espaço adicional.

Quando você aterrissa um andar, o Maestri usa git fetch para puxar commits do clone de volta para seu repositório original, depois faz merge usando comandos git plumbing para evitar perturbar sua working tree.

Andares são armazenados em um diretório .maestri/floors ao lado do seu projeto. Este diretório é automaticamente limpo quando você exclui o último andar.