git rebase: “erro: não é possível especificar 'arquivo': permissão negada”

342

Estou usando o git e fiz um pequeno commit seguido de um grande. Eu decidi usar git rebasepara esmagar os dois commits juntos antes de empurrá-los. (Eu nunca fiz isso antes.)

Então eu fiz:

git rebase -i HEAD~2

Isso me deu meu editor, onde eu escolhi escolher o commit anterior e esmagar o posterior. Quando salvei, o git disse:

erro: não é possível stat ' filename ': permissão negada

Não foi possível aplicar sha1 para confirmação posterior ... linha de texto inicial para essa confirmação

Agora:

  • Nenhum commit aparece quando eu faço git log.
  • git status me diz que "atualmente não estou em nenhum ramo".
  • Um arquivo é listado como modificado e no índice, e dois arquivos são listados como não rastreados. Meu primeiro commit tinha apenas um arquivo (eu acho) e meu segundo commit tinha uma boa dúzia.

O que aconteceu!? Como faço para corrigir isso?

Ryan Lundy
fonte
10
Por acaso, você está usando o git no Windows?
CB Bailey
Sim. Eu executo os comandos em uma janela do DOS.
Ryan Lundy
2
Você está executando um verificador de vírus? Às vezes, programas de verificação de vírus de baixa qualidade causam problemas como este.
Greg Hewgill
53
Eu tive o problema com o git checkout (portanto, não é possível abortar, conforme sugerido pela resposta aceita), mas fechar todos os meus IDEs me deixou passar. A segunda resposta deve ser a mais aceita
...
11
@IanGrainger, a resposta a que você está se referindo foi postada oito meses após a resposta aceita. Preciso dar uma volta e visitar todas as minhas perguntas a cada poucos meses para alterar potencialmente as respostas aceitas em todas elas? Os botões de votação estão lá por uma razão. Se a resposta mais votada ajudar mais do que a resposta aceita, use-a. Quem está parando você? Mas aceitei a resposta que fiz porque me ajudou e fui eu quem fez a pergunta.
Ryan Lundy

Respostas:

195

Eu só vi esse erro no Windows e o que parece significar é que algo impediu o git de modificar um arquivo no momento em que tentou aplicar um patch.

O Windows tende a conceder aos processos acesso exclusivo aos arquivos quando isso não deveria ser realmente necessário. No passado, os antivírus eram uma fonte de suspeita, mas nunca provei isso conclusivamente.

Provavelmente, a coisa mais fácil a fazer é abortar e tentar novamente, esperando que isso não aconteça na próxima vez.

git rebase --abort

Você pode tentar usar git applye conhecer o que o commit git estava realmente tentando fazer antes de fazer um, git rebase --continuemas com toda a honestidade, eu não recomendaria isso. Na maioria das vezes que eu vi isso tentar, houve uma chance melhor do que até mesmo de que algo fosse acidentalmente perdido ou estragado.

CB Bailey
fonte
6
@Kyralessa: Hmmm, você tentou reiniciar? Se algo persistentemente estiver bloqueando esse arquivo, após uma reinicialização (ou algo um pouco menos drástico que libere o arquivo), você poderá git checkout -- previously-locked-filee poderá voltar a funcionar.
CB Bailey
51
Bem, ainda não sei ao certo o que aconteceu, mas, o melhor que posso dizer, o VS 2010 estava bloqueando o arquivo (estranho porque era um arquivo doc .xml). O Process Explorer não encontrou nada bloqueando esse arquivo, mas depois que saí do VS, consegui usá git checkout-lo para recuperar o arquivo ( git statusele foi excluído) e agora tudo está como antes de tentar rebascar / squash. Talvez eu deva tentar novamente, embora me sinta um pouco enjoado neste momento.
Ryan Lundy
3
Acompanhamento, muitas luas depois: eu não tive esse problema novamente. O rebaseamento funcionou bem, inclusive o rebaseamento interativo. Deve ter sido uma falha momentânea do bloqueio de arquivos do VS.
quer
49
Encerramento Visual Studio 2010 fixa-lo para mim também
Trev
4
Aparentemente, o Atom também bloqueia arquivos. Reiniciar corrigido.
Augustin Bralley 28/11
652

Tente fechar todos os programas que tenham a pasta aberta, como editores, janelas do Explorer, prompts de comando e programas de FTP. Isso sempre corrige o problema para mim no Windows.

