Recebendo "fatal: não é um repositório git" ao tentar adicionar remotamente um repositório Git

439

Estou me apresentando ao Git seguindo este tutorial:

Tudo funciona bem até a parte em que o repositório é adicionado à minha máquina local:

git remote add nfsn ssh://USERNAME@NFSNSERVER/home/private/git/REPONAME.git

(Depois de substituir USERNAME, NFSNSERVER e REPOAME pelos nomes corretos), recebo o erro:

fatal: Not a git repository (or any of the parent directories): .git

Você pode me ajudar a superar essa etapa?

Corey
fonte
2
git initmas também certificar-se de nenhum dos seus subdiretórios têm a sua própria .gitpasta
James Oravec

Respostas:

908

Você iniciou um repositório Git local, no qual esse controle remoto deve ser adicionado?

Seu diretório local possui uma .gitpasta?

Tente git init.

Assaf Lavie
fonte
2
Eu já havia feito essa etapa, mas precisei fazê-la novamente depois de configurar minha conta no pátio do motor e instalar o pátio do motor.
AVProgrammer
3
minha .gitpasta se foi. É git inito mesmo que excluir a pasta do repositório e, em seguida git clone .... Todos necessidade I a fazer é umpull
Francisco Corrales Morales
3
@FranciscoCorralesMorales se sua .gitpasta desaparecer, você poderá executar git initnovamente para criar uma nova. Você precisará adicionar novamente um controle remoto antes de poder retirá-lo.
3
Eu estava recebendo o mesmo erro ao enviar alterações do sistema local. Tentei git init e funcionou. Obrigado!
Rbashish
6
o meu tem .git e eu já tinha feito o git init, mas recebo um erro #jalal@klein:~/computer_vision/py-faster-rcnn$ git add -A fatal: Not a git repository: caffe-fast-rcnn/../.git/modules/caffe-fast-rcnn
Mona Jalal
85

Você receberá esse erro se tentar usar um comando Git quando seu diretório de trabalho atual não estiver em um repositório Git. Isso ocorre porque, por padrão, o Git procurará um .gitdiretório de repositório (dentro da raiz do projeto?), Como apontado pela minha resposta para "O Git não mostrará log, a menos que eu esteja no diretório do projeto" :

De acordo com a documentação oficial do Linux Kernel Git , GIT_DIR[uma variável de ambiente] está configurada para procurar um .gitdiretório (no diretório de trabalho atual?) Por padrão:

Se a GIT_DIRvariável de ambiente estiver configurada, ela especificará um caminho a ser usado em vez do padrão .gitpara a base do repositório.

Você precisará cdentrar no repositório / cópia de trabalho ou não inicializou ou clonou um repositório. Nesse caso, você precisa inicializar um repositório no diretório em que deseja colocá-lo:

git init

ou clonar um repositório

