Falha ao desvincular do arquivo. Devo tentar novamente?

572

Algo errado está acontecendo com um dos arquivos no meu repositório git local. Quando estou tentando alterar o ramo, ele diz:

Unlink of file 'templates/media/container.html' failed. Should I try again? (y/n)

O que isso poderia significar?

Pol
fonte
1
Confira esta pergunta
RDL
possível duplicata de [Git REBASE tem 'unlink de arquivo falhou' erro] ( stackoverflow.com/questions/3698369/... )
Josh Lee
fez o trabalho dado resposta para você, se visualizador de processo não está funcionando, em seguida, reiniciar e você pode então remover arquivos, também pode aceitar a resposta se ele trabalhou para você
dhaval
1
Verifique também se o processo git tem permissões de gravação nesse arquivo.
boileau
5
possível duplicata de Desvincular de arquivo falhou
BartoszKP

Respostas:

752

Isso pode significar que outro programa está usando o arquivo, o que impede o git de "mover" o arquivo para dentro ou fora do diretório de trabalho quando você está tentando alterar ramificações.

Eu tive isso acontecer no Windows Vista, onde eclipse é o programa "usando" o arquivo. O arquivo pode não estar realmente aberto no eclipse, mas pode ter sido aberto por um processo executado pelo eclipse.

Nesse caso, tente fechar o arquivo em qualquer aplicativo que possa ter usado. Se isso não funcionar, saia completamente de todos os aplicativos que possam ter aberto o arquivo.

Melissa
fonte
53
No Windows, use ProcessExplorer para descobrir qual processo tem o arquivo aberto.
Dave C
2
Existe uma maneira de escrever um script como "se este arquivo não puder ser excluído (por exemplo, o arquivo simplesmente não existe), basta pular o arquivo".
2xMax
14
No meu caso, foi o Visual Studio e seu plug-in Git.
Michał Powaga
8
No Windows, se você não tiver o ProcessExplorer disponível ou não quiser baixá-lo, poderá executar (Windows + R) "ressonar", ir para a guia CPU e pesquisar o nome do arquivo na caixa de texto "Identificadores Associados".
Raphael
6
Se você usar, GitKrakenpoderá obtê-lo se executar comandos como um rebase.
mtpultz
285

Eu tive esse problema e resolvi-o pelo comando: git gc O comando acima remove temp e arquivos desnecessários. (Coletor de lixo.)

khilo
fonte
43
git pulliniciado git gcautomaticamente e o gc tentou acessar alguns arquivos .pack e .inx. Eles foram mantidos pelo processo "windows git", que possuía o git pullcomando. Executando git gcmanualmente e depois - git pullrealmente resolve o problema.
Nikita
4
Durante a execução git gceu tenho o mesmo erro novamente quando gcestava em andamento
Prakash K
4
"A execução manual do git gc e do than - git pull realmente resolve o problema." Isso ajudou. Obrigado Nikita.
Sangam
Isso me ajudou também. Executei isso no Windows com Git Bash
Ascalonian
Depois de iniciar o git pull, recebi este erro. Pressionei CTRL + C para interromper o pull, execute o git gc e git pull novamente, o problema desapareceu e nada foi interrompido pela interrupção do pull.
daniel sp
84

esta solução daqui funcionou para mim:

Esta é uma resposta específica do Windows, por isso estou ciente de que não é relevante para você ... Estou apenas incluindo-a para o benefício de futuros pesquisadores.

No meu caso, foi porque eu estava executando o Git a partir de uma linha de comando não elevada. "Executar como administrador" corrigiu para mim.

sepehr
fonte
2
Trabalhou para mim. Ran VS como administrador e, em seguida, lançou o prompt de comando do VS
Sentinel
3
I: digitado Ctrl+Cpara finalizar a longa lista de arquivos não vinculáveis; saiu do gitbash, do meu IDE e do aplicativo GitHub para Windows; gitbash reiniciado no modo "Executar como Administrador" elevado; e correu git gc --aggressive. Demorou um pouco para concluir, mas conseguiu passar sem erros.
Mark McClelland
Se você acredita que esta é uma duplicata você deve marcá-lo como tal, não adicionar uma resposta que aponta para outra resposta
Liam
2
@ Liam Esta pergunta é mais antiga, mas esta resposta foi apenas para a outra pergunta, e não há apenas uma resposta para essa pergunta, o que torna mais difícil definir apenas uma como duplicada.
sepehr
Isso funcionou muito bem para mim. Nenhuma das respostas anteriores o fez. Muito obrigado.
Roberto Rodriguez
35

Encontrei esse problema ao fazer um git pull.

Eu tentei git gce resolveu o meu problema.

Rahul Chandran
fonte
Eu me deparei com esse problema na máquina Windows e esta solução não funcionou inicialmente. No entanto, uma vez que executei esse comando em um prompt de comando do administrador, ele resolveu meu problema.
William W
23

