fatal: невозможно создать 'C: /Users/TONY/lambdaschoolprecourse/precourse/.git/index.lock': файл существует [дубликат]

В основном нет. Выраженные члены доступны только тогда, когда у вас есть один оператор для выполнения. В этом случае у вас два.

Я имею в виду, что вы могли использовать кортежи, но я настоятельно рекомендую против этого:

// DO NOT USE THIS CODE - IT'S JUST TO DEMONSTRATE THE FEASIBILITY
public class Person
{
     private readonly (string name, int age) tuple;

     public string Name => tuple.name;
     public int Age => tuple.age;

     public Person(string name, int age) => tuple = (name, age);
}

Это работает, потому что вы Теперь у нас появилось только одно утверждение (tuple = (name, age);). Но вы, конечно, не должны изменять свои поля так, чтобы вы могли использовать конструктор с выраженным выражением.

(Как показал Дэвид, вы можете построить кортеж, а затем деконструировать его в автоматические реквизиты только для чтения напрямую, это немного приятнее, но это все равно не стоит делать IMO.)

135
задан asahi 15 February 2012 в 05:04
поделиться

27 ответов

Для Windows:

  • Из консоли командной строки, открытой как admin, попробуйте
> rm -Force ./.git/index.lock
  • Если это не работает, вы должны убить все процессы 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
24
ответ дан Andrei Epure 21 August 2018 в 18:58
поделиться
  • 1
    Параметр не может быть обработан, потому что имя параметра «f» неоднозначно. – Mike Palmice 7 February 2018 в 23:21
  • 2
    спасибо, @MikePalmice, я обновил до -Force. Кажется, они изменили API – Andrei Epure 13 February 2018 в 11:21

Это может быть старый ответ, но я надеюсь, что это будет более полезно для следующего, кому нужно это решение.

В linux / unix / gitbash / cygwin попробуйте

rm -f .git/index.lock

В командной строке Windows попробуйте:

del .git\index.lock

Надеюсь, что это поможет, я нашел это решение здесь: Fatal: не удалось create '... git / index.lock' Файл существует

230
ответ дан Anup Kattel 21 August 2018 в 18:58
поделиться
  • 1
    Я вижу, что иногда файл блокировки автоматически удаляется. Любая подсказка, почему этот файл нужно иногда удалять вручную? – Nrj 6 January 2015 в 11:28
  • 2
    У меня нет index.lock, что делать? :( – Alex C 14 May 2015 в 17:56
  • 3
    Учитывая, что проблема в том, что он не смог удалить файл, почему вы думаете, что попытка удалить файл должна быть решением? – skyking 11 March 2016 в 07:46
  • 4
    Для меня закрытие и открытие SourceTree разрешило проблему ... Временно полагаю. – Andrew 4 August 2016 в 13:34
  • 5
    На этот раз также потребовалось закрытие PHPStorm. Может быть, что-то там запирает. – Andrew 2 September 2016 в 13:51

Недавно у меня была такая же проблема. Если вы проверите все сообщение об ошибке, оно также сообщит, что есть какой-то процесс, который использует процесс git, который блокирует вас от удаления index.lock. У вас может быть IDE открытым, как Visual Studio или связанное с ним программное обеспечение, в которое интегрировано git. Закройте его и попробуйте перезаписать файл. Надеюсь, что это поможет.

0
ответ дан Borj 21 August 2018 в 18:58
поделиться

Вероятно (это случилось со мной), команда ls говорит, что она не существует , потому что у текущего пользователя нет разрешений для доступа к этому каталогу или файлу.

Удалите блокировку и убедитесь, что вы выполняете git с нужным пользователем, чтобы избежать проблем с правами.

Если вы находитесь в поле GNU / Linux с sudo :

sudo rm project_path / .git / index.lock

5
ответ дан caligari 21 August 2018 в 18:58
поделиться
  • 1
    В Windows вы можете проверить, доступна ли папка только для чтения с помощью атрибутов right-click- & gt; Properties- & gt; Attributes. – Matt 26 January 2016 в 23:25
  • 2
    Учитывая, что проблема в этом вопросе заключалась в том, что файл был несуществующим, почему вы думаете, что попытка удалить файл должна быть решением? – skyking 11 March 2016 в 07:47
  • 3
    @skyking Проблемы с разрешением показывают ту же ошибку. Действительно, я пришел к этому вопросу, потому что название. Я написал свой ответ как одно из возможных решений, и некоторые голоса подтверждают, что это происходит и с другими людьми;) – caligari 12 March 2016 в 10:36
  • 4
    @caligari Не совсем. Проблема разрешения дает еще один ответ на ls project_path/.git/index.lock. – skyking 14 March 2016 в 12:00

