Aviso do Git Checkout: impossível desvincular arquivos, permissão negada

109

Estou ciente de que existem problemas semelhantes sobre o git relacionados ao aviso 'não foi possível desvincular', mas não consegui usá-los.

A principal diferença é que isso acontecia quando eu não estava lidando com submódulos de forma alguma (nunca havia lidado com eles antes). Eu criei um branch chamado 'upgrade', apaguei meus arquivos antigos do framework e copiei os novos. Usei git add -A e depois comprometo tudo. Quando tentei verificar o ramal do tronco, ele respondeu com os seguintes erros:

warning: unable to unlink requirements/views/sk/index.php: Permission denied
warning: unable to unlink requirements/views/sv/index.php: Permission denied
warning: unable to unlink requirements/views/zh/index.php: Permission denied
warning: unable to unlink requirements/views/zh_cn/index.php: Permission denied
warning: unable to unlink requirements/views/zh_tw/index.php: Permission denied

... etc. Há centenas deles.

No início, pensei que era apenas um problema de permissões, então adicionei as permissões de gravação de grupo a todo o diretório de requisitos recursivamente, mas não houve nenhuma mudança.

Edit: Como sugerido em uma resposta abaixo, tentei fazer a mesma coisa, mas com todo o resto fechado. Não tive mais sorte do que antes.

Esse problema é particularmente debilitante, pois não consigo passar para o tronco para voltar ao desenvolvimento normal.

Paragon
fonte
9
Resolvi isso com um simplessudo chown -R username directory
Stephen Corwin

Respostas:

84

Normalmente vejo esse tipo de erro quando há um processo que não libera o identificador desses arquivos.

Certifique-se de que nada está funcionando e tente finalizar a compra novamente.

Nota: também pode estar relacionado com a forma como o Git foi instalado (no Windows, o UAC pode gerar problemas se msysgit estiver instalado em C:\Programou C:\Program Files, consulte " msysgit - sh.exe - fork: Permissão negada - Vista 64 bits " e comentário 2 de edição 437 )

Observação: conforme ilustrado abaixo , uma outra causa comum do problema é a emissão de direitos no diretório (proprietário incorreto), não necessariamente no arquivo que não pode ser desvinculado.

VonC
fonte
1
Estou no Ubuntu, para esclarecer isso. E, infelizmente, estou apenas neste navegador da web e em meu console, que tem uma guia aberta no diretório relevante (e duas abertas em outro lugar).
Paragon de
3
@Paragon: mesmo no Unix, você pode lidar com problemas. Caso contrário, isso deve ser um problema de permissão de algum tipo. Você deve ser capaz de forçar a finalização da compra. git checkout -f master
VonC
2
+1 no meu caso era o compartilhamento de pasta com uma VM ativa que proibia o descarte de arquivos em git no sistema host. Me deixou maluco, então obrigado pela dica!
Jook
1
O mesmo problema. Executar Process Explorer> Ctrl + F> <filename> - exibirá o processo, que mantém este arquivo aberto.
setevoy
1
GitExtensions exibiu este erro ao tentar obter todos ... Também abri o GitKraken. Assim que fechei o GitKraken, a busca funcionou sem erros.
mkaj
99

Em meu primeiro encontro com esse erro, meu usuário tinha direitos para "escrever" no arquivo, mas não no diretório que o continha. Verifique as permissões do diretório que contém o arquivo.

Elijah Lynn
fonte
94
Que engraçado, acabei de encontrar essa resposta hoje e então percebi que era minha! No entanto, funcionou de novo!
Elijah Lynn
Ok, aconteceu comigo no windows 10, vou para a pasta do projeto principal. e adicione PARA TODOS OS USUÁRIOS POSSÍVEIS, todas as permissões. Portanto, para sistema, administrador, usuários, todas as possibilidades. Aplique mudanças. E parece funcionar, de alguma forma talvez com o windows 10 update, mesmo se não criarmos um novo usuário, seremos ameaçados como o novo, sem permissões. Por exemplo, eu tenho um nome estranho S-1-15-32 ... Não é o nome de login que eu tenho quando desbloqueio nosso laptop.
PsychedelicSubstance
30

"Desvincular" significa essencialmente "excluir arquivo" neste caso.

Este erro não é causado pelo próprio git. Você deve ter erros semelhantes ao excluir esses arquivos manualmente, em uma linha de comando ou explorador de arquivos.

rtconner
fonte
18
Em meu primeiro encontro com esse erro, meu usuário tinha direitos para "gravar" no arquivo, mas o diretório que o continha não.
Elijah Lynn
3
@Elijah: Obrigado! Isso era o que era para mim.
Jesse Lee
4
No meu caso, descobri que o arquivo em questão estava bloqueado por outro aplicativo. O fechamento do aplicativo liberou o arquivo e permitiu que o checkout continuasse.
Simon Tewsi 01 de
25

Você não tem permissão de acesso, talvez porque não seja o proprietário.

Corrija mudando o proprietário para você:

sudo chown -R your_login_name /path/to/folder
Vince Yuan
fonte
2
Em minha máquina de desenvolvimento local, os arquivos em questão foram originalmente criados por meu servidor apache local, portanto eram de propriedade do usuário www-data. Depois de transferi-los para minha própria conta, tudo voltou a funcionar normalmente. "Permissão negada" era o verdadeiro problema. O "incapaz de desviar" era apenas uma pista falsa.
Dale Anderson
23

Eu estava tendo o problema com um arquivo default-settings.php no drupal 7. Nesse caso, não consegui excluí-lo ou revertê-lo como disse @rtconner. Não tinha um aplicativo nem nada usando esse arquivo e acabou sendo um erro de permissão.

Eu adicionei chmod 777 *à pasta e depois fui capaz de reverter sem problemas.

Rob Erskine
fonte
3
Embora você possa não querer um 777em nenhuma pasta. Isso resolveu meu problema, mas eu rapidamente mudei de volta para o padrão depois que foi resolvido. Obrigado!
Bram
13

Você pode alterar as permissões de gravação para fazer isso.

sudo chmod -R ug+w . 

Este comando dará 'w'permissões a todas as pastas no diretório atual.

Rajendra kumar Vankadari
fonte
6

Eu tive esse problema sempre que rodava "git repack" ou "git gc" em minhas máquinas OS X, mesmo quando rodava git com privilégios de administrador, e finalmente resolvi isso depois de encontrar esta página: http://hints.macworld.com /comment.php?mode=view&cid=1734

A solução é abrir um terminal, ir para o repositório git, fazer cd na pasta .git e fazer:

chflags -R nouchg *

Se esse era o problema, depois disso, seus comandos git funcionarão normalmente.

Aprenda OpenGL ES
fonte
1
O link macworld não é mais válido. Aqui está uma referência atualizada: superuser.com/a/40754
webb
5

Isso também pode ocorrer quando:

  1. Você executou um processo dentro de um contêiner do Docker e:

  2. Alguns arquivos foram gerados por esse processo e:

  3. O destino dos arquivos é montado como um volume no host Docker e:

  4. Você está executando gitno host Docker.


Se for este o caso, prepare os arquivos que deseja confirmar e execute:

git diff --name-only --cached | xargs ls -l 

Os arquivos que atendem aos critérios acima serão prefixados com:

-rw-r--r-- 1 root root ...

Eles são de propriedade roote não podem ser gravados, o que não é bom. Para consertar essa corrida:

 git diff --name-only --cached | xargs -i sh -c 'sudo chown $USER:$USER {}; chmod +w {}'

Uma solução mais limpa provavelmente seria usar a --useropção, veja isto para Docker e isto para Docker compose .

Davetapley
fonte
4

Para aqueles que estão usando o Intellij , como @rtconner disse que esse problema não é causado pelo git. Uma vez que seu IDE está bloqueado, o (s) arquivo (s) git não pode desassociar. Portanto, você precisa fechar seu IDE e tentar mesclá-lo (ou o que quiser) via linha de comando.

Hesam
fonte
Foi isso. Aconteceu com o Android Development, já que AndroidStudio é Intellij.
Reinherd
2

No meu caso, era um caractere ":" em um nome de pasta evitando que o repositório git fizesse check-out no windows.

simonC
fonte
2

no terminal no mac eu só faço isso

sudo git checkout. (para limpar tudo)

e depois

origem sudo git pull

Jry
fonte
2

Tive este erro dentro de uma máquina virtual (rodando Ubuntu), quando tentei fazer git reset --hard.

A correção foi simplesmente executar a git reset --hardpartir da máquina host OS X em vez disso.

Henrik N
fonte
1

Nenhuma das outras sugestões funcionou para mim, mas esta funcionou:

sudo git reflog expire --expire=now --all && sudo git gc --prune=now --aggressive

0x1mason
fonte
1

No meu caso, meu diretório do Windows está na pasta Dropbox. Não é um problema específico do Git. Quando um arquivo (neste caso, o arquivo de bloqueio) acaba de ser criado, o Dropbox leva mais um segundo para fazer a sincronização. Durante esse tempo, o arquivo está em uso pelo Dropbox e qualquer programa de terceiros (neste caso, Git) não pode excluir o arquivo.

Minha solução é encerrar o Dropbox e, portanto, evitar a mágica dos bastidores da sincronização de arquivos do Dropbox.

Vincent
fonte
0

Eu encontrei este erro e ele é causado pelo "proprietário / grupo" errado do arquivo / pasta . Você deve procurar assistência ao administrador do servidor para alterar o "proprietário / grupo" deste arquivo / pasta e tentar novamente usando "git pull". Ou se você for um sudoer, apenas sudo chown "seu nome de proprietário / nome de seu grupo" e tente novamente puxar seu repositório. Experimente, funciona 100% para mim!

Jeff Simons Decena
fonte
0

Certifique-se de que quaisquer processos ou threads associados não estejam em execução e execute a tarefa de encerramento ou force o encerramento, conforme necessário.

Certifique-se de alterar a permissão de propriedade.

Creative_Cimmons
fonte
0

Em geral, se isso acontecer no Windows , e você estiver usando o tortoisegit , é o cache de status do tortoisegit . Mate esse processo e ele será liberado.

WiseStrawberry
fonte
Você pode desativar o cache de status do TortoiseGit completamente, e geralmente é algo que eu recomendaria. Freqüentemente, é a causa de muitos bloqueios de arquivos inesperados e tende a ser muito mais problemática do que vale a pena. Basta usar a git statuspartir da linha de comando.
0

Eu apenas tive que mudar o usuário do Ubuntu para o meu nome de usuário real, sob o qual fiz as coisas primeiro. Isso resolveu.

Marc
fonte
e os usuários do Windows?
Herr Nentu '27 de
O OP estava no Ubuntu. Eu não teria comentado em um tópico do Windows.
Marc
0

Resolvido para mim configurando meu cliente git (GitExtensions) para sempre executar no modo de administrador.

Frodo2975
fonte
0

Tive esse problema ao usar IntelliJ(14.1.3 Ultimate), queria reverter as alterações em algum arquivo.

Resolvido com o fechamento Git Bashaberto em outra janela - outro teste de reversão IntelliJfuncionou.

Eel Lee
fonte
0

Encontrei esse erro e acho que o problema era que eu tinha 'executado como admin' quando iniciei o Eclipse e criei os arquivos, portanto, eles eram de propriedade do Admin (notado ao executar 'ls -la' na pasta). Mais tarde, quando tentei esconder os arquivos, não consegui ('não foi possível desvincular os arquivos' e tudo mais). Fazer um chmod nos arquivos foi a solução para mim.

LConrad
fonte
0

Tudo que você precisa fazer é fornecer permissões, execute o comando abaixo a partir da raiz do seu projeto:

    chmod ug+w <directory path>
Hansa
fonte
0

Eu tive o mesmo problema, tentei algumas alternativas como outros sugeriram.

Mas, finalmente, dar a permissão correta para a pasta .git resolverá os problemas.

sudo chown -R "${USER:-$(id -un)}" .git
Raza Rafaideen
fonte
0

No meu caso, o problema de permissão foi resolvido definindo www-datacomo proprietário:

chown -R www-data project_folder_name
Avag Sargsyan
fonte
0

Acho que é sobre sua permissão de arquivo:

sudo chmod 777 -R <your-git-folder>
Johnny Cage
fonte