Forçando o repo remoto a comprimir (GC) com Git
-
25-09-2019 - |
Pergunta
Estou usando o git na versão uma série de arquivos binários. Eles se compactam muito bem, mas meus repositórios centrais não parecem estar compactados quando eu o empurro para eles. Eles estão comendo uma quantidade decente da minha cota, então eu estava olhando para ver se havia uma maneira de forçar o repositório remoto a fazer um GC.
Isso é possível? Eu estou trabalhando em Locker do projeto Então, não acredito que tenha acesso SSH para entrar e me repo. Alguma ideia? Obrigado.
Solução
Se você não pode correr git gc
você mesmo, você terá que enganá -lo automaticamente. Você não terá um controle tão total sobre ele, mas poderá pelo menos poder executá -lo.
git gc --auto
é executado por vários comandos; O relevante aqui é o Pack, que é executado no controle remoto para receber um pacote como parte de um empurrão. gc --auto
Somente reembalam quando há objetos soltos suficientes; O corte é determinado pelo parâmetro de configuração gc.auto
, e padrão para 6700.
Se você tiver acesso ao GitConfig do controle remoto, poderá definir esse corte para 1 temporariamente. Definitivamente deve haver pelo menos 1 objeto solto no repo, de modo que deve causar gc --auto
Para fazer suas coisas na próxima vez que você pressionar.
Se você não tiver acesso ao GitConfig do controle remoto, tudo o que consigo pensar é criar artificialmente um monte de objetos soltos. Você pode fazer isso criando uma ramificação, cometendo um monte de pequenos arquivos (com conteúdo diferente), empurrando a ramificação para o controle remoto e excluindo a filial do controle remoto. (Importante variar o conteúdo, ou eles apenas usarão os mesmos blobs.) Enxágue e repita.
Outras dicas
Isso é realmente um problema que eles precisam resolver do lado deles. Eles podem fazê-lo com um gancho pós-recepção ou um trabalho de Cron ou algo semelhante, mas se deveriam manter seus repositórios, isso faz parte dele por inúmeras razões.
Forma git-gc
página de homem:
Alguns comandos Git podem executar automaticamente o Git GC; Veja a bandeira -AUTO abaixo para obter detalhes.
E mais adiante:
--auto
Com esta opção, o Git GC verifica se é necessária alguma limpeza; Caso contrário, ele sai sem executar nenhum trabalho. Alguns comandos Git executam Git GC --auto após executar operações que poderiam criar muitos objetos soltos.
É necessário tarefas domésticas se houver muitos objetos soltos ou muitos pacotes no repositório. Se o número de objetos soltos exceder o valor da variável de configuração do GC.Auto, todos os objetos soltos serão combinados em um único pacote usando o Git Repack -d -l. Definir o valor de GC.Auto como 0 desativa a embalagem automática de objetos soltos.
Se o número de pacotes exceder o valor do gc.autopacklimit, os pacotes existentes (exceto aqueles marcados com um arquivo .Keep) serão consolidados em um único pacote usando a opção -a de reembalagem Git. Definir gc.autopacklimit como 0 desativa a consolidação automática de pacotes.
E no final:
O comando Git GC --auto executará o pré-AUTO-GC gancho. Veja Githooks (5) para obter mais informações.