usr unable the seems running permission lock index from fatal existe create completing blocks archivo another already git

unable - git commit



git index.lock El archivo existe cuando intento confirmar, pero no puedo borrar el archivo (26)

Cuando hago ''git commit'', obtengo lo siguiente:

fatal: Unable to create ''project_path/.git/index.lock'': File exists.

Sin embargo, cuando hago ls project_path/.git/index.lock , digo que el archivo no existe. ¿Alguna idea de lo que debería hacer? También he notado que project_path / .git es propiedad de root, no estoy seguro si eso tiene algo que ver con el problema que estoy encontrando.

La versión de Git es 1.7.5.4

editar: Parece que el problema probablemente fue otro proceso que tenía en ejecución, que estaba escribiendo (sin que yo sepa) en el directorio del proyecto. Reinicié mi máquina y luego no tuve problemas para comprometerme.


  1. compruebe si el git aún se está ejecutando (ps -ef | grep git)
  2. si no, elimine el archivo bloqueado
  3. si es así, mata el proceso de git al principio.

A menos que realmente quieras que root sea el propietario de tu repositorio, parece que accidentalmente ejecutaste un comando Git como root (quizás incluso el clon / init inicial). Si tu intención era hacer eso, entonces tendrás que vivir ejecutando todos los comandos de Git en el repositorio como root. Si no lo hizo, ejecute sudo chown your-user[:your-group] -R .git para apropiarse de él, y luego vea si las cosas funcionan.


A veces, Git crea un archivo de bloqueo asociado con su repositorio mientras realiza cambios o, lo más probable, cuando utiliza submódulos. El mensaje de error le mostrará la ruta del archivo de bloqueo. Solución: simplemente vaya a la ruta en el terminal y elimine el archivo de bloqueo mediante $ rm index.lock

Debería ayudar.


A veces, otro cliente de Git puede interferir cuando hay múltiples instalados.

Es decir. asegúrese de que con el Administrador de tareas o Get-Process que TGitCache de TortoiseGit no esté activo en segundo plano.


Al iniciar git 2.8.4 (junio de 2016) , esto ya no debería suceder.

Vea el problema 755 que también debería aliviar el problema ( commit 2db0641 ):

Asegúrese de que los procesos temporales no hereden los identificadores temporales de archivos

Evite que los procesos secundarios hereden un identificador a index.lock .


Creé un archivo index.lock vacío, lo eliminé usando el comando windows


En el administrador de tareas:

  1. desarrollar todo el proceso
  2. Mata a todo el proceso de git
  3. Eliminar archivo bloqueado

En mi aplicación sourceTree no puedo hacer commit o cambiar a cualquier otro commit / brach. Esa vez muestra un error como

fatal: no se puede crear bla, bla, bla ...

Simplemente resuelvo esto yendo a la carpeta .git (en el proyecto Explorer Dir). Y elimine el índice ----- [tipo de archivo: archivo LOCK]. Ahora recupero todo el acceso en sourceTree ...

por favor, asegúrese de que el archivo de bloqueo de índice ... suponga que no obtiene el tipo de archivo, cambie la configuración de la vista de archivo en la computadora. Nota: la carpeta .git normalmente es un tipo oculto de carpeta.


En una plataforma Windows que ejecute Visual Studio 2015 RC (v4.6.00057) en combinación con SourceTree (v1.6.14.0) también se generará este error.

Solución: suponiendo que desea utilizar el árbol de código fuente como administrador de código fuente, simplemente desactive el proveedor de control de código fuente dentro de Visual Studio de esta manera:

  1. Vaya a: Herramientas> Opciones> Control de fuente
  2. Seleccione el complemento de control de fuente actual como: Ninguno

Esta puede ser una vieja respuesta, pero espero que esto sea más útil para quienes necesitan esta solución.

En linux / unix / gitbash / cygwin, prueba

rm -f .git/index.lock

