Gancho global do git

4

É possível ligar todas as formas de criar o repositório do git? Então eu posso executar o script quando o repo é clonado, inicializado ... (existem outras maneiras, exceto mover / copiar pasta?).

Minha intenção é rastrear todos os repos, então não preciso percorrer todos os diretórios para executar alguma ação (principalmente git status , pois às vezes esqueço de confirmar as alterações e git gc --auto ).

    
por tig 16.07.2010 / 01:13

2 respostas

4

Ganchos são (atualmente) configurados exclusivamente por repositório, então não pode haver ganchos ativos antes de um repositório ser criado.

Se você quiser apenas inicializar algumas configurações específicas do repositório de forma idêntica para todos os novos repositórios, você poderá usar o mecanismo de modelo de repositório .

Usando seu próprio modelo, você pode

  • instalar ganchos ativados (fornecendo um arquivo <template‑dir>/hooks/<hook‑name> ),
  • definir variáveis de configuração (fornecendo um arquivo <template‑dir>/config ) e
  • configurar regras ou atributos de exclusão por repositório (fornecendo um arquivo <template‑dir>/info/exclude ou <template‑dir/info/attributes> ).

Qualquer arquivo de configuração que resida em um diretório .git pode ser colocado em um modelo para servir como a cópia inicial desse arquivo em novos repositórios inicializados a partir do modelo. Eu suponho que você poderia até fornecer objetos iniciais e refs.

Quando você tiver um diretório de modelos criado com suas personalizações, deverá informar git init e git clone onde encontrá-lo. Isso pode ser feito explicitamente com a opção --template (Git 0.99.4 ou posterior), ou implicitamente com a variável de ambiente GIT_TEMPLATE_DIR (Git 1.5.0 ou posterior), ou implicitamente definindo a variável de configuração init.templatedir no Arquivos de configuração Git "globais" (por usuário) ou "sistema" (ou seja, ~/.gitconfig ou /etc/gitconfig (varia de acordo com a instalação); Git 1.7.1 ou posterior).

    
por 16.07.2010 / 05:42
0

Você não pode "rastrear" git repos (como em "perguntar a algum referencial central a lista de git repo atualmente ativa)." Cada repositório git é independente do outro.

Duas soluções podem ser consideradas:

  • um modelo git como na resposta de Chris, com um dos ganchos do lado do cliente capazes, no primeiro uso, para registrar o repositório do git em algum arquivo "central".
    Esse arquivo seria então lido por um script externo (externo ao git), para tornar relevante o git status ou git gc que você deseja.

  • se todos os seus git repos forem declarados no mesmo diretório comum, você pode declarar um repositório git pai global e adicionar todos os sub-repos como submódulos .
    Desde git1.7.0 , git status sabe quando um submódulo contém alterações não confirmadas.

por 02.08.2010 / 09:05

Tags