Решение для меня состояло в том, чтобы удалить файл .index и позволить Git перестроить другой.

1
ответ дан CAR182 21 August 2018 в 18:58
поделиться

Если вы на самом деле не предназначались для root для вашего репо, это звучит так, будто вы случайно запускали команду Git как root (возможно, даже начальный клон / init). Если вы хотели это сделать, вам придется жить с запуском всех команд Git в репо с правами root. Если вы этого не сделали, запустите sudo chown your-user[:your-group] -R .git, чтобы взять на себя ответственность за это, а затем посмотреть, все ли работает.

3
ответ дан Cascabel 21 August 2018 в 18:58
поделиться
  • 1
    В моем случае я испортил режим файлов и каталогов внутри .git, и я исправил их с помощью: find .git -type f -exec chmod 644 {} \;, а также find .git -type d -exec chmod 755 {} \; я испортил режимы при перемещении моего проекта git с одного компьютера на другой – user3405291 16 April 2017 в 14:23
  • 2
    В моем случае я добавил разрешение на запись в .git-файлы sudo chmod g+w .git -R – Beatriz Fonseca 31 October 2017 в 18:53

Несколько клиентов git, работающих в одном локальном репозитории, конкурируют за эту блокировку. Каждый клиент должен ждать, пока блокировка не будет освобождена другой стороной, чтобы быть хорошим гражданином. Для нас SourceTree или MSVS, похоже, выполняют некоторое обслуживание в фоновом режиме, пока мы выполняем большие скрипты фиксации.

Возможно, сам git должен поддерживать аргумент '--retriesWhenLocked 5' для поддержки попыток. или даже по умолчанию для этого при запуске вручную.

Вот оболочка PowerShell вокруг git с именем «gitr», которая повторяет попытку, пока index.lock не исчезнет, ​​используя по умолчанию 5 попыток, 3 секунды между каждым. Он никогда не удаляет index.lock, предполагая, что пользователь должен вмешаться. Он был извлечен из большого скрипта фиксации.

  • Скопируйте сценарий в C: \ bin и добавьте C: \ bin в $ PATH.
  • Из PS1> gitr --help
  • Из 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
}
1
ответ дан crokusek 21 August 2018 в 18:58
поделиться

Получение ошибки:

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.

Но я не смог найти (или удалить) этот файл .git / index.lock.

В моем случае git-cola был запущен!

Он явно создает этот .git / index.lock каждый раз в то время, или вызванный rebase, который я делал в командной строке, и в течение которого я получил эту ошибку - так что git-cola очевидно, «нарушает» запуск командной строки Git (или некоторые операции Git CLI).

Это решается путем закрытия git-cola во время перестановки git командной строки.

0
ответ дан cslotty 21 August 2018 в 18:58
поделиться
  1. проверьте, если git все еще работает (ps -ef | grep git)
  2. , если нет, удалите заблокированный файл
  3. , если да, сначала уничтожьте git-процесс .
9
ответ дан Daniel YC Lin 21 August 2018 в 18:58
поделиться

У меня была такая же ошибка, но проблема была не в файле блокировки. Вместо этого проблема заключалась в том, что я скопировал содержимое другого git-репо в это репо, в том числе .git-невидимую папку. Итак, SourceTree был смущен, о том, какой репо я хотел бы сгенерировать файлы (там было несоответствие между репо SourceTree, в котором я был, и тем, что содержимое моего встроенного .git-файла говорит, что я должен быть).