En el símbolo del sistema de Windows, intente:

del .git/index.lock

Espero que ayude, encontré esta solución aquí: Fatal: no se puede crear ''... git / index.lock'' Existe el archivo


Esto sucede cuando cancelas la extracción desde el origen en el medio.

entonces, lo que puede hacer es eliminar manualmente el archivo index.lock de su directorio .git.

rm -f ./.git/index.lock

cd en su directorio de proyecto y ejecute este comando.


La solución para mí fue eliminar el archivo .index y permitir que Git reconstruya otro.


Lo que hizo por mí fue:

git rebase --abort y reinicie la rebase.

Como Andrew mencionó que también estaba usando PHPStorm cuando esto sucedió. No tuvo que cerrarlo sin embargo.


Múltiples clientes de git que trabajan en el mismo repositorio local compiten por ese bloqueo. Cada cliente debe esperar hasta que la otra parte libere el bloqueo para ser un buen ciudadano. Para nosotros, SourceTree o MSVS parecen estar haciendo algo de mantenimiento en el fondo mientras estábamos ejecutando grandes secuencias de comandos de confirmación.

Quizás ''git'' en sí mismo debería admitir un argumento ''--retriesWhenLocked 5'' para admitir reintentos. o incluso por defecto a esto cuando se ejecuta manualmente.

Aquí hay un contenedor de PowerShell alrededor de git llamado "gitr" que reintenta hasta que index.lock desaparece, usando 5 intentos por defecto, 3 segundos entre cada uno. Nunca elimina el index.lock, suponiendo que el usuario deba intervenir. Se extrajo de un script de confirmación más grande. Solo tiene pruebas mínimas con argumentos simples.

  • Copie el script a C: / bin y agregue C: / bin a $ PATH.
  • Desde PS1> gitr --help
  • Desde DOS%> powershell gitr --help

gitr.ps1