Cameron Wright
fonte
72
Eu estava recebendo o mesmo erro. Acabei de fechar o visual studio e tudo funcionou.
92712 jacobsimeon
6
Fechei quase tudo o que eu conseguia pensar antes de me lembrar do conversor WinLess LESS -> CSS escondido em segundo plano.
Michael Martin-Smucker
6
O Visual Studio mantinha um bloqueio em um pacote de pepitas quando tentei mesclar. Fechar o VS funcionou para mim.
CodeHxr
7
A fonte mais comum desse erro, que eu já vi no Windows, é o Visual Studio bloqueando os arquivos. Conforme prescrito, feche o VS antes de alternar ramificações, mesclagem etc.
longda
5
"Eu também" respondo pelo Atom. Parece bloquear arquivos e diretórios; fechá-lo corrige o problema.
ajm 21/07/2015
277

Basta fechar o seu IDE (VISUAL STUDIO / ATOM etc). Pode funcionar

ManJan
fonte
11
No IntelliJ, interromper o serviço Tomcat em execução funcionou para mim. Um pouco mais fácil do que reiniciar o IDE.
Phil Carter
Eu também tinha uma janela do Git Bash aberta - fechamento que funcionava para mim.
Vince I
Qualquer IDE que valha a pena não deve estar bloqueando nada em um repositório ... perfeito !!
LightCC 21/08/19
funciona no código vs
Muhammed Moussa
Bateu esse problema depois de fazer o check-in em uma ramificação temporária usando o Atom no Windows 10. Fechar e reabrir o Atom resolveram o problema para mim.
mickburkejnr 27/04
24

Quando vejo isso na minha máquina, é pior do que apenas um "processo está com o arquivo aberto". A propriedade real do arquivo é aumentada até o ponto em que eu (executando como administrador) só posso acessá-lo após a reinicialização.

O mais próximo que posso dizer, o IIS faz parte do problema. Se eu alternar entre dois ramos principais que exigem muitos arquivos para serem modificados, o git excluirá um arquivo ou diretório (geralmente DLLs) enquanto o IIS estiver tentando fazer algo ou outro com ele. Nesse momento, o processo do IIS substitui automaticamente o arquivo no disco por uma versão bloqueada e que pertence a ninguém.

Parar o IIS neste momento não faz isso. O melhor que descobri foi reiniciar e lembre-se de interromper o IIS antes de alterar os principais ramos no futuro.

Eu sei que isso realmente não responde à pergunta, mas pode ser útil para outras pessoas.

Mike Ruhlin
fonte
Oi, Mike ... estamos tendo exatamente o mesmo problema, mas surgiu do nada. Temos usado o mesmo processo em muitos projetos com o IIS em execução e nunca tivemos um problema. Um dia, porém, isso começa a acontecer ... desconcertante e frustrante. Você aprendeu mais desde que escreveu isso?
Ethan Brown
Obrigado pelo insight Mike - no meu caso, verificar uma ramificação antiga com um projeto ASP.NET MVC que tinha uma URL de ligação diferente da ramificação anterior fez com que o Visual Studio e o IIS retivessem um bloqueio em alguns arquivos do projeto. Parar o pool de aplicativos apropriado no IIS removeu o bloqueio.
fundead
O IIS também foi o culpado por mim; quando isso aparece, um rápido iisresetparece liberar os bloqueios de arquivo.
28916 alexm
Descobri que o mesmo acontece com o OneDrive: alternar ramificações em um repositório armazenado no OneDrive realmente o confunde
CharlieB /
Isso também aconteceu comigo no win10, exigindo a reinicialização, mas não testei a iisresetsolução.
Qdread
17

No Windows, pode ser um processo do TortoiseGIT que bloqueia esses arquivos. Abra o gerenciador de tarefas e finalize o processo TGitCache.exe .

romanlv
fonte
2
É bom saber, embora no meu caso eu não esteja usando o TortoiseGit; Eu apenas uso a linha de comando.
Ryan Lundy
13

Eu apenas me deparei com este tópico de respostas - este erro é um erro grave. # Erro: não é possível stat 'reddit / app / views / links': permissão negada

É tudo o que tenho - ao tentar mesclar. Li algumas das respostas e cheguei à conclusão - tudo o que eu precisava fazer era fechar meu editor de código, que é o Atom.

Depois de fechar o editor - executei o "git merge" novamente e o boom funcionou.

