Git
Controle de versão que roda na sua máquina. Tira uma fotografia — o commit — do projeto a cada mudança e registra quem alterou, o que alterou e por quê. É um programa de linha de comando e funciona sem internet.
Site oficial do Git
Um caminho completo, do primeiro git --version até o Pull Request aprovado pelo
time. Escrito para analistas de dados e desenvolvedores Power BI que estão
começando com Git.
Quatro ferramentas independentes que, juntas, resolvem o problema mais comum de qualquer equipe de BI: saber qual é a versão certa do relatório.
Controle de versão que roda na sua máquina. Tira uma fotografia — o commit — do projeto a cada mudança e registra quem alterou, o que alterou e por quê. É um programa de linha de comando e funciona sem internet.
Site oficial do GitA nuvem onde os repositórios vivem. O Git cuida do histórico local; o GitHub hospeda esse histórico para o time inteiro acessar o mesmo projeto, com Pull Requests e revisão de código.
Acessar o GitHubEditor gratuito da Microsoft. Nele você abre a pasta do projeto PBIP, vê exatamente o que mudou e executa os comandos Git no terminal integrado — tudo numa única janela.
Baixar o VS CodeO formato de projeto do Power BI Desktop. Em vez de um arquivo binário fechado, salva o relatório e o modelo semântico como uma pasta de arquivos de texto (JSON e TMDL). É a peça que torna tudo possível: texto é o que o Git sabe versionar.
Documentação do PBIPA distinção mais importante do guia. Os dois formatos abrem no Power BI Desktop e geram o mesmo relatório, mas só o PBIP funciona com controle de versão.
| Característica | .PBIX | .PBIP |
|---|---|---|
| Formato | Arquivo único binário | Pasta com arquivos de texto (JSON e TMDL) |
| O Git compara mudanças? | Não — só sabe dizer que o arquivo mudou | Sim — mostra linha a linha |
| Dois analistas ao mesmo tempo | Um sobrescreve o outro | Cada um numa branch, merge no fim |
| Melhor uso | Distribuir e arquivar | Trabalho em equipe e versionamento |
Você continua abrindo o projeto no Power BI Desktop e publicando no Serviço normalmente. Muda apenas como o projeto é gravado em disco.
Seis passos, uma vez por máquina.
Em github.com/signup, use o e-mail corporativo. O nome de usuário aparece em todos os commits e Pull Requests, então escolha algo profissional.
O GitHub não aceita senha na linha de comando. O Git Credential Manager já vem
com o instalador do Git para Windows: no primeiro git push abre uma janela do
navegador, você entra na conta e as credenciais ficam salvas. A alternativa é gerar um
Personal Access Token com escopo
repo e usá-lo no lugar da senha.
Obrigatória em muitas organizações. Configure em Settings → Password and authentication.
Baixe em git-scm.com/downloads. Os padrões servem para quase tudo, mas confirme a tela do PATH.
Baixe em code.visualstudio.com e marque "Adicionar ao menu de contexto do Explorer", que permite abrir qualquer pasta no editor com o botão direito.
Prefira a versão da Microsoft Store, que se atualiza sozinha. Depois habilite o
formato em Arquivo → Opções e configurações → Opções → Recursos de Versão
Preliminar → Power BI Project (.pbip) save option e reinicie o programa.
Se "Power BI project files (*.pbip)" não estiver na lista de tipos ao salvar, o recurso não foi habilitado ou o Desktop não foi reiniciado.
No VS Code, Ctrl+Shift+X e instale:
Cria, revisa e aprova Pull Requests dentro do editor.
Sugere código DAX/M e escreve mensagens de commit.
Realce de sintaxe para os arquivos .tmdl do modelo.
Ícones por tipo de arquivo, para não se perder na árvore do PBIP.
Ctrl+Shift+X).
No PowerShell ou no terminal do VS Code (Ctrl+'), um número de versão confirma que
está tudo certo.
PS C:\> git --version
git version 2.47.0.windows.1
O Git não entrou no PATH. Feche todos os terminais e o VS Code, abra de novo e teste. Se persistir, reinstale marcando a opção de PATH recomendada.
O Git precisa saber quem você é para assinar os commits. Roda uma única vez por
computador: a flag --global vale para todos os projetos.
git config --global user.name "Seu Nome"
git config --global user.email "seu@email.com"
git config --list
Vale padronizar outros três comportamentos que evitam dor de cabeça em equipe:
# branch principal chamada "main" em todo projeto novo
git config --global init.defaultBranch main
# VS Code como editor padrão de mensagens e conflitos
git config --global core.editor "code --wait"
# evita o aviso de divergência no git pull
git config --global pull.rebase false
git config --list confirma nome, e-mail e branch padrão.
Quatro passos: abrir no VS Code, inicializar o Git, criar o .gitignore e fazer o
primeiro commit.
Ao salvar como .pbip, o Power BI Desktop não grava um arquivo: grava uma
pasta, com o relatório e o modelo semântico separados, em texto puro.
Arquivo → Salvar como e escolha Power BI project files (*.pbip).
Esta é a árvore que o Git vai versionar:
Abra a pasta raiz, a que contém o .pbip — não uma subpasta.
cd "C:\Projetos\Vendas-LATAM"
code .
No terminal integrado (Ctrl+'), o comando cria a subpasta oculta .git,
onde todo o histórico fica guardado.
PS ~\Vendas-LATAM> git init
Initialized empty Git repository in C:/Projetos/Vendas-LATAM/.git/
.git
Ela é o repositório. Apagá-la remove todo o histórico local de uma vez.
.gitignoreCache e credenciais não devem ir para o repositório. Crie o arquivo na raiz com este conteúdo:
# --- Power BI ---------------------------------------
# cache local do modelo (pesado e específico da máquina)
.pbi/localSettings.json
.pbi/cache.abf
**/.pbi/localSettings.json
**/.pbi/cache.abf
# não versione o binário junto do projeto
*.pbix
# --- Credenciais e dados ----------------------------
*.env
credenciais*
*.xlsx
*.csv
# --- Sistema operacional ----------------------------
Thumbs.db
desktop.ini
.DS_Store
# --- Temporários ------------------------------------
~$*
*.tmp
O gitignore.io monta o arquivo a partir das suas tecnologias. Combine o resultado com as regras de Power BI acima.
git add . coloca as alterações na área de preparo e git commit grava a
fotografia no histórico.
git add .
git commit -m "Primeiro commit"
[main (root-commit) a1b2c3d] Primeiro commit
24 files changed, 1843 insertions(+)
O histórico já existe na sua máquina. Agora ele precisa de um endereço na nuvem para a equipe acessar o mesmo projeto.
Minúsculas, sem acentos, com hífens: vendas-latam-pbip. Ele entra na URL e é difícil de mudar depois.
Só quem você convidar acessa. É a escolha certa para dados e regras de negócio da empresa.
Visível para a internet inteira. Use apenas em estudo, demonstração ou open source.
Um repositório público expõe medidas DAX, nomes de tabelas, strings de conexão e qualquer credencial esquecida num arquivo. Em ambiente corporativo, sempre privado.
Vale preencher o README.md, que o GitHub exibe na página do repositório: o que o
relatório mostra, quais são as fontes de dados, qual .pbip abrir e quem aprova os
Pull Requests.
Depois de criar, o GitHub mostra a URL na caixa Quick setup. O origin é apenas
um apelido para ela — a convenção universal para "o repositório principal na nuvem".
# HTTPS: recomendado para começar, usa o Credential Manager
git remote add origin https://github.com/bi-latam/vendas-latam-pbip.git
git remote -v
# SSH: exige cadastrar uma chave, mas não pede senha
# git@github.com:bi-latam/vendas-latam-pbip.git
A flag -u vincula a branch local main à origin/main. Depois
disso, um simples git push já sabe para onde enviar.
# garante que a branch local se chama main
git branch -M main
git push -u origin main
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
Acontece quando você marcou "Add a README" ao criar o repositório: o remoto tem um commit que
você não possui. Traga esse commit antes de empurrar os seus com
git pull origin main --allow-unrelated-histories.
git clone baixa o projeto e todo o histórico para uma máquina nova. É uma
operação de primeira vez.
Carla entrou no time hoje e não tem nada da pasta do projeto. Depois de receber acesso ao repositório, três comandos resolvem:
# 1. vá para a pasta onde os projetos ficam
cd "C:\Projetos"
# 2. clone: cria a pasta já com o .git dentro
git clone https://github.com/bi-latam/vendas-latam-pbip.git
# 3. entre e abra no VS Code
cd vendas-latam-pbip
code .
Carla agora tem os arquivos, o histórico completo e o origin configurado.
Esta é a confusão mais frequente de quem está começando: clone não é atualizar.
Clonar cria uma segunda pasta independente, e aí você edita a errada, perde commits locais que
ainda não subiram e não vê as branches em andamento. Quem já tem o projeto usa
git pull, que traz apenas o que mudou.
# ver em que branch você está e se há algo pendente
git status
# trazer as novidades do remoto para a branch atual
git pull
# só consultar o que mudou, sem alterar seus arquivos
git fetch
pull todos os dias.
Se a linha de comando ainda intimida, o GitHub Desktop faz clone, commit, pull e push por botões, executando os mesmos comandos por baixo.
.tmdl, dá para revisar uma medida DAX antes de commitar.
O ciclo que você vai repetir todos os dias, sempre na mesma ordem.
1. Criar branch
git checkout -bIsola sua tarefa do resto do time
2. Alterar
Power BI DesktopEdite, salve e feche o projeto
3. Verificar
git statusConfira o que mudou antes de gravar
4. Adicionar
git add .Prepara os arquivos para o commit
5. Commitar
git commit -mGrava a fotografia no histórico
6. Enviar
git push originPublica a branch no GitHub
Nunca trabalhe direto na main, e parta sempre de uma base atualizada.
git checkout develop
git pull origin develop
git checkout -b feature/novo-kpi
Crie a medida, ajuste o visual, salve (Ctrl+S) e feche o Desktop.
Fechar importa: arquivos abertos podem gerar alterações "fantasmas".
O comando que você vai digitar mais vezes na vida. Ele responde em que branch você está e o que mudou.
PS ~\Vendas-LATAM> git status
On branch feature/novo-kpi
Changes not staged for commit:
modified: Vendas.SemanticModel/definition/tables/Vendas.tmdl
modified: Vendas.Report/definition/pages/pages.json
Prefira a mensagem com prefixo: fica muito mais fácil ler o histórico depois.
# tudo o que mudou, ou um arquivo específico
git add .
git commit -m "feat: criação do KPI LATAM" -m "Medida DIVIDE(Receita, Meta) e card na página Visão Geral."
git push origin feature/novo-kpi
Uma branch é uma linha de trabalho independente: você experimenta, quebra e refaz sem afetar o relatório que está em produção.
mainA versão oficial. Só recebe código aprovado, sempre via Pull Request. Deve ser protegida no GitHub.
developA integração do time. Reúne as features concluídas para teste conjunto. É a base de onde nascem as features.
feature/*Uma tarefa, uma branch. Nasce de develop e volta para ela. Exemplo: feature/kpi-margem.
hotfix/*Correção urgente em produção. Nasce da main e volta para main e develop.
release/*Preparação da entrega. Congela o escopo para ajustes finais. Exemplo: release/2026.09.
Use só main + feature/*. Adicione develop e release quando houver homologação formal.
develop e volta para ela, enquanto o hotfix parte
direto da main.
# listar branches locais (o * marca a atual) e todas, com o remoto
git branch
git branch -a
# criar e mudar, ou apenas mudar
git checkout -b feature/dashboard-latam
git checkout develop
# renomear a branch atual
git branch -m feature/nome-correto
# apagar local e no GitHub
git branch -d feature/dashboard-latam
git push origin --delete feature/dashboard-latam
tipo/descricao-curta.git pull origin develop a cada dia ou dois.teste, minha-branch ou ana.main "porque era rápido".# bons nomes de branch
feature/kpi-margem-latam
fix/relacionamento-calendario
hotfix/medida-ytd-duplicando
release/2026.09
# nomes que atrapalham a equipe
teste2
ana
correcoes-finais-v3
O Pull Request (PR) é um pedido formal de merge de uma branch em outra. É onde a revisão por pares acontece — e onde o PBIP mostra seu valor.
Na prática, o PR é uma página no GitHub que reúne os commits, o diff de cada arquivo, os comentários da equipe e o botão que executa o merge. Para um projeto Power BI, isso significa que um colega consegue ler a medida DAX que você escreveu, comentar na linha específica e sugerir ajustes antes de a mudança chegar ao relatório oficial.
main ainda.git push origin feature/novo-kpi
Ou vá ao repositório e clique em Compare & pull request.
base → compare
base é para onde o código vai (develop); compare é de
onde vem (feature/novo-kpi). Trocar as duas é o erro mais comum de quem começa.
A descrição responde o que, por que e como testar. Marque pelo menos um colega em Reviewers e clique em Create pull request.
## O que muda
- Nova medida `[KPI LATAM]` = DIVIDE( [Receita], [Meta] )
- Card do KPI na página "Visão Geral"
## Por que
Demanda #38: a diretoria comercial precisa acompanhar o
atingimento de meta por país no painel de receita.
## Como testar
1. `git checkout feature/novo-kpi` e abra o `Vendas.pbip`
2. Atualize os dados e vá para a página "Visão Geral"
3. Confira o card: deve exibir 104,2% para set/2026
## Checklist
- [x] Testado no Power BI Desktop
- [x] Sem credenciais ou dados sensíveis no commit
- [ ] Validado pelo time de negócio
Salve o modelo acima em .github/pull_request_template.md. O GitHub passa a
preencher a descrição de todo novo Pull Request.
Merge traz os commits de uma branch para outra. O Git tenta fazer isso sozinho e consegue na maioria das vezes.
# 1. vá para a branch que vai RECEBER as alterações
git checkout develop
# 2. garanta que ela está atualizada
git pull origin develop
# 3. traga a branch de origem
git merge feature/novo-kpi
Você entra na branch de destino e pede o merge da branch de
origem. Estar na feature e rodar git merge develop
faz o contrário — o que também é útil, para atualizar sua branch.
git merge.
Acontece quando a branch de destino não recebeu commits novos desde que a feature
nasceu: o Git só move o ponteiro para a frente e o histórico fica linear. Para registrar
explicitamente a integração, force um commit de merge com
git merge --no-ff feature/novo-kpi.
O caso mais comum em equipe: as duas branches avançaram, mas em arquivos ou linhas diferentes. O Git junta tudo automaticamente e cria um commit com dois pais, preservando as duas histórias.
O Git para quando as duas branches alteraram a mesma linha do mesmo arquivo. Nada é perdido nem sobrescrito: a decisão fica com você, e o próximo capítulo mostra como resolver.
Auto-merging Vendas.SemanticModel/definition/tables/Vendas.tmdl
CONFLICT (content): Merge conflict in Vendas.SemanticModel/definition/tables/Vendas.tmdl
Automatic merge failed; fix conflicts and then commit the result.
| Opção | O que faz | Quando usar |
|---|---|---|
| Create a merge commit | Mantém os commits da branch e adiciona um commit de junção. | Padrão recomendado: preserva o rastro de quem fez o quê. |
| Squash and merge | Comprime todos os commits da branch em um só. | Quando a branch tem muitos commits de ajuste. |
| Rebase and merge | Reaplica os commits no topo da base, sem commit de junção. | Histórico linear, mas reescreve hashes: evite com time iniciante. |
Com o projeto aberto, o Desktop pode reescrever arquivos durante a operação e deixar tudo em
estado inconsistente. Depois do merge, abra o .pbip e confira o relatório.
Conflito não é erro nem defeito: é o Git avisando que duas pessoas tiveram ideias diferentes sobre a mesma linha. Resolver é escolher — e testar.
Ana e Bruno editaram a mesma medida [KPI LATAM] no Vendas.tmdl, cada um na
sua branch.
PS> git pull origin develop
Auto-merging Vendas.SemanticModel/definition/tables/Vendas.tmdl
CONFLICT (content): Merge conflict in .../tables/Vendas.tmdl
Automatic merge failed; fix conflicts and then commit the result.
# ver quais arquivos precisam de decisão
PS> git status
both modified: Vendas.SemanticModel/definition/tables/Vendas.tmdl
O Git escreve as duas versões dentro do arquivo. Entre <<<<<<< HEAD e
======= fica a sua versão; entre ======= e
>>>>>>>, a que está chegando da outra branch. Os
marcadores não são código: são sinalização temporária que você precisa remover.
measure 'Receita' = SUM( Vendas[Valor] )
<<<<<<< HEAD
measure 'KPI LATAM' =
DIVIDE( [Receita], [Meta] )
formatString: 0.0%
=======
measure 'KPI LATAM' =
DIVIDE( [Receita YTD], [Meta YTD] )
formatString: 0.00%
>>>>>>> develop
O VS Code detecta os marcadores e oferece botões no topo do arquivo:
Mantém a sua versão.
Mantém a versão do colega.
Fica com as duas. Pode duplicar medidas no TMDL.
O mais comum em DAX: combinar as duas na versão correta.
No exemplo, a versão correta era uma terceira: [Receita YTD] com formatação de uma
casa decimal. Um conflito quase sempre revela divergência de entendimento, não
um problema técnico.
measure 'KPI LATAM' =
DIVIDE( [Receita YTD], [Meta YTD] )
formatString: 0.0%
description: Atingimento de meta acumulado no ano.
Se sobrar um <<<<<<< no TMDL ou no JSON, o Power BI Desktop
se recusa a abrir o projeto. Busque por <<< antes de commitar.
Arquivo resolvido não significa relatório funcionando. Abra o projeto e valide:
.pbip abre e o modelo atualiza sem erro de DAX.# sinaliza ao Git que o arquivo está resolvido
git add Vendas.SemanticModel/definition/tables/Vendas.tmdl
git commit -m "merge: resolve conflito na medida KPI LATAM"
git push origin feature/novo-kpi
# cancela o merge e volta tudo ao estado anterior
git merge --abort
# lista apenas os arquivos em conflito
git diff --diff-filter=U
Divida as tarefas por área do projeto, faça git pull todos os dias e mantenha as
branches curtas. Conflito de duas semanas é sempre mais difícil que conflito de duas horas.
Um cenário real: dois analistas, um projeto, uma semana de trabalho. Ana cuida do modelo semântico; Bruno cuida dos visuais.
O clone é uma vez por máquina; a branch nasce sempre de uma develop atualizada.
git clone https://github.com/bi-latam/vendas-latam-pbip.git
cd vendas-latam-pbip
git checkout develop
git pull origin develop
# Ana
git checkout -b feature/kpi-margem
# Bruno
git checkout -b feature/pagina-comparativo
Commits pequenos, um por ideia concluída. Não espere o fim da semana.
git add .
git commit -m "feat: medida de margem bruta por país"
git push origin feature/kpi-margem
Ana abre PR de feature/kpi-margem para develop e coloca Bruno como
revisor; Bruno faz o mesmo com a branch dele. Revisão cruzada: cada um olha o
trabalho do outro.
Aprovados, os dois PRs entram em develop. O primeiro merge costuma ser
fast-forward e o segundo gera um merge commit, o que é esperado. Depois que a
develop é validada pelo negócio, abre-se um PR dela para a main, que
passa a ser a versão oficial.
| Comando | O que faz | Altera seus arquivos? |
|---|---|---|
git fetch |
Consulta o remoto e baixa as informações sobre commits e branches novas. | Não. É a forma segura de espiar antes de integrar. |
git pull |
Faz fetch e já integra na sua branch atual. |
Sim. Feche o Power BI Desktop antes. |
git push |
Envia seus commits locais para o repositório remoto. | Altera o remoto, não o seu local. |
# === TODA MANHÃ, antes de abrir o Power BI ===
git status
git pull origin develop
# === A CADA DOIS DIAS, alinhe sua feature com a base ===
git checkout feature/kpi-margem
git pull origin develop
# === DEPOIS DE UM MERGE APROVADO ===
git checkout develop
git pull origin develop
git branch -d feature/kpi-margem
Se Ana mexe só em *.SemanticModel/ e Bruno só em *.Report/, os
conflitos praticamente desaparecem.
Sete acordos simples que transformam Git de "ferramenta que atrapalha" em processo que a equipe nem percebe mais.
É o pré-requisito de tudo: só com PBIP existe diff, revisão e merge de verdade.
Inclusive as suas. Proteja a main exigindo pelo menos uma aprovação.
Um git pull origin develop a cada dois dias mantém o conflito pequeno.
Um commit = uma ideia concluída. "Criei a medida" e "ajustei o visual" são dois commits.
A mensagem é para o colega de dentro de seis meses, que pode ser você mesmo.
Quem revisa verifica a lógica DAX, a nomenclatura e o impacto nos visuais.
git pull é o primeiro comando do dia, antes de abrir o Power BI Desktop.
O padrão Conventional Commits usa um prefixo que diz a natureza da mudança, e o histórico passa a se ler como um changelog.
| Prefixo | Quando usar em Power BI | Exemplo |
|---|---|---|
feat | Nova medida, nova página, nova tabela | feat: criação do KPI LATAM |
fix | Correção de cálculo, relacionamento ou filtro | fix: correção da medida YTD |
refactor | Reorganização sem mudar resultado | refactor: reorganização do modelo |
docs | README, descrições de medidas, dicionário de dados | docs: atualização da documentação |
style | Cores, fontes, formatação de visuais | style: padronização das cores dos cards |
perf | Otimização de desempenho do modelo | perf: remoção de colunas não utilizadas |
pull, merge ou troca de branch..gitignore.
O projeto foi aprovado pelo negócio. Falta o último trecho: de develop para
main, e da main para o Serviço do Power BI.
feature → develop (homologação) → main (versão
oficial) → workspace de produção. Cada seta é um Pull Request revisado.
Com o PR de develop para main aprovado, todos alinham a máquina local com
a nova versão oficial — e vale marcar a entrega com uma tag.
git checkout main
git pull
# marca o ponto exato do que foi publicado
git tag -a v1.3 -m "Release 1.3: KPI LATAM e página comparativa"
git push origin v1.3
Se alguém pergunta qual é o relatório certo, a resposta é sempre: o da main.
Apagar a branch não apaga os commits, que já vivem na develop e na main.
Nunca reabra uma branch antiga. Toda demanda nasce de uma develop atualizada.
# apagar a branch local e a do GitHub
git branch -d feature/novo-kpi
git push origin --delete feature/novo-kpi
# limpar referências de branches que já não existem no remoto
git fetch --prune
# === começar a próxima demanda ===
git checkout develop
git pull origin develop
git checkout -b feature/proxima-melhoria
O Microsoft Fabric permite conectar um workspace diretamente a uma branch do GitHub. O merge na
main passa a atualizar o relatório em produção sem ninguém clicar em "Publicar".
Veja a documentação de integração Git do Fabric.
A referência rápida do dia a dia: treze comandos cobrem mais de 95% do trabalho em um projeto Power BI.
| Comando | Descrição | Exemplo real |
|---|---|---|
git init |
Transforma a pasta atual em repositório, criando a subpasta .git. |
git init |
git clone |
Baixa um repositório remoto com todo o histórico. Uma vez por máquina. | git clone https://github.com/bi-latam/vendas-latam-pbip.git |
git status |
Mostra a branch atual e o que mudou. | git status |
git add |
Coloca as alterações na área de preparo. | git add . |
git commit |
Grava as alterações preparadas no histórico, com uma mensagem. | git commit -m "feat: criação do KPI LATAM" |
git push |
Envia os commits locais para o remoto. | git push origin feature/novo-kpi |
git pull |
Baixa e já integra as alterações do remoto na branch atual. | git pull origin develop |
git fetch |
Consulta o remoto sem alterar seus arquivos. | git fetch --prune |
git branch |
Lista, cria, renomeia ou apaga branches. | git branch -a |
git checkout |
Troca de branch, ou cria uma nova com -b. |
git checkout -b feature/novo-kpi |
git merge |
Traz os commits de outra branch para a atual. | git merge feature/novo-kpi |
git log |
Exibe o histórico. Com --oneline --graph fica visual. |
git log --oneline --graph --all |
git remote -v |
Mostra os endereços remotos configurados. | git remote -v |
# descartar alterações de um arquivo (CUIDADO: não tem volta)
git restore Vendas.Report/definition/report.json
# desfazer o último commit, mantendo as alterações nos arquivos
git reset --soft HEAD~1
# guardar temporariamente o que você está fazendo
git stash
git stash pop
# corrigir a mensagem do último commit (antes do push)
git commit --amend -m "feat: mensagem corrigida"
# o histórico de TUDO que você fez: o salva-vidas do Git
git reflog
Copie a pasta do projeto para outro lugar. git restore,
git reset --hard e git clean apagam trabalho que nunca foi commitado,
e o Git não recupera o que nunca viu.
Documentação oficial para consultar quando este guia não for suficiente. Todos os links abrem em nova aba.