#requires -version 2 <# .SYNOPSIS gitr .DESCRIPTION Run "git" as an external process with retry and capturing stdout stderr. .NOTES 2017/05/16 crokusek: Initial version #> #---------------------------------------------------------[Initializations]-------------------------------------------------------- #Set Error Action $ErrorActionPreference = "Stop"; #----------------------------------------------------------[Declarations]---------------------------------------------------------- $scriptDir = Split-Path $script:MyInvocation.MyCommand.Path #Set-Location $scriptDir ## Disabled logging # Log File # $logFile = "$($scriptDir)/getr.log" # If (Test-Path $logFile) { Clear-Content $logFile } #-----------------------------------------------------------[Functions]------------------------------------------------------------ Function Log([string]$msg, [bool]$echo = $true) { $timestamp = "$(get-date -Format ''yyyy/MM/dd HH:mm:ss''): " $fullmsg = $msg -replace ''(?ms)^'', $timestamp # the (?ms) enables multiline mode ## Disabled Logging # Add-content $LogFile -value $fullmsg if ($echo) { Write-Host $msg } } Function ExecSimple([string]$command, [bool]$echo=$true, [bool]$stopOnNonZeroExitCode=$true) { $command, $args = $command -split " " return Exec $command $args $echo $stopOnNonZeroExitCode } Function Exec([string]$exe, [string[]]$arguments, [bool]$echo=$true, [bool]$stopOnNonZeroExitCode=$true) { # Passing $args (list) as a single parameter is the most flexible, it supports spaces and double quotes $orgErrorActionPreference = $ErrorActionPreference Try { $error.clear() # this apparently catches all the stderr pipe lines if ($false -and $exe -eq ''git'') # todo make this a generic flag { $exe = "$($exe) 2>&1" } $output = "" $argflattened = $arguments -join '' '' Log "`n% $($exe) $($arguments)`n" # This way some advantages over Invoke-Expressions or Start-Process for some cases: # - merges stdout/stderr line by line properly, # - echoes the output live as it is streamed to the current window, # - waits for completion # - works when calling both console and windows executables. # $ErrorActionPreference = "Continue" # required in order to catch more than 1 stderr line in the exception if ($echo) { # Using "cmd.exe" allows the stderr -> stdout redirection to work properly. Otherwise the 2>&1 runs after PS for # some reason. When a command such as "git" writes to stderr, powershell was terminating on the first stderr # line (and stops capturing additional lines). # # but unfortuantely cmd has some bizarre de-quoting rules that weren''t working for all cases. #& cmd /c "`"" $exe $arguments "`"" | Tee-Object -variable output | Write-Host | out-null # This is simplest but has some issues with stderr/stdout (stderr caught as exception below) # & $exe $arguments 2>&1 | tee -variable output | Write-Host | out-null } else { & $exe $arguments 2>&1 | tee -variable output | out-null } $output = $output -join "`r`n" if ($stopOnNonZeroExitCode -and !$LASTEXITCODE -eq 0) { throw [System.Exception] "Exit code ($($LASTEXITCODE)) was non-zero. Output:`n$($output)" } } catch [System.Management.Automation.RemoteException] { $output = $_.Exception.ToString().Replace("System.Management.Automation.RemoteException:", "").Trim() if ($output.Contains("fatal")) { throw } if ($echo) { Log $output } } finally { $ErrorActionPreference = $orgErrorActionPreference; } if (-not $output -eq "") { Log $output $false # don''t echo to screen as the pipe above did } return $output } Function ExecWithRetry([string]$exe, [string[]]$arguments, [bool]$echo=$true, [bool]$stopOnNonZeroExitCode=$true, [int]$maxRetries = 5, [int]$msDelay = 3000, [AllowNull()][string]$exceptionMustContain = $null) { for ($i = 0; $i -lt $maxRetries; $i++) { try { Exec $exe $arguments $echo $stopOnNonZeroExitCode return } catch { if (-not [string]::IsNullOrEmpty($exceptionMustContain) -and $_.Exception.ToString().Contains($exceptionMustContain)) { Log "Last Error from $($exe) is retryable ($($i + 1) of $($maxRetries))" $true Start-Sleep -Milliseconds ($msDelay); continue } throw } } throw [System.Exception] "Unable to successfully exec ''$($exe)'' within $($maxRetries) attempts." } Function GitWithRetry([string[]]$arguments, [bool]$echo=$true) { ExecWithRetry "git" $arguments $echo -exceptionMustContain "Another git process seems to be running" } #-----------------------------------------------------------[Main]------------------------------------------------------------ function Main([string[]]$arguments) { GitWithRetry @($arguments) } #-------------------------------------- Startup ------------------------------------ try { Main $args Exit 0 } catch { #Log "*** A fatal error occured: $($_.Exception)" #Read-Host -Prompt "`nA fatal error occurred, press enter to close." exit 1 }


No tenía un archivo inex.lock para eliminar, pero lo que funcionó para mí fue eliminar la verificación de solo lectura de la ventana de atributos del cuadro de diálogo Propiedades de la carpeta.


Obteniendo el error:

Using index info to reconstruct a base tree... Falling back to patching base and 3-way merge... fatal: Unable to create ''/home/user/project/.git/index.lock'': File exists. If no other git process is currently running, this probably means a git process crashed in this repository earlier. Make sure no other git process is running and remove the file manually to continue.

Pero no pude encontrar (ni eliminar) ese archivo .git / index.lock.

En mi caso, ¡git-cola estaba corriendo!

Obviamente crea .git / index.lock de vez en cuando, o causado por la rebase que estaba haciendo en la línea de comando y durante el cual recibí ese error, por lo que git-cola obviamente "perturba" la ejecución de la línea de comando de Git (o algunas operaciones Git CLI).

Esto se resuelve al cerrar git-cola durante una línea de comando git rebase.


Para ventanas:

  • Desde una consola de powershell abierta como administrador, prueba

