it-swarm-eu.dev

Rinominare Git da index.lock all'indice fallito

Usando il client Windows GitHub ho fatto un sync per eseguire le modifiche remote sul mio computer locale, ma prima di terminare la sincronizzazione, ho esaurito lo spazio su disco e la sincronizzazione non è riuscita. Ora mi sembra di avere un sacco di cambiamenti locali che sono in realtà cambiamenti che sono stati estratti da Origin. Ho provato a lanciare git pull ma ho ottenuto:

C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git pull
Updating b3a86e1..5afd74f
error: Your local changes to the following files would be overwritten by merge:
        SourceLog.Interface/IChangedFile.cs
        SourceLog.Interface/ILogEntry.cs
        ...
Please, commit your changes or stash them before you can merge.
error: The following untracked working tree files would be overwritten by merge:
        Lib/MSBuildExtensionPack/4.0.6.0/Ionic.Zip.dll
        Lib/MSBuildExtensionPack/4.0.6.0/MSBuild.ExtensionPack.dll
        ...
Aborting

Quindi ora sto cercando di scartare i cambiamenti locali, ma sto ottenendo:

C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git checkout -- .
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) y
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) n
fatal: unable to write new index file

Come posso pulire questo? (Non ho avuto modifiche locali prima di avviare la sincronizzazione.)

Aggiornare

Non riesco a resettare la testa ..

C:\Users\Tom\SourceLog [master +4 ~0 -0 !]> git reset head
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) y
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) n
error: Could not write new index file.
fatal: Could not reset index file to revision 'head'.
25
Tom Hunter

Sembra che il seguente processo abbia bloccato il file .git\index:

ssh-agent.exe
C:\Users\Tom\AppData\Local\GitHub\PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7\bin\ssh-agent.exe

Ho ucciso il processo e ho eseguito git reset HEAD e sembra che ora sono tornato alla normalità.

25
Tom Hunter

Nel mio caso, ciò è stato causato dall'utilizzo dello stesso repository Git da entrambi i prompt dei comandi admin e non-admin. Quando l'ultimo git pull proveniva da admin cmd, la index è stata creata da esso, quindi il cmd non amministratore ha avuto permessi insufficienti per modificarlo.

La mia soluzione è stata ricreare index (mantenendo intatto il worktree):

del .git\index
git reset --mixed head
7
Dimagog

Stavo vedendo questo messaggio Rename from '.git/index.lock'... durante il tentativo di esecuzione

git checkout -b my-branch

La soluzione per me era di eseguire la riga di comando come admin.

In particolare, stavo usando l'eccellente cmder application come non amministratore, che ha portato alla visualizzazione del messaggio di rename. Eseguendo cmder come amministratore, eseguendo nuovamente il checkout, ha funzionato correttamente.

2
Jason Evans

Git 2.10 (Q3 2016, 4 anni dopo) dovrebbe migliorare la situazione su Windows

Vedi commit 05d1ed6 (23 ago 2016) di Ben Wijen (Ben) .

mingw: assicura che gli handle di file temporanei non vengano ereditati dai processi figli

Quando l'indice è bloccato e i processi figlio ereditano l'handle in detto blocco e il processo padre vuole rimuovere il blocco prima del il processo figlio termina, su Windows c'è un problema: non funzionerà perché i file non possono essere cancellati se un processo ha un handle su di essi.

Il sintomo:

Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed.
Should I try again? (y/n)

I processi figli generati con bInheritHandles==FALSE non funzionerebbero poiché nessun handle di file verrebbe ereditato, nemmeno gli handle hStdXxx in STARTUPINFO (stdin/stdout/stderr).

L'apertura di ogni file con O_NOINHERIT non funziona, ad esempio, come ad es. git-upload-pack si aspetta handle di file ereditati.

Questo ci lascia con l'unica via d'uscita: creare file temporanei con il flag O_NOINHERIT. Questo flag è specifico per Windows, comunque.
Per i nostri scopi, è equivalente a O_CLOEXEC (che non esiste su Windows), quindi apriamo solo file temporanei con il flag O_CLOEXEC and mappare il flag su O_NOINHERIT su Windows .

1
VonC

Ho rimosso index e index.lock (nella cartella .git) e ho eseguito git checkout . per annullare le modifiche e risolto, ma se volevo eseguire il commit delle modifiche avrei eseguito git add -A dopo git commit -m "description"

0
krekto

O uccidi il processo che sta bloccando il file o se è un nuovo repository, della cartella .git rm -rf .git e ricomincia da capo con git init

0
Robot Boy

Ho avuto un problema simile con Git. La soluzione per me era eliminare la soluzione localmente tramite Windows Explorer e quindi ripetere la clonazione del repository. Ciò ha rimosso tutti i file che sono stati memorizzati localmente sul mio computer e ha provocato il 

Rename from '.git/..' to '.git/..' failed. Should I try again? (y/n) y

andando via. Dopo aver clonato il respository, ho provato di nuovo il mio comando (che nel mio caso era GIT COMMIT) e l'errore non si è ripresentato. 

Il problema si è verificato quando stavo cercando di risolvere un conflitto di merge che stava accadendo dopo l'unione di un ramo di funzionalità nel ramo di sviluppo.

0
joey

Può essere un problema giusto, prova ad eseguire il tuo terminale come amministratore invece che come utente. Ha funzionato per me

0
HamzDiou

Sto usando Tortoise Git. Ho appena aperto un nuovo Windows Explorer e l'ho risolto. (Per la riga di comando Git forse basta aprire una nuova shell).

0
Mark Seagoe

Ho ricevuto questo errore più volte di seguito durante l'esecuzione di git reset HEAD in un progetto archiviato in una cartella di Google Drive, ma dopo alcuni minuti il ​​problema è scomparso. 

0
Brian Burns

Per eliminare le modifiche locali, vai 

git reset HEAD

Quindi controlla il tuo vecchio commit, cancella quello nuovo e tira di nuovo.

git checkout "hashOld"
git branch -d "hashNew"
git pull
0
James McDonnell