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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top