Ответ 1
Вы хотите попробовать:
git gc --prune=now
См. https://www.kernel.org/pub/software/scm/git/docs/git-gc.html
После клонирования из удаленного репозитория git (при более лучших кодах) Я внес некоторые изменения, совершил и попытался нажать:
git push origin master
Ошибки с:
ошибка: не удается заблокировать существующую информацию /refs
фатальный: git -http-push failed
В этом случае рассматривается уже существующий репозиторий.
То, что я делал раньше, было:
git config –global http.sslVerify false
git init
git remote add [url]
git clone
git commit
В 'bestcodes' у меня нет доступа к журналу git.
Я использую Windows. Детальная ошибка:
C:\MyWorkStuff\Projects\Ruby\MyProject\>git push origin master
Unable to create branch path https://user:[email protected]/myproject/info/
error: cannot lock existing info/refs
fatal: git-http-push failed
Я клонировал раньше, затем изменил код и зафиксировал его.
Вы хотите попробовать:
git gc --prune=now
См. https://www.kernel.org/pub/software/scm/git/docs/git-gc.html
Для меня это сработало:
git remote prune origin
Поскольку этот ответ, похоже, помогает многим людям, я немного углубился в то, что на самом деле происходит здесь. Для этого нужно удалить ссылки на удаленные ветки в папке .git/refs/remotes/origin
. Так что это не повлияет на ваши локальные ветки и не изменит ничего удаленного, но обновит ваши локальные ссылки на удаленные ветки. Кажется, в некоторых случаях эти ссылки могут содержать данные, которые Git не может обработать правильно.
Это случилось со мной, когда мой git remote (bitbucket.org) изменил свой IP-адрес. Быстрое исправление заключалось в удалении и повторном добавлении пульта, тогда все работало, как ожидалось. Если вы не знакомы с тем, как удалить и повторно добавить удаленный доступ в git, выполните следующие действия:
Скопируйте URL-адрес SSH git вашего существующего пульта. Вы можете распечатать его на терминал с помощью этой команды:
git remote -v
который выведет что-то вроде этого:
origin [email protected]:account-name/repo-name.git (fetch)
origin [email protected]:account-name/repo-name.git (push)
Удалите удаленный из локального репозитория git:
git remote rm origin
Добавьте удаленный сервер обратно в локальное репо:
git remote add origin [email protected]:account-name/repo-name.git
Я исправил это, выполнив следующие
git branch --unset-upstream
rm .git/refs/remotes/origin/{branch}
git gc --prune=now
git branch --set-upstream-to=origin/{branch} {branch}
#or git push --set-upstream origin {branch}
git pull
Это предполагает, что ваши локальные и удаленные ветки выровнены, и вы просто получаете ошибку refs как не фатальную.
Выполнение команды git update-ref -d refs/heads/origin/branch
исправило это.
Это, вероятно, разрешено к настоящему времени. Но вот что сработало для меня.
Расположение:
Если заблокированный репозиторий находится на стороне сервера:
Если заблокированный репозиторий только локальный:
Запустите эту команду:
git update-server-info
Исправьте разрешения для вашего (удаленного или/или локального) репозитория, если вам нужно. В моем случае я должен был chmod
до 777
и chown
до apache:apache
Попробуйте снова нажать из локального репозитория:
git push
У меня была эта проблема, потому что я был на ветке, имя которой было похоже на ветку восходящего потока. то есть ветка upstream называлась example-branch
а моя локальная ветка называлась example-branch/backend
. Решением было изменение названия моего локального ветки следующим образом:
git branch -m <new name goes here>
Вот как это работает для меня.
Еще более быстрая альтернатива:
cat /dev/null > /var/lock/apache2/DAVlock
Это звучит как проблема с разрешениями - возможно ли, что вы открыли два окна, выполняющих отдельные права? Возможно, проверьте право собственности на папку .git.
Возможно, проверьте, открыта ли открытая блокировка файла, возможно, используйте lsof для проверки или эквивалент вашей ОС.
В моем случае ветвь была перемещена в подкаталог, и каталог был вызван как ветка. Git был смущен этим. Когда я удалил локальную ветвь (в SourceTree с удалением правой кнопки мыши), все работает как обычно.
Update:
Возможно, вам потребуется отредактировать файл ~/.netrc:
Оригинальный ответ:
Почему вы отключили ssl? Я думаю, что это может быть связано с тем, что вы не можете нажать через https. Я вернул его и снова попытаюсь нажать:
git config –global http.sslVerify true
У меня была эта проблема, когда я пытался создать новую ветвь функции, которая содержала имя старой ветки, например origin - branch1, и я хотел создать функцию branch1. Это было невозможно, но branch1/feature уже была.
Убедитесь, что у вас (git процесс фактически) есть доступ к файлу .git/info/refs
, и этот файл не заблокирован другим процессом.
В случае bettercodes.org решение более поэтично - единственная проблема может быть в правах, назначенных членам проекта. У простых участников нет прав на запись! Убедитесь, что у вас есть права модератора или администратора. Разумеется, это необходимо установить на bestcodes.org в настройках проекта администратором.
Я видел эту ошибку при попытке запустить git filter-branch
для отсоединения многих подкаталогов в новый отдельный репозиторий (как в этом ответе).
Я перепробовал все вышеперечисленные решения, и ни одно из них не сработало. В конце концов я решил, что мне не нужно сохранять все эти теги в новой ветке, и просто запустил:
git remote remove origin
git tag | xargs git tag -d
git gc --prune=now
git filter-branch --index-filter 'git rm --cached -qr --ignore-unmatch -- . && git reset -q $GIT_COMMIT -- apps/AAA/ libs/xxx' --prune-empty -- --all
В моем случае это было связано с именем ветки, которое я уже создал.
Сначала я создал ветку с некоторым именем, которое наверняка не должно существовать, например:
git checkout -b some_unknown_branch
затем я очистил все остальные мои ветки, потому что они были просто ненужным мусором.
git branch | grep -v \* | grep -v master | xargs git branch -D
и затем переименовал мою ветку в имя, которое я намеревался, например:
git checkout -m my_desired_branch_name