Git на MacOS чувствительность к регистру: не может заблокировать ссылку - PullRequest
0 голосов
/ 29 июня 2019

Я полагаю, что у товарища по команде была ветвь функций с именем Fix/my-fix, а затем она была переименована в fix/my-fix, изменив регистр, и отправила его в наш центральный репозиторий.

Теперь каждый раз, когда я делаю git pull, Я вижу

error: cannot lock ref 'refs/remotes/origin/fix/my-fix': is at addd9e22effc39t86eca875a1db74f4cc2d09747 but expected cec2dce30eb3a5tf370c3d3b39540f9d2e347020
 ! cec2dce30..addd9e22e  fix/my-fix                 -> origin/fix/my-fix  (unable to update local ref)

Если я сделаю git remote prune origin или git fetch --all --prune, то это решит проблему, и я смогу сделать одно успешное нажатие , но затем во второй раз, когда я потянуЯ снова получаю ошибку.Поэтому, по сути, мне нужно prune перед каждым извлечением.

Можно ли как-то решить эту проблему локально, не удаляя его ветви функций из нашего центрального репозитория git?Меня не волнует его ветвь, поэтому приемлемым обходным решением было бы сказать git как-то навсегда его игнорировать;Мне просто нужно иметь возможность последовательно pull без необходимости prune.

Я также пробовал

git update-ref -d refs/remotes/origin/fix/my-fix

и

git gc --prune=now

и теаналогичным образом только временно решил проблему.

Я читал историю о чувствительных к регистру файловых системах в этой статье .

Ответы [ 2 ]

1 голос
/ 29 июня 2019

Лень >> Правильность тут.Предполагая, что на сервере теперь есть только один вариант:

  • Подтолкнуть ваши локальные филиалы.
  • Сдать репо (я предлагаю просто переименовать каталог, чтобы вы могли восстановить)
  • Начните снова с нового git clone

Если вы не хотите передавать все на сервер, вы можете перейти в локальный пустой репозиторий с помощью git init --bare.

1 голос
/ 29 июня 2019

Исходя из вашего описания, версия ветки , написанная заглавными буквами, не должна возвращать (так что одноразовый git fetch -p или git remote prune должен был быть постоянным решением). Однако, если он работает один раз, вы можете просто включить его как действие по умолчанию для этого одного хранилища на вашем Mac:

git config fetch.prune true

или всех ваших репозиториев 1 на вашем Mac:

git config --global fetch.prune true

Это эквивалентно тому, что все git fetch команды будут git fetch -p командами.

(Нет особой причины, по которой не нужно запускать с fetch.prune, установленным на true. Я делаю это сам: моя глобальная конфигурация настроена таким образом.)


1 Технически это будут все репозитории , за исключением , которые локально переопределяются с fetch.prune=false. В общем - есть некоторые конкретные и важные исключения - вещи, которые вы устанавливаете с помощью git config --global, переопределяются всем, что вы устанавливаете с помощью git config, потому что Git делает:

  • Сначала прочитайте файл конфигурации системы, чтобы получить настройки.
  • Прочитайте ваш глобальный файл конфигурации для настроек. Все, что вы установили здесь, что уже было установлено, теперь переопределяется вашими глобальными настройками.
  • Прочтите файл конфигурации вашего репозитория для настроек. Все, что вы установили здесь, которое уже было установлено, теперь переопределяется настройкой хранилища.
  • Применить любые -c key=value аргументы из командной строки. Все, что вы установили здесь, что уже было установлено, теперь переопределяется настройкой командной строки.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...