1
ответ дан dmohr 21 August 2018 в 18:58
поделиться

Что для меня было:

git rebase --abort и перезапустить rebase.

Как упоминалось Andrew , я также использовал PHPStorm, когда это произошло , Не нужно было закрывать его.

1
ответ дан Geert 21 August 2018 в 18:58
поделиться

Я создал пустой файл index.lock, удалив его с помощью команды windows

1
ответ дан Gustavo Soares 21 August 2018 в 18:58
поделиться

У меня также есть этот вопрос в Windows 10.

, когда я пытаюсь del ./.git/index.lock, он сказал мне cannot remove 'index.lock': Device or resource busy

Наконец-то я получил причину:

у компьютера есть два процесса для использования git:

  • git bash
  • cmder

, поэтому я использую cmder.exe для git commit будут возникать ошибки.

, поэтому решение используется git bash или Завершить git bash, затем используйте cmder.exe

2
ответ дан ihewro 21 August 2018 в 18:58
поделиться

В моем приложении sourceTree я не могу выполнить фиксацию или переключиться на любой другой commit / brach. Это время показывает ошибку, как

fatal: Невозможно создать blah blah blah ..

Я просто разрешаю это с помощью папки goto .git (в Project Explorer Dir). И удалите Индекс ----- [тип файла: LOCK-файл]. Теперь я возвращаю весь доступ в sourceTree ..

, пожалуйста, убедитесь, что файл блокировки индекса .. предположим, что вы не получаете тип файла, меняете Настройки просмотра файлов на компьютере. Примечание: папка .git обычно является скрытым типом папки.

1
ответ дан Karthikeyan Dheshnamoorthy 21 August 2018 в 18:58
поделиться

В диспетчере задач:

  1. разработать весь процесс
  2. Убить все git-процессы
  3. Удалить заблокированный файл
0
ответ дан MammothDevelopper 21 August 2018 в 18:58
поделиться

У меня возникла проблема с SourceTree при переключении ветки, дважды щелкнув по ней. Проблема не очень распространена, и Atlassian знает об этом , но они решили не исправлять ее.

К счастью, есть решение. Вместо двойного щелчка по ветке, которую вы хотите переключить, просто щелкните правой кнопкой мыши и выберите «Checkout [название ветки]». Теперь это должно преуспеть.

2
ответ дан Mark 21 August 2018 в 18:58
поделиться
  • 1
    спасибо, щелкните правой кнопкой мыши & gt; выезд работает как альтернатива. сообщение об ошибке довольно вводит в заблуждение, особенно когда index.lock не существует. – Ernest 30 September 2016 в 21:31

Иногда другой клиент Git может вмешиваться при наличии нескольких установленных.

Т.е. убедитесь, что с Диспетчером задач или Get-Process, что TGitCache из TortoiseGit не активен в фоновом режиме.

0
ответ дан MovGP0 21 August 2018 в 18:58
поделиться

Если вы используете GIT BASH для Windows: -

Запустите эти две команды: 1. cd .git 2. rm index.lock

-2
ответ дан Mrinmaya 21 August 2018 в 18:58
поделиться
  • 1
    Учитывая, что проблема в том, что он не смог удалить файл, почему вы думаете, что попытка удалить файл должна быть решением? – skyking 11 March 2016 в 07:45

Просто эта проблема ... Gitbox был виноват. Возможно, у вас был запуск графического интерфейса, который вызывал проблемы.

5
ответ дан MyztikJenz 21 August 2018 в 18:58
поделиться
  • 1
    Это не был графический интерфейс, но у меня был отдельный процесс, который записывался в каталог проекта. Я не мог понять это, и это сводило меня с ума. – asahi 17 February 2012 в 00:32
  • 2
    Похоже, GitX тоже любит эту проблему. – Glutexo 17 August 2015 в 12:28
  • 3
    6 лет спустя для меня был Atom – Milk 14 June 2018 в 19:54

Это происходит, когда вы отменяете выделение с начала координат посередине.

, поэтому вы можете вручную удалить файл index.lock из вашего каталога .git.

