Conteúdo
Um Sistema de Controle de Versão (VCS) é uma ferramenta essencial para quase qualquer equipe de desenvolvimento que precisa acompanhar as mudanças no código-fonte. O Git foi desenvolvido em 2005 e hoje é de longe o VCS mais comumente usado por quase todas as equipes de desenvolvimento que precisam criar versões e arquivar seu código-fonte. No artigo de hoje, vamos cobrir alguns dos erros comuns do Git e discutir como você pode evitá-los ou corrigi-los.
fatal: not a git repository (or any of the parent directories)
Este é um dos erros mais comuns, especialmente para iniciantes no Git. Suponhamos que você queira executar git status
em um determinado diretório:
O erro indica que o comando não pode ser executado porque o diretório atual não é um diretório Git. Normalmente, há dois motivos principais pelos quais você pode estar recebendo o erro.
- ou você provavelmente está no diretório errado. Você pode verificar seu diretório de trabalho atual usando
pwd
. É muito comum as pessoas esquecerem de mudar o diretório ao clonar um repositório Git.
fatal: refusing to merge unrelated histories
Outro erro muito comum após git pull
ou git merge
é o mostrado abaixo:
fatal: refusing to merge unrelated histories
Isso geralmente pode acontecer principalmente por dois motivos;
- O diretório
.git
foi corrompido. Este diretório oculto contém informações relevantes para o seu projeto que está sendo controlado por versão (por exemplo, informações sobre commits, repositórios remotos, etc.). Se o diretório estiver corrompido, o git não tem conhecimento do histórico local e, portanto, o erro será relatado ao tentar empurrar ou puxar para / de um repositório remoto. - Você está tentando puxar de um repositório remoto que já tem commits enquanto você também criou um novo repositório localmente e adicionou commits também. Nesse caso, o erro será relatado, já que o Git não sabe como esses dois estão relacionados (eles são interpretados como dois projetos distintos).
Se for esse o caso, você precisará fornecer a bandeira --allow-unrelated-histories
. Por exemplo,
$ git pull origin master --allow-unrelated-histories
Também existe uma chance de ocorrer esse erro ao tentar rebase
e requer um tratamento diferente.
O processo de combinação de commits em um novo commit básico é chamado de rebase. Em outras palavras, rebasing simplesmente muda a base do branch para um commit diferente para que pareça como se você tivesse criado o branch daquele commit em particular. O diagrama abaixo ilustra com precisão como o rebase funciona no Git.
Quando git rebase
falha com este erro, o rebase não é abortado, mas ainda está em andamento. Em vez disso, você pode intervir manualmente.
$ git status
interactive rebase in progress; onto 4321beefdead
Last command done (1 command done):
pick 1234deadbeef1234deadbeef test merge commit
Para resolver o problema, você precisa primeiro merge
e e commit
, para finalmente, forçar rebase
para continuar:
xcrun: error: invalid active developer path
Este é um erro comum para usuários do OSX que é ainda mais frequente quando uma nova versão principal do OSX é feita. O erro é relatado quando você tenta executar qualquer comando git. Por exemplo,
O problema está relacionado à versão do Xcode Command Line Tools que precisa ser atualizada para que o erro seja resolvido. Para fazer isso, abra o terminal e execute:
$ xcode-select --install
A resposta deve ser
xcode-select: note: install requested for command line developer tools
enquanto uma janela pop-up aparecerá na tela solicitando a confirmação de que deseja instalar as ferramentas do desenvolvedor de linha de comando.
Basta clicar em instalar, aguardar a conclusão da instalação e abrir uma nova sessão de terminal. Os comandos Git agora devem funcionar conforme o esperado.
fatal: Unable to create ‘/path/to/.git/index.lock’: File exists.
Quando um processo git falha em um de seus repositórios Git, você pode ver o erro mostrado abaixo ao tentar executar um comando git:
fatal: Unable to create '/path/to/.git/index.lock': File exists.
Se nenhum outro processo git estiver em execução, isso provavelmente significa que um processo git travou neste repositório anteriormente.
Se nenhum outro processo git estiver em execução, você pode corrigir isso rapidamente removendo o arquivo manualmente:
$ rm -f .git/index.lock
error: pathspec did not match any file(s) known to git
Normalmente, quando você cria um novo branch usando, digamos, a IU da web do GitHub e volta ao seu terminal local para finalizar a compra no branch usando:
$ git checkout mybranch
você pode obter este erro
error: pathspec 'mybranch' did not match any file(s) known to git.
Isso geralmente significa que seu repositório local não está atualizado com as informações mais recentes do repositório Git remoto. Para corrigir o problema, você simplesmente precisa buscar as informações do branch recém-criado:
$ git fetch
Agora git checkout
deve funcionar bem.
permission denied (publickey)
Para clonar repositórios remotos em sua máquina local, você precisa se certificar de que configurou corretamente a autenticação.
Se você tentar clonar um repo e a resposta for
$ git clone [email protected]/username:test.git
Initialized empty Git repository in `/path/to/test/.git/`
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Agora, existem potencialmente algumas maneiras de resolver esse problema. A maneira mais fácil é provavelmente usar HTTPS
para clonar o repositório em sua máquina local que não requer validação de chave pública:
$ https://github.com/username/test.git
Alternativamente, se você ainda precisa usar SSH para clonar o repositório, você terá que gerar chaves SSH públicas e privadas para configurar a autenticação adequada. Para fazer isso, certifique-se de seguir as etapas abaixo.
- Navegue até seu
.ssh
diretório local e executessh-keygen
para gerar chaves
$ cd ~/.ssh && ssh-keygen
- Agora você precisa copiar o conteúdo do arquivo gerado
id_rsa.pub
# Linux
$ cat id_rsa.pub | xclip# Windows
$ cat id_rsa.pub | clip
$ git config --global user.name "your-user-name"
$ git config --glocabl user.email [email protected]
E agora você deve conseguir clonar o repositório remoto usando SSH. Para obter mais detalhes, você pode consultar a documentação do GitHub e nunca mais passar perrengue com erros do Git ou pelo menos com esse especifico.
Conclusão
No artigo de hoje, exploramos alguns dos erros comuns do Git. Para cada um deles, discutimos os possíveis motivos que podem estar desencadeando esses erros e também como corrigi-los.
Git é definitivamente uma ferramenta muito poderosa e muito mais complicada do que às vezes pode parecer. A comunidade é ótima e a Internet está cheia de recursos para ajudá-lo a resolver qualquer problema que você possa ter com o Git.
Leia também: Python é eleito a linguagem de programação do ano