No meu caso, não há processos tocando o arquivo ou diretório. Talvez isso aconteça se o caminho for muito longo, devido a uma restrição do sistema operacional (windows). Tente ativar o sinalizador de suporte de caminho longo na configuração global do git, conforme indicado abaixo:

git config --global core.longpaths true

ou tente definir o sinalizador de resposta sim / não, se não for conflitante para você

set GIT_ASK_YESNO=false

Se o caminho for muito longo, não encontrei uma solução bem-sucedida.

andhdo
fonte
5
Não sei por que, mas definir "git config --global core.longpaths true" foi útil para mim.
Maxim
GIT_ASK_YESNO, não consegue encontrar informações sobre este. De onde isso vem ?
majkinetor
consulte: stackoverflow.com/questions/3698369/… por exemplo; Eu não faço agora se trabalha com Recentes versões do git (2,9)
andhdo
core.longpathscom adicional: redefinição --hard ameixa gc funcionou para mim - mas teve que fechar AndroidStudio para não mexer com a sua construção em ferramentas
Mike bovquier
11

Eu tentei git gce resolveu o meu problema.

Mukesh Yadav
fonte
10

Isso pode ser útil para alguém; se todas as opções acima não funcionarem para você, siga estas etapas:

  1. Feche seu IDE (o meu era o Eclipse, não tenho certeza se ele se aplica ao Intellij e outros) ou a qualquer outro aplicativo que possa estar usando o git.

  2. Abra o git na linha de comando (no meu caso, eu tinha o git bash) e execute git gccomo mencionado por outros.

Isso fez a mágica para mim.

papigee
fonte
Esta é a única resposta que ajudou no meu caso, usando o Android Studio
0101100101
10

Como eu estou usando gitkraken e prompt de comando, eu corri para o mesmo problema. E então eu corro git gccomando que resolveu o meu problema. Então, eu estou feliz e quero compartilhar alguns dos pontos que podem ser úteis.

O que git gcvai fazer?

git gc removendo objetos inacessíveis que podem ter sido criados a partir de invocações anteriores do git add.

Quando correr git gc?

No documento , os usuários são incentivados a executar esta tarefa regularmente em cada repositório para manter uma boa utilização do espaço em disco e um bom desempenho operacional.

Como torná-lo auto-configurável?

Alguns comandos git podem executar automaticamente o git gc; veja a bandeira --auto abaixo para obter detalhes. Se você sabe o que está fazendo e tudo o que deseja é desativar esse comportamento permanentemente, sem mais considerações, basta

git config --global gc.auto 0
Ramesh Papaganti
fonte
8

No meu caso (Win8.1, TortoiseGit em execução), foi o processo chamado "cache de status TortoiseSVN" que estava bloqueando o arquivo.

Matá-lo me permitiu executar o "git gc" sem mais problemas. O processo acima é iniciado pelo TortoiseGit, portanto, não há necessidade de reiniciá-lo manualmente.

nickD
fonte
7

Eu tive esse tipo de problema no Windows 7 e acabou por ser devido a algum git.exeprocesso órfão .

Para resolvê-lo, abra o Gerenciador de tarefas e mate todos os git.exeprocessos.

Como os gitcomandos têm vida curta, normalmente você nunca deve ver nenhum git.exeno Gerenciador de Tarefas. Quando eles estão lá, geralmente significa que algo está errado, e você deve matar esses processos.

jakub.g
fonte
7

Eu tenho esse problema no Windows. Fechei meu IDE (Android Studio) e selecionei YES no shell do git. Funcionou.

vovahost
fonte
5

No Windows 8: executei o git gc e ele dizia que o git gc já estava em execução, executei o git gc --force e o coletor de lixo foi executado.

Eu poderia então alternar entre ramificações e mesclar sem problemas, tente o git gc --force.

Talvez o processo de GC não tenha parado por um motivo ou outro.

Mark Howard
fonte
Também é válido para Windows 10.
oguzhan
4

Eu tive esse problema com .tmparquivos na /.git/objects/packpasta Acho que algo falhou durante um push ou pull, então removi esses arquivos temporários e redefinii o HEAD para minha última confirmação. Não tenho certeza se isso é recomendado, mas funcionou para mim. Também git count-objects -vme deu uma lista dos .tmparquivos que não pertencem à pasta do pacote.

Ou para suprimir as mensagens y / n nas janelas git open cmd.exee executar:

SETX GIT_ASK_YESNO false

visto aqui: https://twitter.com/petercamfield/status/494805475733807104

amoras
fonte
Após a execução git gc, git count-objects -vajuda a identificar os objetos temporários restantes na packpasta.
mistaecko
4

Consegui resolver isso abrindo o Powershell como administrador e a partir daí git checkout <branch_name>

Bar Horing
fonte
Obrigado @ bar-horing. Isso me ajudou a identificá-lo como um problema de permissão. Depois que eu corrigi a permissão do Windows para essa pasta, ela funcionou.
Kumar
3

