Подтвердить что ты не робот

Сделать Git меньше места на диске?

Каков наилучший способ для git потреблять меньше места на диске?

Я использую git -gc в своих репозиториях (что помогает, особенно если было много коммитов с момента его клонирования), но я бы хотел, чтобы были предложения, если есть какая-либо другая команда для сокращения дискового пространства, используемого git.

Спасибо

4b9b3361

Ответ 1

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

Короткий ответ: Нет: - (

Ответ 2

Есть несколько предложений, которые я могу предложить:

  • Удалить больше не используемые ветки. Они могут фиксировать некоторые коммиты, которые вы не используете и никогда не будете использовать. Однако будьте осторожны, чтобы не удалить ветки, которые вам понадобятся позже (возможно, для обзора или для сравнения неудачных попыток). Сначала резервное копирование.

  • Проверьте, не по ошибке ли вы совершили какой-либо большой двоичный файл (возможно, какой-то сгенерированный файл). Если у вас есть, вы можете очистить его от истории, используя "git filter-branch"... ну, если вы не разделили репозиторий, или стоит усугубить других участников, чтобы переписать историю. Снова: сначала резервное копирование.

  • Вы можете обрезать более агрессивно, отбросив некоторые меры безопасности, используя git gc --prune=now или низкоуровневый git prune. Но будьте осторожны, чтобы вы не удаляли безопасные и резервные копии (например, reflog), которые вам нужны через минуту после уплотнения.

  • Возможно, что расширяет ваш репозиторий - это некорректные файлы в рабочем каталоге. Там "make clean" или "git clean" может помочь (но позаботьтесь о том, чтобы вы не удалили некоторые важные файлы).

  • Самый безопасный из всех этих предложений: вы можете попытаться упаковать более агрессивно, используя --depth и --window вариант низкоуровневого git-repack. См. Также Git Параметры Repack в блоге Pieter de Bie на своем блоге сравнения DVCS с 6 июня 2008 года. Или "git gc --aggressive".

Ответ 3

В зависимости от того, что вы хотите сделать с вашим репозиторием, вы также можете использовать следующую опцию git clone:

   --depth <depth>
       Create a shallow clone with a history truncated to the specified
       number of revisions. A shallow repository has a number of
       limitations (you cannot clone or fetch from it, nor push from nor
       into it), but is adequate if you are only interested in the recent
       history of a large project with a long history, and would want to
       send in fixes as patches.

Ответ 4

Каждый репозиторий git содержит всю историю. Хотя git выполняет довольно хорошую работу по сжатию этого материала, там просто много данных.

"Очевидное", но потенциально не возможное для вас решение - начать новый репозиторий без всякой старой истории.

Ответ 5

Git gc удалит неиспользуемые объекты. Это все, что вы можете сделать.

Вы можете рассмотреть возможность разделения ваших репозиториев, если они становятся слишком большими.

Ответ 6

Git Теперь клон имеет опцию -single-branch, которая позволяет вам проверять одну ветку, не втягивая в историю git других ветвей. Если git потребляет много дискового пространства, потому что у вас много ветвей, вы можете удалить текущую проверку и повторно клонировать репо, используя эту опцию, чтобы восстановить некоторое дисковое пространство. Например:

cd ../
rm -rf ./project
git clone -b master --single-branch [email protected]:username/project.git

Кроме того, если ваш текущий мастер имеет длинную историю и у вас нет каких-либо выдающихся ветвей, которые необходимо объединить обратно в мастер, вы можете создать ветку архива от мастера и создать новый сиротский мастер без git история:

git checkout -b master_archive_07162013  # create and switch to the archive branch
git push origin master_archive_07162013  # push the archive branch to the remote and track it
git branch -D master                     # delete local master
git push --delete origin master          # delete remote master
git remote prune origin                  # delete the remote tracking branch
git checkout --orphan master             # create a new master branch with no history
git commit -m "initial commit"           # re-establish the files in the repo
git push origin master                   # push the new master to the remote

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

Если вы заархивируете свою основную ветку, а затем git мастер клонирования с одной ветвью, ваш чек должен быть намного меньше.

Ответ 7

Вы можете переупаковать ваш репозиторий. Однако я думаю, что он называется git gc

git repack -ad

Ответ 8

git prune может быть подсказкой. он очищает репозиторий от недостижимых коммитов (git gc не вызывает его)

Ответ 9

Если вам не нужно сохранять всю историю фиксации локально, вы можете использовать мелкий клон:

git clone --depth=1 [url_of_repo]

Я часто использую это при клонировании проектов github, если меня интересует только последний набор файлов, а не в истории.

По-видимому, выборка и толкание - это не поддержка мелких клонов, но я смог успешно нажать и потянуть за собой изменения в репозитории github, чтобы это могло работать и в вашем случае. (Но, без сомнения, вы столкнетесь с трудностями, если хотите объединить ветки, но не имеете базового фиксации в истории.)

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

Ответ 10

Метод доказательств, если вам не нужен размер загрузки, - это удалить репозиторий (вы можете просто удалить всю папку) и добавить его снова. Убедитесь, что все, что нужно сохранить, будет перенесено на сервер!

Ответ 11

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

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

  • Таким образом, один из способов экономии дискового пространства - удалить рабочие файлы из незанятых проектов, над которыми вы не работаете. Хороший способ сделать это - создать пустую ветку, которую вы можете переключить, когда вы не работаете над проектом.

  • Еще одна важная вещь, которую вы можете сделать - это удалить абсолютно все, кроме файла .git/config. Или просто удалите самую большую папку, git history:

    rm -rf .git/objects
    

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