Заставить Мерзавца использовать меньше дискового пространства?

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

мне напоминают о шаблоне, упомянутом в Crane и книжном Ajax Pascarello в Действии (превосходная книга, между прочим - настоятельно рекомендованный), в котором они иллюстрируют реализацию вид CommandQueue объекта, объявление о вакансиях которого это должно стоять в очереди запросы в пакеты и затем поместить их к серверу периодически.

объект, если я помню правильно, по существу просто содержал массив "команд" - например, для расширения примера, каждый запись, содержащая команду "markAsRead", "messageId" и возможно ссылку на обратный вызов/функцию-обработчик - и затем согласно некоторому расписанию, или на некотором пользовательском действии, объект команды будет сериализирован и отправлен на сервер, и клиент обработал бы последовательную последующую обработку.

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

Обновление : Ага! Я нашел надрез из той самой книги онлайн, вместе с примерами кода (хотя я все еще предлагаю забрать фактическую книгу!). Взглянули здесь , начинаясь с раздела 5.5.3:

Это легко кодировать, но может привести к большому количеству очень маленьких битов трафика к серверу, который неэффективен и потенциально сбивает с толку. Если мы хотим управлять нашим трафиком, мы можем получить эти обновления, и ставят их в очередь локально и затем отправляют их на сервер в пакетах на нашем досуге. Простую очередь обновления, реализованную в JavaScript, показывают в списке 5.13. [...]

очередь поддерживает два массива. queued численно индексный массив, к которому добавляются новые обновления. sent ассоциативный массив, содержа те обновления, которые были отправлены на сервер, но которые ждут ответа.

Вот две подходящих функции - одна ответственная за добавление команд очереди (addCommand) и одна ответственная за сериализацию и затем отправить их на сервер (fireRequest):

CommandQueue.prototype.addCommand = function(command)
{ 
    if (this.isCommand(command))
    {
        this.queue.append(command,true);
    }
}

CommandQueue.prototype.fireRequest = function()
{
    if (this.queued.length == 0)
    { 
        return; 
    }

    var data="data=";

    for (var i = 0; i < this.queued.length; i++)
    { 
        var cmd = this.queued[i]; 
        if (this.isCommand(cmd))
        {
            data += cmd.toRequestString(); 
            this.sent[cmd.id] = cmd;

            // ... and then send the contents of data in a POST request
        }
    }
}

, Который должен получить Вас движение.Удачи!

40
задан rogerdpack 26 September 2017 в 14:07
поделиться

7 ответов

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

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

13
ответ дан 27 November 2019 в 01:19
поделиться

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

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

5
ответ дан 27 November 2019 в 01:19
поделиться

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

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

4
ответ дан 27 November 2019 в 01:19
поделиться

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

git repack -ad

2
ответ дан 27 November 2019 в 01:19
поделиться

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

1
ответ дан 27 November 2019 в 01:19
поделиться

В зависимости от того, что вы хотите делать со своим репозиторием, вы также можете рассмотреть возможность использования следующего параметра 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.
21
ответ дан 27 November 2019 в 01:19
поделиться

Я могу предложить несколько советов:

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

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

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

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

  5. Самый безопасный из всех этих предложений: вы можете попытаться упаковать более агрессивно, используя - -depth и - опция окна низкоуровневого git-repack . См. Также сообщение в блоге Git Repack Parameters Питера де Би в его блоге о сравнении DVCS от 6 июня 2008 г. Или « git gc --aggressive ».

46
ответ дан 27 November 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: