volatile
необходим, если Вы читаете из места в памяти, в которую, скажем, может записать абсолютно отдельный process/device/whatever.
я раньше работал с двухпортовым поршнем в многопроцессорной системе в прямом C. Мы использовали аппаратные средства, управляемые 16 битовых значений как семафор для знания, когда другой парень был сделан. По существу мы сделали это:
void waitForSemaphore()
{
volatile uint16_t* semPtr = WELL_KNOWN_SEM_ADDR;/*well known address to my semaphore*/
while ((*semPtr) != IS_OK_FOR_ME_TO_PROCEED);
}
Без volatile
, оптимизатор рассматривает цикл как бесполезный (Парень никогда не устанавливает значение! Он гаек, избавьтесь от того кода!) и мой код продолжился бы не получив семафор, вызвав проблемы позже.
Какая часть gc
важна для вас? Вы можете попробовать запустить части git-prune
и git-repack
отдельно. При использовании git-prune
обязательно укажите дату окончания с помощью параметра - expire
. Если в вашем репо много незакрепленных объектов, было бы полезно сначала убрать их с дороги. *
С помощью git-repack
вы, возможно, можете изменить настройки глубины и окна, чтобы получить что-то достаточно маленькое, чтобы работать в вашем пространстве.
* Я не претендую на полное понимание всех связанных с этим проблем,
Похоже, лучшее решение - попросить ИТ-отдел увеличить квоту, хотя мне все еще интересно услышать обходные пути. Сегодня они были щедры, а завтра ... :)
git prune
- отличное предложение, добрый звонок, Джефроми.
Еще вы можете сжать другие файлы; git gc
; распаковать.
7z
получает потрясающее сжатие, но не сохраняет жесткие ссылки и владельца / группу Unix, IIRC. Если у вас есть квота, вероятно, все файлы принадлежат вашей учетной записи, так что не беспокойтесь о первом счете. Но самым безопасным является tar c --lzma
, если он у вас есть, или просто tar czf
или cjf
. Если у вас много маленьких файлов, ммм, внешняя (?) Фрагментация до размера блока может быть значительной.