Eu enfrentei o mesmo problema ao fazer 'git pull'. Tentei o comando git 'git gc' de limpeza manual e resolveu o meu problema.

faça certo
fonte
4
Embora seja uma tentativa de resposta, ela não adiciona nada que ainda não esteja coberto por outras respostas (como esta ). Se você está tentando confirmar que esta solução funciona ou deseja agradecer ao autor dessa resposta, não poste uma resposta para isso. Depois de ganhar mais reputação , você obterá privilégios suficientes para votar de forma positiva as respostas que você gosta, que é a maneira do Stack Overflow de dizer obrigado.
101316 Scott Weldon
Sinalizadores / revisores: para respostas duplicadas como esta, com
101316 Scott Weldon
2

Depois de tentar várias soluções, finalmente git clean -fme ajudou.

EDIT: Eu acertei o problema novamente algumas vezes - fechar todos os processos dependentes do git parece ajudar (como gitbash, Eclipse IDE, etc.)

FazoM
fonte
2

Como mencionado acima, outra coisa está mantendo os arquivos. O problema é que o programa não parece suspeito para nós. Eu estava tentando fazer um git pull do console, enquanto o GitKraken era aberto. Fechar o GitKraken resolveu o problema.

100r
fonte
2

Após executar o comando

git rm -rf foo.bar

Vejo erro

Unlink of file 'foo.bar' failed. Should I try again? (y/n)

Porque outro programa está usando esse arquivo . Por exemplo, quando executo o aplicativo Web Java no modelo de depuração ou o aplicativo Web no servidor, não consigo excluir o arquivo de log. Desative o servidor de aplicativos (ou desative o processo de depuração), tente novamente

git rm -rf foo.bar

Vejo que o arquivo foi excluído.

Do Nhu Vy
fonte
1

Pode ser uma janela separada do gitk em execução para ver algum histórico do git.

Apenas feche essa janela para corrigir esse problema.

weinerk
fonte
1

Corri para esse problema executando o git Bash e o Eclipse EGit ao mesmo tempo. Solução: feche o Eclipse. Também não faria mal correr git gccomo o @khilo mencionou.

jhyry
fonte
1

Eu me deparei com esse problema no Windows; talvez você queira executar o git bash como administrador e, em seguida, executar os comandos de desejo, que resolveram o problema para mim.

Pablo Fallas
fonte
1

Se você estiver desenvolvendo um aplicativo Web, um motivo comum é esquecer de desligar o servidor. Por exemplo, esse poderia ser um processo simples do Node.js. ou, no Windows, seu processo do IIS é executado de maneira mais discreta como processo em segundo plano.

alex3683
fonte
1

Eu tentei todas as dicas nesta página e nada ajudou. Eu estava fazendo um git fetche umgit reset --hard origin/development me deu o erro desconectado. Não foi possível redefinir para a confirmação mais recente.

O que ajudou foi verificar outra ramificação e depois verificar a ramificação anterior. Muito estranho, mas resolveu o problema.

T3rm1
fonte
1

Se o fechamento do IDE e a execução de vários comandos git listados aqui não ajudarem, tente matar manualmente todos os processos Java em execução. Eu tive um processo Java provavelmente sobrando do eclipse que de alguma forma manteve um arquivo de configuração aberto.

Marc.S
fonte
1

Se você estiver usando o Docker e executando o Windows 10, poderá interromper o (s) contêiner (s) em que o arquivo pode estar em execução. Para mostrar os status dos seus contêineres, execute

docker ps -a

Para detê-los, basta executar

docker stop <container name or container id>

Isso funcionou para mim, pois estou executando meus arquivos locais usando um arquivo .sh

Fio da navalha
fonte
1

Trabalhou para mim, tentei no windows:

Pare seu servidor execução no IDE ou feche o IDE

Intellij / Ecllipse ou qualquer outro, ele funcionará.

Codiee
fonte
0

No Windows, vi esse erro em um git clonerepositório (bastante grande). Fechado SmartGit e parou o meu software de backup (crashplan), e depois que ele trabalhou. Não tenho certeza qual dos 2 fez o truque, mas se estiver executando um ou outro, isso também poderá ser útil para você.

Frederik Struck-Schøning
fonte
0

Eu tive o mesmo problema ao executar um git pull e, como mencionado acima, foi por causa de um programa que estava mantendo esses arquivos e não estava permitindo um git pull. Fechar o programa ajudou. Normalmente, o IDE (como o Eclipse) de onde os arquivos estão sendo registrados o manterá em segundo plano. Fechar o mesmo e executar novamente o git pull resolveu o problema para mim.

Somesh Rao
fonte
0

Eu tive esse mesmo erro e o fechamento do aplicativo que tinha o arquivo aberto o resolveu. Consegui voltar e pressionar "Y"

Paul McDaniel
fonte