Saltar para o conteúdo

Adicionar repos a um espaço de trabalho

Este guia mostra-lhe como registar um checkout Git num espaço de trabalho, voltar a indexá-lo e removê-lo.

Os repos têm âmbito de espaço de trabalho. Não existe um registo global nem um passo de ligação: adicionar um repo e colocá-lo num espaço de trabalho são o mesmo ato. O mesmo checkout registado em dois espaços de trabalho torna-se duas linhas independentes, com dois ids diferentes — entre espaços de trabalho, a identidade de um repo é o seu caminho no sistema de ficheiros, nunca o seu id.

Uma pasta só pode ser registada se estas três condições se verificarem:

  1. Está dentro de uma árvore de trabalho git.
  2. Essa árvore de trabalho tem um remoto origin.
  3. O remoto origin aponta para uma forge suportada: github.com, gitlab.com ou bitbucket.org.

Qualquer outra situação é recusada no momento do registo com uma mensagem explícita: “Folder is not inside a git work tree.”, “No origin remote configured for this repository.” ou “The origin remote is not hosted on a supported forge (github.com, gitlab.com, bitbucket.org).”. Não existe um modo apenas local.

A forge é lida a partir do remoto e guardada no repo — nunca a escolhe. Um espaço de trabalho pode conter repos das três ao mesmo tempo, e comunica-se com cada uma através da sua própria API, com a sua própria credencial. Os namespaces aninhados do GitLab são preservados, pelo que gitlab.com/group/subgroup/project é registado com o proprietário group/subgroup e o nome project.

A pasta também tem de residir na máquina que aloja o cc_server, dentro de um dos diretórios --repo-roots desse servidor. Essa lista de autorizações tem como predefinição o diretório pessoal do utilizador do servidor, e é recusada a navegação acima de uma raiz.

  1. Abra Definições → Espaço de trabalho → Repositórios (/workspaces/<id>/settings/workspace/repositories).
  2. Clique em Adicionar repositório.

A caixa de diálogo é um navegador navegável pelo sistema de ficheiros do servidor, não pelo seu. O fluxo é o mesmo no computador, na web e no telemóvel, porque um seletor de pastas nativo escolheria uma pasta na máquina errada.

  1. Navegue dentro das raízes configuradas do servidor. As pastas que são checkouts git são assinaladas.
  2. Assinale quantas quiser. A seleção mantém-se enquanto navega, pelo que pode reunir checkouts de várias pastas.
  3. Registe-os num único lote.

Uma escolha falhada nunca descarta o resto do lote — recebe os ids que foram criados e um erro por caminho para cada um que foi recusado. Voltar a registar um caminho já presente neste espaço de trabalho devolve o repo existente em vez de criar um duplicado.

Cada repo registado aparece na lista com o seu owner/name, um distintivo com o nome da sua forge e o seu caminho no servidor. Os repos do GitHub mostram também o avatar do proprietário; as outras forges não têm um URL de avatar de proprietário que se possa inferir, por isso recorrem às iniciais.

O distintivo da forge é importante num espaço de trabalho misto: dois repos podem chamar-se ambos acme/web em forges diferentes, e comportam-se de forma diferente — o que uma revisão pode fazer e para onde vai uma ligação.

O registo dispara um evento RepoAdded com âmbito neste espaço de trabalho, que inicia o pipeline index_code para esse checkout. É isso que preenche o grafo de código, para que a pesquisa e a análise de impacto tenham com que responder.

Só são indexados os ficheiros cuja linguagem tenha uma gramática incluída (Dart, JavaScript, TypeScript, TSX, PHP, Python, Rust, Zig, C, C++, Go, Java, Ruby, C#, Swift, Kotlin, R, Assembly, MATLAB e Ada). Consulte Pesquisar código com o grafo de código.

Cada linha tem um botão Indexar código. Clique nele para voltar a executar o indexador desse checkout; enquanto está a correr, o botão passa a mostrar o progresso com os ficheiros concluídos sobre o total, e um controlo para cancelar. Quando termina, fica com um visto e a contagem de símbolos, ou com um aviso se a execução falhou.

Arraste a pega de uma linha. A ordem que definir é a ordem com que todas as listas de repos na aplicação são lidas.

O ícone de ligação numa linha abre um editor para o proprietário e o nome do repositório GitHub do repo — útil quando o remoto foi renomeado ou transferido.

  1. Abra Definições → Espaço de trabalho → Repositórios.
  2. Clique no ícone do caixote do lixo na linha.
  3. Confirme “Remover repositório do espaço de trabalho?”

A caixa de diálogo explica o que faz: “name será removido deste espaço de trabalho. Os ficheiros locais no disco não são afetados.”

A remoção elimina a linha do repo deste espaço de trabalho e propaga a eliminação às suas linhas do grafo de código — símbolos, arestas, ficheiros e pontos de verificação de indexação —, além de todas as concessões de repo por membro sobre ele, das suas ligações espaço-repo e dos seus registos de checkouts isolados. O mesmo checkout registado noutro espaço de trabalho é uma linha independente e não é afetado. As árvores de trabalho em disco para as quais esses registos apontavam não são destruídas pela eliminação.