2016-03-22 4 views
0

Я работаю с удаленным репозиторием, у которого есть довольно большие файлы. Тем не менее, я могу совершать, толкать и тянуть без проблем.Pushing tag в git дает ошибку: размер файла превышает лимит

Однако, когда я пытаюсь добавить аннотированный тег

git tag -a v0.0.1 -m 'First tag, to a very beta version.' 

, а затем вставьте его в репо, я получаю:

$ git push origin v0.0.1 
Counting objects: 1, done. 
Writing objects: 100% (1/1), 181 bytes | 0 bytes/s, done. 
Total 1 (delta 0), reused 0 (delta 0) 
remote: Size of file '...' in commit ... is over limit (20000000 bytes) 
... 
remote: Size of file '...' in commit ... is over limit (20000000 bytes) 
remote: Size of file '...' in commit ... is over limit (20000000 bytes) 
To https://....git 
! [remote rejected] v0.0.1 -> v0.0.1 (pre-receive hook declined) 
error: failed to push some refs to 'https://....git' 

Некоторые подробнее:

  1. ветвь, над которой я работаю, больше не имеет этих больших файлов. Эти большие файлы все еще находятся в истории, а в другой ветке, но не в последних коммитах.
  2. Локальный репозиторий - это одноразовый клон с -depth = 5, поэтому эти большие файлы, которые выдают ошибку, не должны быть вообще в этом локальном репо.

Благодарим за помощь.

ответ

1

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

Начнем с краткого обзора. Это:

remote: Size of file '...' in commit ... is over limit (20000000 bytes)

приходит из предварительно получить крюк (или потенциально уду обновления, но мы видим pre-receive в remote rejected линии). Эти крючки, как правило, на месте, чтобы остановить людей от случайного добавления коммитов с большими двоичными файлами или файлами базы данных или еще чего-то. Код, найденный в этом крюке, выполняет обход графика с использованием предлагаемого ссылочного обновления (или создания), и в этом случае явно принимает тэг , создавая операцию и проходящую кучу существующих коммитов, некоторые из которых имеют большие файлы , и, следовательно, выплескивать сообщения об ошибках и отклонять push.

Вы упоминаете, что

The branch I'm working on doesn't have these big files anymore. These big files are still in the history, and in another branch, but not on recent commits.

Хотя филиала не на самом деле объекты-вы толкая тег, а не филиал, поэтому ссылка обновление пульт дистанционного управления получает refs/tags/v0.0.1 Теперь -мо знаю что там больших файлов в репозитории (на удаленном, хотя и не локально из-за ограниченной глубины клона).

Другой ключевой ключ здесь заключается в следующем:

Counting objects: 1, done. 
Writing objects: 100% (1/1), 181 bytes | 0 bytes/s, done. 
Total 1 (delta 0), reused 0 (delta 0) 

Ваш толчок посылает один (1) объект, 181 байт, а не дельта-прижимались любых других объектов. Это, конечно, объект аннотированных тегов, и, очевидно, здесь нет файлов размером 20 мегабайт! Таким образом, удаленный должен найти, чтобы найти их как следствие следования цели объекта тега (который должен был состоять из HEAD в момент создания тега: эта фиксация должна уже существовать на пульте дистанционного управления, так как ваш push не отправляет ее) , и - неверно - вывод о том, что некоторые фиксации, уже находящиеся в удаленном репозитории, являются новыми и должны быть ошибочными.

Смежные вопросы