git clone <remote-url>
cd <repository>
Comunidade
fonte
13
+1 por mencionar GIT_DIR. dentro de ganchos em um repositório vazio, GIT_DIR está definido como '.' em vez de '.git'.
commonpike
+1 para git init. Depois de ler a sua resposta, eu usei isso várias vezes em repositórios que eu fiz clone, mas não foram reconhecidos. Assim, parece ser seguro quando executado a partir de uma árvore de diretórios que é suposto ser um git repository, tem todos os arquivos no diretório git, mas está afirmando não serfatal: Not a git repository (or any parent up to mount point
ElderDelp
34

Meu problema foi que, para alguns soluços no meu sistema operacional, qualquer comando no meu repositório local terminou com "fatal: não é um repositório git (ou qualquer um dos diretórios pai): .git", com o comando fsck incluído.

O problema estava vazio no arquivo HEAD .

Consegui encontrar o nome real da filial em que trabalhei em .git / refs / heads e fiz o seguinte:

echo 'ref: refs/heads/ML_#94_FILTER_TYPES_AND_SPECIAL_CHARS' > .git/HEAD

Funcionou.

Marcin TP zyuczyński
fonte
2
Meu arquivo cabeça era por qualquer motivo corrompido, então eu tive tor restaurá-lo e corrigiu o problema
Steven
1
Você é um ótimo amigo. Economizei uma tonelada de tempo
Vaibhav Sah
Este foi o meu problema também. Obrigado
Carlos Rafael Ramirez
3
Eu tive o Visual Studio aberto durante uma rebase do git e o Visual Studio notou uma alteração no arquivo e logo depois tive uma tela azul da morte. Após a reinicialização .git / HEAD foi preenchida com nulos e quando eu substituí-los com um hash completa (5621afeffbabed40e3f386676068c45643644b7d) leu em algum lugar como .git \ refs \ remotas \ origem \ mestre, git começou a trabalhar novamente eu também precisava stackoverflow.com/questions / 1115854 /… como isso me disse para excluir .git / index e eu precisava remover .git / index.lock antes de fazer o git reset. Tudo bem agora
Ivan
1
Quase perdi a esperança de recuperar meu trabalho. Apenas copio e colo sua solução, e isso fez mágica. Obrigado
Mukesh Kumar
17

NOTA: isso não responde ao problema comum, que era o problema do OP, mas ao problema diferente em que essa mensagem de erro pode aparecer. Eu não estava com vontade de fazer uma nova pergunta apenas para escrever esta resposta, diga-me se eu deveria fazer isso: P

Cheguei à situação, provavelmente devido a alguma corrupção de um certo travamento que tive, que recebi esse erro mesmo quando .gitexistia.

smar@aaeru ~/P/Nominatim> git status
fatal: Not a git repository (or any of the parent directories): .git
smar@aaeru ~/P/Nominatim [128]> ls .git
COMMIT_EDITMSG  config*  FETCH_HEAD  HEAD  index  logs/  modules/  objects/  ORIG_HEAD packed-refs

Como não tinha nada que realmente precisasse ser preservado, segui o caminho fictício e fiz ...

smar@aaeru ~/P/Nominatim [128]> git init
Reinitialized existing Git repository in /home/smar/Projektit/Nominatim/.git/

Ainda não está funcionando, como por exemplo git logretorna fatal: bad default revision 'HEAD'. Os controles remotos estavam lá, então eu fiz git fetch --alle depois apenas git reset --hard origin/masterpara chegar ao estado em que o repositório estava anteriormente.

Note-se que se houver algumas alterações não confirmadas, você pode vê-los com git status, git diffe assim por diante. Então apenasgit diff yourfile > patch antes de executar a redefinição.

Pelo menos para mim, o reflog ( git reflog) desapareceu completamente. Portanto, se você fizer a redefinição e houver algumas alterações que você deseja impedir, não tenho certeza de que você poderá recuperá-las após a redefinição. Portanto, verifique se você tem todas as alterações que não pode perder, copiando o clone antes de tentar isso.

Smar
fonte
Eu entendi o problema. E tentei da maneira que o @Smar mencionou, mas o mesmo resultado "fatal ....". Então, o que o próximo a fazer? alguma sugestão?
Chaos
1
Esse problema ocorreu ao usar o Visual studio git inite git fetch --allcorrigiu o problema.
Morse
7
$ git status
fatal: Not a git repository:

Basta digitar o seguinte no cmd ou git shell ou em qualquer outro terminal:

$ git init
der_michael
fonte
6

Esse problema me ocorreu depois que mudei a localização de um projeto git no sistema de arquivos. Quando executei alguns comandos git, ocorreu o erro, por exemplo:

$ git status
fatal: Not a git repository: /home/rospasta/path_old/gitprojecta/.git/modules/.travis

Eu encontrei em /home/rospasta/path_old/gitprojecta/.travis/.git caminho absoluto da localização antiga do projeto foi escrito. A atualização manual desse caminho do novo local resolveu o problema para mim.

Portanto, meu problema pode ou não ser um problema do git, mas HTH.

IsaacS
fonte
5

Caso isso ajude alguém, recebi esta mensagem de erro após excluir acidentalmente .git / objects /

fatal: Não é um repositório git (ou qualquer um dos diretórios pai): .git

Restaurar resolveu o problema.

eduherminio
fonte
4

Na linha de comandos / CLI, você receberá esse erro se o diretório atual NÃO for o repositório. Então, você precisa primeiro CD no repositório.

sid smith
fonte
4

Provavelmente tarde demais, mas outra solução que pode ajudar futuros visitantes. Primeiro exclua o .gitdiretório antigo -

rm .git

Em seguida, inicialize o repositório git novamente

git init
kevthanewversi
fonte
6
Deve-se notar que isso destrói todos os metadados do git, como confirmações. Você manterá seus dados, mas o Git "começará de novo" - isso pode não ser uma coisa boa.
Joseph A.
1
@ Joseph: você está certo, isso é ótimo. Existe uma solução melhor que você pode sugerir? Eu recebo o fatalerro mesmo que a .gitpasta exista.
Hassan Baig
Mas ei, os commits já não estão no repositório remoto? Ou o que você realmente precisa dos commits no seu HD / localmente para ...? @JosephA.
kevthanewversi
Porque eu estou pensando que você ainda pode fazer coisas como git revert, git reset sem ter as informações de confirmação localmente ... certo? @JosephA.
kevthanewversi
1
Isso está limpando tudo! Provavelmente a pior maneira de resolver isso.
Richard Lalancette
4

Parece que você não está indo para sua pasta específica. Por exemplo, se estou trabalhando em um projeto chamado bugsBunny e ele é salvo na pasta d: / work: code, primeiro você precisa ir para essa pasta usando o cd d: / work / code / bugsBunny, depois você deve pode continuar usando seus comandos git.

Vikrant singh
fonte
4

Mesmo eu tive o mesmo problema. Eu escrevi um shell script que fará backup de todos os meus códigos no repositório Git nos dias úteis da semana às 17:55, usando o crontab. vendo os logs do cron, encontrei o problema mencionado acima.

o problema acima ocorre apenas quando você está tentando executar comandos git a partir de um diretório não-gir (ou seja, de outro diretório que não seja a cópia de trabalho). para corrigir este add -C <git dir>no comando git você está executando tal que git statusserá git -C /dir/to/git statuse git add -Aserá git -C /dir/to/git -A.

Mani
fonte
3

No meu caso, usei o Tortoise SVN e cometi o erro de também usar as funções GIT do Visual Studio ao mesmo tempo. Isso fez o Visual Studio bloquear o arquivo HEAD dentro da pasta .git para que nem o VS nem o Tortoise pudessem acessar o repositório e recebi o erro "fatal: Not a git repo ..." nos dois aplicativos.

Solução:

  1. Vá para dentro da pasta .git e renomeie "HEAD.lock" para apenas "HEAD"
  2. Decida por um aplicativo de administrador do GIT e não toque no outro
Adrian Rosca
fonte
3

Para isso, você precisa digitar um comando que está ausente nos comandos bitbucket

Por favor, tente git init.

VIKAS KOHLI
fonte
2

no meu caso, tive o mesmo problema enquanto tento qualquer comando git (por exemplo, status git) usando o Windows cmd. Então, o que eu faço é depois de instalar o git for window https://windows.github.com/ nas variáveis ​​ambientais, adicione o caminho da classe do git na variável "PATH". normalmente o git será instalado em C: / user / "nome de usuário" / appdata / local / git / bin e adicione isso no PATH na variável ambiental

e mais uma coisa no cmd, vá para o seu repositório git ou cd, para onde seu clone está na sua janela, em geral eles serão armazenados nos documentos em github cd Document / Github / yourproject, após o qual você poderá ter quaisquer comandos git

obrigado

keyo
fonte
2

Vá para a pasta de origem onde o repositório local está armazenado, por exemplo, o meu é encontrado em c: / GitSource, clique com o botão direito do mouse na pasta, clique em git bash aqui e, em seguida, em status do git ....

wesley7
fonte
2

GIT_DIR deve estar desabilitado: unset GIT_DIR

okwap
fonte
2

No meu caso, o arquivo .git / HEAD foi corrompido (continha apenas pontos). Então eu editei e substituí seu conteúdo por:

ref: refs/heads/master

e começou a funcionar novamente.

Cryss
fonte
1

Para mim, isso estava relacionado à propriedade malformada no meu .git/caminho. rootpossuído .git/HEADe .git/index, impedindo que o jenkinsusuário execute o trabalho.

Hugh Esco
fonte
1
Isso não parece ser reproduzível na linha de comando. Depois de definir a propriedade de .git/HEADe .git/indexpara root:root, ainda consigo adicionar controles remotos sem erros. Quando eu alterar a propriedade de todo o .gitdiretório para root, eu recebo um erro diferente: error: could not lock config file .git/config: Permission denied.
Kyle Strand
1

Abaixo, o erro parece que o Gits não encontrou o arquivo .git no diretório atual, lançando uma mensagem de erro.

Portanto, mude para diretório para diretório de repositório em que você fez o check-out do código do git e, em seguida, execute este comando.

  • $ git checkout
Ajay Kumar
fonte
1

No meu caso, descobri que o git no Windows diferenciava maiúsculas de minúsculas da letra da unidade em algum momento.

Após a atualização do git binary no Windows CLI, os comandos que costumavam funcionar pararam. por exemplo, o caminho no script era D : \ bla \ file.txt enquanto o comando git aceitava apenas d : \ bla \ file.txt

ilane
fonte
1

O git estava funcionando bem e, de repente, começou a mostrar essa fatal: Not a git repository (or any of the parent directories): .gitmensagem.

Para mim, não tenho certeza do que estava corrompido na pasta .git, fiz git clone ** newfoldere copiei toda a pasta .git na minha pasta corrompida / antiga, onde estava fazendo alterações antes de o git começar a mostrar a mensagem de erro ..

Tudo voltou ao normal e o git também reconheceu meus arquivos alterados / não faseados.

Neel
fonte
0

restaurar os .git/ORIG_HEADe outros arquivos raiz .git repo

Eu recebi esse erro depois de restaurar a partir do backup, aparentemente os arquivos contidos na raiz do diretório .git não chegaram ao destino, mas todas as subpastas o fizeram no começo, e achei que o repositório estava intacto.

Corrigi-o restaurando os arquivos raiz.

AndrewD
fonte
0

Eu tive esse problema com o plugin Jenkins Git após problemas de autenticação com o GitLab. Jenkins estava relatando 'hudson.plugins.git.GitException: [...] stderr: GitLab: O projeto que você estava procurando não pôde ser encontrado. fatal: Não foi possível ler do repositório remoto. '

No entanto, se eu fiz um 'git clone' ou 'git fetch' direto da caixa Jenkins (linha de comando), ele funcionou sem problemas.

O problema foi resolvido excluindo o diretório inteiro / espaço de trabalho na pasta de trabalhos Jenkins para esse trabalho específico, por exemplo,

rm -Rf $JENKINS_HOME/jobs/myJenkinsJob/workspace/

Presumivelmente, a pasta .git local ficou obsoleta / corrompida?

GreensterRox
fonte
0

Isso também pode ser devido a permissões. Verifique as permissões de proprietário / grupo e verifique se você possui permissões adequadas para acessar esses dados. No meu caso, me deparei com esse erro ao executar o "status git" em um repositório cuja propriedade foi definida como root: root. A execução de "status git" como raiz resolveu meu problema. Como alternativa, se você não deseja que a propriedade do usuário / grupo seja root: root, mostre o repositório para algo ao qual você tenha acesso.

EliT
fonte
0

Eu tive esse problema e o corrigi adicionando o arquivo README.md

Supun Kavinda
fonte