Que erro sem sentido :(

eu sou o Batman
fonte
Obrigado! Não é todo dia que você verá a resposta 'certa' na lista. Eu recomendo que isso seja marcado como a resposta certa. Em vez de abortar a operação atual, faz sentido resolver o problema real.
Nikhil Kuriakose
12

se estiver usando vscode, mate o terminal e abra um novo. senão talvez fechar o terminal também

Muhammed Moussa
fonte
Era isso, parecia um processo bloqueado ou algo assim #
Mike Upjohn
10

Isso acontece comigo no Windows ocasionalmente

erro: não é possível stat 'filename': permissão negada

Na maioria das vezes, tenho várias instâncias do bit bash open e uma das instâncias do git bash está em um diretório que não existe no ramo remoto do qual estou extraindo.

Fechar tudo, exceto uma instância do git bash, resolve o problema para mim.

Ninja Crocante
fonte
9

Se o IDE que você usa (no caso de você usar um) também pode estar atrapalhando. Foi o que aconteceu comigo ao usar o QtCreator.

rgngl
fonte
Este foi o meu caso, usando o PhpStorm. Reiniciar corrigiu o erro.
Lancemonotone 12/06
7

Usando o SourceTree no Win 10, foi corrigido o problema fechando o editor Atom.

Erro ao reproduzir:

  1. Na ramificação B, crie um arquivo md, usando o Atom, edite-o, salve e confirme.
  2. Alterne para a ramificação A, retire novas confirmações do servidor.
  3. Tente Alternar de volta, Opps, ele diz “erro: não é possível 'arquivo' de estatísticas: permissão negada”.
attolee
fonte
6

Isso também pode acontecer quando você estiver usando o SublimeText e a janela pop-up solicitando a compra do programa não está fechada.

ahnbizcad
fonte
11
Também entendeu com Atom apenas por ter a árvore de projeto / arquivo aberto
Hal
11
Como @Hal, meu problema foi com o Atom. Isso ocorreu porque uma pasta em um ramo não estava em outro ramo. O fechamento do Atom o corrigirá, mas você também pode recolher a árvore do projeto (para ocultar a pasta) e isso também funciona.
Jsalwen
6

Isso geralmente acontece quando você tem pré-processamento de software / aplicativos assistindo ao projeto, como Prepros ou Codekit. Além disso, Atom e Sublime (e até o Notepad ++) podem fazer com que isso ocorra se um arquivo no projeto estiver sendo editado no momento.

A maneira mais fácil de contornar o problema é fechar o que tiver os arquivos do projeto aberto, mesclar suas ramificações e reabri-las para atualizá-lo. Isso também evitará problemas nos quais o programa não esteja mais ciente de quaisquer mudanças que ocorreram, forçando você a atualizar o (s) projeto (s) manualmente.

Steven Ventimiglia
fonte
11
ó homem! Eu estava correndo olmo ao vivo em segundo plano. Isso me salvou uma tonelada de dor de cabeça.
Frostymarvelous
6

Se você estiver executando o webpack, desligue-o. Desligue seu IDE também. Deve funcionar bem depois de fazer essas coisas.

KennethDale1
fonte
4

Eu tive um problema parecido. Mas era muito simples de resolver. Em uma máquina Windows, meu explorador de arquivos tinha uma pasta aberta que existia em uma ramificação, mas não na outra que fiz o check-out. Fechar o File Explorer resolveu o problema.

mmmdearte
fonte
4

Acabei de ter isso no Win 7.

$ git stash pop error: não é possível stat 'parentFolder / subfolder': erro de permissão negada: não é possível stat 'parentFolder / subfolder': permissão negada

Diagnóstico:

1> Eu fui para a subpasta e ela está lá e não consegui excluí-la!

2> Use "process explorer" -> Localizar -> Encontre alças e DLLs -> coloque o nome da "subpasta" lá e pesquise.

Resultado: o XMLSpy abriu um dos xml ali, feche o XML Spy e tente o stash pop novamente, está funcionando agora.

Gob00st
fonte
4

Aconteceu comigo no Windows enquanto fazia o rebase dentro do terminal integrado do IntelliJ . Percebi que eu tinha a instância do cliente Git bash sendo executada em paralelo.

Fechar o Git bash resolveu o problema.

Louis
fonte
2

Meu encontro com esse problema foi causado pelo meu editor, Intellij. Como parte de seus controles internos de versão, ele havia bloqueado todos os arquivos git ocultos. (Por várias razões, eu não estava usando o plugin git que acompanha o Intellij ...)

Então, eu abri uma janela normal do DOS como Administrador, mudei para o diretório e executei

attrib -R /S

Isso removeu o bloqueio dos arquivos e tudo funcionou depois disso, e eu pude sincronizar minhas alterações usando o cliente Windows do GitHub.

Perry Tew
fonte
2

Concordo com as respostas "Fechar Visual Studio" acima.

No entanto, uma etapa adicional que tive que executar, mesmo depois de fechar o Visual Studio, foi matar manualmente o processo do Visual Studio "devenv.exe" no Gerenciador de Tarefas. Depois de fazer isso, fui capaz de executar novamente no gitbash:

puxão

e o erro " não é possível nome do arquivo estatístico " desapareceu. Talvez seja devido a uma extensão do Visual Studio que mantém o processo aberto por mais tempo, mesmo após o fechamento.

ladygargar
fonte
2

Acabei de ter esse problema. O problema é que, se você abriu o arquivo, ele foi removido \ substituído após o rebase (você tinha um ramo que não possui mais esse arquivo), o sistema git corrompe. Então fechei todos os arquivos abertos e tentei fazer o checkout em algum outro ramo

BlondinkaBrain
fonte
2

Uma solução alternativa, em vez de fechar todos os aplicativos que possam estar bloqueando o diretório, como quase todas as outras respostas recomendam, seria usar um utilitário que desbloqueie os arquivos / diretório sem fechar tudo. (Eu odeio precisar reiniciar o Visual Studio)

LockHunter é o que eu uso: https://lockhunter.com/ Provavelmente existem outros por aí também, mas este funcionou muito bem para mim.

Quente e
fonte
1

Mesmo problema no Windows 10 de 64 bits, executando o Git Bash versão 2.9.0.windows1 usando o Atom como meu editor.

Isso funcionou para mim: adicionei a pasta do software Git (para mim, era C: \ Arquivos de Programas \ Git) às exclusões do Windows Defender.

Após a exclusão foi adicionada, git checkout 'file'funcionou bem.

Paul Spaven
fonte
1

Este erro também pode ser causado pelo fato de os arquivos ainda estarem "bloqueados" devido a ações anteriores do git. Tem a ver com o funcionamento da camada do sistema de arquivos do Windows. Certa vez, li uma boa explicação sobre isso, mas não me lembro onde.

Nesse caso, no entanto, como é basicamente uma condição de corrida, tudo o que você precisa fazer é continuar seu processo de rebase interrompido . Infelizmente, isso acontece comigo o tempo todo, então escrevi esse pequeno ajudante perigoso para manter minhas repercussões em andamento:

#!/bin/sh

set -e

git checkout .
git clean -df
git rebase --continue

Se você quiser ter certeza, pode git rebase --edit-todoverificar se o próximo commit a ser aplicado é realmente aquele que falhou antes. Use git clean -dnpara garantir que você não exclua nenhum arquivo importante.

raphinesse
fonte
1

Aconteceu comigo no Windows, ao usar o photoshop: Quando salvei uma imagem e depois mudei para um ramo (deixando o photoshop com a imagem aberta), recebi o erro git. Feche a imagem no photoshop e tente novamente

pscheit
fonte
1

Matar o processo w3wp.exe relacionado ao repositório corrigiu isso para mim.

Ric
fonte
1

No meu caso, eu tinha um servidor de desenvolvimento webpack rodando atrás.

Charith
fonte
0

Eu recebi esse erro quando meu VS1013 estava em uma ramificação segmentada para 8.1 e estava tentando fazer check-out de uma ramificação 8.0. Eu precisava voltar ao VS e permitir que UpdateAll. Então eu poderia fazer o checkout da ramificação 8.0 sem erros.

Aleksandr Gembinski
fonte
0

Eu também estava em uma máquina Windows usando o Git Shell quando encontrei o mesmo erro.

No entanto, na época eu tinha vários terminais Git abertos.

O primeiro terminal recebeu o erro que você postou acima e o outro terminal executou anteriormente o grunt servecomando terminal da yeoman (link abaixo). O segundo terminal precisava permanecer aberto para hospedar uma instância do servidor local.

Desligar todas as janelas do terminal que executam processos em andamento pode causar a falha do erro.

Pelo menos foi o que funcionou para mim. Depois de fechar a segunda janela do terminal, eu poderia facilmente fazer check-out de diferentes ramos e manipular arquivos.

Comando Grunt Serve - Yeoman.I / O
http://yeoman.io/learning/

Shawesome
fonte
0

Acabei de encontrar este problema. Nenhuma das respostas aqui aconteceu para resolver isso para mim.

Acabei sendo pacotes de nuget que adicionei em um ramo que, uma vez retornado ao ramo mestre, parecia não existir. Uma vez que eu fiz uma mesclagem, diria newtonsoft ... xml não poderia stat. Eu iria para o arquivo em questão e o abriria, mas o Windows retornou um erro dizendo que não consegue encontrar o arquivo (mesmo que eu estivesse olhando direto para ele)

Como resolvi isso, clique com o botão direito do mouse e exclua o arquivo (que funcionou, mas não consegui abri-lo porque o Windows não conseguiu encontrá-lo ???) e tente mesclar novamente e resolvi o problema.

Muito estranho.

Espero que isso ajude alguém mais tarde.

O novato
fonte
0

Saí do meu editor de texto que estava acessando os diretórios do projeto, tentei mesclar para o ramo principal e funcionou.

PudparK
fonte