> rm -Force ./.git/index.lock

  • Si eso no funciona, debe eliminar todos los procesos de git.exe

> taskkill /F /IM git.exe SUCCESS: The process "git.exe" with PID 20448 has been terminated. SUCCESS: The process "git.exe" with PID 11312 has been terminated. SUCCESS: The process "git.exe" with PID 23868 has been terminated. SUCCESS: The process "git.exe" with PID 27496 has been terminated. SUCCESS: The process "git.exe" with PID 33480 has been terminated. SUCCESS: The process "git.exe" with PID 28036 has been terminated. > rm -Force ./.git/index.lock


Probablemente (me ha pasado), el comando dice que no existe porque el usuario actual no tiene permisos para llegar a ese directorio o archivo.

Retire el bloqueo y asegúrese de ejecutar git con el usuario correcto para evitar problemas de permisos.

Si estás en un cuadro GNU / Linux con el comando sudo :

sudo rm project_path / .git / index.lock


Si está utilizando GIT BASH para Windows: -

Ejecute estos dos comandos 1. cd .git 2. rm index.lock


Solo tuve este problema ... Gitbox tuvo la culpa. Entonces tal vez tenía una GUI en ejecución que estaba causando problemas.


También tengo esta pregunta en Windows 10.

cuando intento del ./.git/index.lock , me dice que cannot remove ''index.lock'': Device or resource busy

Finalmente obtuve el motivo:

la computadora tiene dos procesos para usar git:

  • git bash
  • cmder

entonces uso cmder.exe para git commit errores de git commit errores.

entonces la solución es usar git bash o terminar el git bash luego usar cmder.exe


Tenía exactamente el mismo error, pero el problema no era el archivo de bloqueo. En cambio, el problema era que había copiado el contenido de otro repositorio git en este repositorio, incluida la carpeta invisible .git. Por lo tanto, SourceTree estaba confundido acerca de a qué repositorio quería copiar los archivos (había una discrepancia entre el repositorio en el que SourceTree creía estar y el contenido del directorio .git incrustado en el que decía que debería estar).


Tuve el mismo problema recientemente. Si revisa el mensaje de error completo, también dice que hay algún proceso que está usando el proceso git que le impide borrar index.lock. Puede tener IDE abierto como Visual Studio o software relacionado en el que se integra git. Ciérrelo e intente volver a ubicar su archivo. Espero eso ayude.


Tuve este problema con SourceTree al cambiar de rama haciendo doble clic en él. El problema no es muy común y Atlassian lo sabe pero decidieron no solucionarlo.

Afortunadamente, hay una solución. En lugar de hacer doble clic en la rama que desea cambiar, simplemente haga clic con el botón derecho y elija "Finalizar [nombre de la rama]". Debería tener éxito ahora.


Tuve este problema con TortoiseGit con Cygwin en Windows. No pude eliminar eliminar ./.git/index.lock incluso con privilegios administrativos, probé Cygwin y el símbolo del sistema, dijo que el archivo estaba siendo utilizado por otro proceso.

Descubrí que tenía 2 instancias de ejecución de TortoiseProc.exe. Maté a uno de ellos, y cerré todas las ventanas de mi explorador de Windows, y luego pude eliminar el archivo. No sé si matar una instancia de TortoiseProc.exe fue la solución o el cierre de las ventanas del explorador de Windows.


ok, he resuelto este problema

  1. Cierre todas las ventanas que puedan afectar este archivo .git / index.lock
  2. Elimine el archivo .git / index.lock.
  3. Abra su editor de línea de comandos y cd a la ubicación de sus archivos git.

(Si el archivo se crea, simplemente desde el CD en esa ubicación, entonces el problema es su editor. Cierre su editor. No use este editor de nuevo para esta tarea. Abra un tipo diferente de editor: Windows Power Shell o simplemente cmd. Ahora puedes usar los comandos de git para continuar)