Если значение someProperty дорого рассчитать, это потенциально может быть проблемой.
blockquote>Это то, что мы называем преждевременной оптимизацией. В редком случае, когда профилировщик говорит вам, что вычисление свойства настолько необычайно дорого, что его трижды, а не один раз оказывает значительное влияние на производительность, вы добавляете кеширование, как вы описываете. Но если вы не делаете что-то действительно глупое, как факторинговые простые числа или получаете доступ к базе данных в геттере, ваш код, скорее всего, имеет десяток худших недостатков в тех местах, о которых вы никогда не думали.
У меня была эта проблема, и я решил ее, удалив файл .git / ORIG_HEAD, а затем повторил попытку. Файл .git / ORIG_HEAD был 0 байтов вместо ссылки на git, которую он должен был содержать, поэтому я просто избавился от него.
Мне пришлось удалить .git/ORIG_HEAD.lock
, а не (просто) .git/ORIG_HEAD
.
Проверьте git remote prune origin
, упомянутый в дополнение к git gc --prune=now
в « git pull
не удается« невозможно разрешить ссылку »,« невозможно обновить локальную ссылку »».
Если у вас есть .git/rebase-merge
, рассмотрите возможность его удаления (как в « git rebase
и удаленных перебазирующих ветвях, вызывающих сообщение об ошибке« Интерактивная перебазировка уже запущена »»)
Проверьте также содержание .git/HEAD
, как и в , в этом выпуске .
Если это какое-либо повреждение репо (см. « Git поврежденная основная ветка »), попробуйте сначала снова клонировать репо и повторно применить свои текущие модификации поверх этого репо (через git format-patch
если нужно)
Этот ответ не решает проблему ОП, но решает аналогичную.
У меня была похожая проблема (я получил error: cannot lock ref ... is at ... but expected ...
), но это было потому, что в репо было две ветви с одинаковым именем, но с другим регистром. Может быть, этот ответ может помочь людям, которые попадают сюда, я не смог найти ответ в другом месте. Я удалил одну из веток, а затем удалил соответствующую ссылку из: .git/ref/.../branch_name
, затем git pull. Это происходит из-за того, что я работал над файловой системой без учета регистра, в то время как две ветви были перенесены в файловую систему с учетом регистра.
Например, две ветви - BRANCH1
и branch1
, и они оба под origin
дистанционно. Сначала удалите одну из ветвей, например BRANCH1
. Затем удалите его ссылку:
rm .git/refs/remotes/origin/BRANCH1
Затем git pull
, и все должно быть в порядке.
Этот файл создается, когда вы git pull
находитесь в репозитории, чтобы не git pull
в том же репозитории больше, чем один в данный момент, и он удаляется после завершения процесса. Если процесс умирает или становится зомби, то файл не удаляется, и вам нужно вручную проверить, существует ли еще процесс git. Если процесс не существует, вы должны удалить файл и попытаться git pull
снова.
У меня были проблемы с разрешениями Unix, я использовал одно и то же git-репо с двумя разными пользователями (один был root
, другой был моим частным пользователем).
Итак, мне пришлось изменить владельца файла на .git/ORIG_HEAD
на моего личного пользователя, который решил проблему.
chown myuser:mygrp .git/ORIG_HEAD