rm -f ./.git/index.lock

cd в каталог проекта и запустите эту команду.

7
ответ дан Rahul Vivek 21 August 2018 в 18:58
поделиться
  • 1
    Учитывая, что проблема в том, что он не смог удалить файл, почему вы думаете, что попытка удалить файл должна быть решением? – skyking 11 March 2016 в 07:45
  • 2
    +1 @skyking. Удаление файла очевидно, проблема в том, что файл не удаляется, и проблема сохраняется. – Catsunami 9 March 2018 в 21:36

У меня была эта проблема с TortoiseGit с Cygwin в Windows. Я не смог удалить remove ./.git/index.lock даже с правами администратора, я попробовал оба Cygwin и командной строки, он сказал, что файл использовался другим процессом.

Я обнаружил, что у меня было 2 экземпляра TortoiseProc.exe. Я убил одного из них и закрыл все окна окон, а затем смог удалить файл. Я не знаю, было ли убийство экземпляра TortoiseProc.exe решением или закрытием окон Windows Explorer.

1
ответ дан Samuel 21 August 2018 в 18:58
поделиться

del .git\index.lock работал для меня.

Я столкнулся с этой проблемой, проверяя новую ветку от главной ветки.

После удаления файла index.lock произошла ошибка при загрузке.

4
ответ дан Sid 21 August 2018 в 18:58
поделиться

ok Я решил эту проблему.

  1. Закройте все окна, которые потенциально влияют на этот файл .git / index.lock
  2. Удалите .git / index.lock file.
  3. Откройте ваш редактор командной строки и cd в адрес ваших git-файлов.

(Если файл создан, просто из cd в это место, тогда проблема заключается в вашем редакторе. Закройте редактор. Не используйте этот редактор для этой задачи. Откройте другой вид редактора - оболочку оболочки Windows или просто cmd. Теперь вы можете использовать команды git для продолжения)

4
ответ дан Steve Tomlin 21 August 2018 в 18:58
поделиться

Иногда Git создает файл блокировки, связанный с вашим репо, когда вы вносите какие-либо изменения или, скорее всего, когда используете вспомогательные модули. Сообщение об ошибке покажет вам путь к файлу блокировки. Исправить: просто вручную перейдите на путь в терминале и удалите файл блокировки с помощью $ rm index.lock

Это должно помочь.

4
ответ дан Suhail Bhat 21 August 2018 в 18:58
поделиться

У меня не было файла index.lock для удаления, но для меня работало удаление проверки только для чтения из окна «Атрибуты» диалогового окна «Свойства папки».

1
ответ дан user3071434 21 August 2018 в 18:58
поделиться

Запуск git 2.8.4 (июнь 2016) , этого больше не должно быть.

См. issue 755 , который также должен облегчить проблему ( commit 2db0641 ):

Убедитесь, что временные дескрипторы файлов не наследуются дочерними процессами

Предотвращение наследования дочерних процессов с помощью дескриптора index.lock .

1
ответ дан VonC 21 August 2018 в 18:58
поделиться

На платформе Windows, использующей Visual Studio 2015 RC (v4.6.00057) в сочетании с SourceTree (v1.6.14.0), также будет указана эта ошибка.

Решение. Предполагая, что вы хотите использовать исходное дерево в качестве менеджера исходного кода, просто отключите поставщика управления источником внутри Visual Studio следующим образом:

  1. Перейдите в меню «Инструменты»> «Параметры»> Source Control
  2. Выберите плагин управления токовым источником как: None
19
ответ дан WLCyPHlSpC 21 August 2018 в 18:58
поделиться
  • 1
    это сработало для меня – sabotero 5 February 2016 в 16:44
  • 2
    Несмотря на то, что мой VS не должен даже обращаться к этим репозиториям, это было проблемой в любом случае при перезагрузке с помощью SourceTree. – Kajetan Abt 21 March 2016 в 12:14
  • 3
    Спасибо, проблема все еще существует с обновлением 3. – Elger Mensonides 5 December 2016 в 12:03
Другие вопросы по тегам:

Похожие вопросы: