Gancho global

Gancho global

É possível conectar todas as formas de criar um repositório git? Para que eu possa executar o script quando o repositório for clonado, inicializado… (existem outras maneiras, exceto mover/copiar pasta?).

Minha intenção é rastrear todos os repositórios, para não precisar passar por todos os diretórios para executar alguma ação (principalmente git statusporque às vezes esqueço de confirmar as alterações e git gc --auto).

Responder1

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

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

Usando seu próprio modelo, você pode

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

Qualquer arquivo de configuração que resida em um .gitdiretório pode ser colocado em um modelo para servir como cópia inicial desse arquivo em novos repositórios inicializados a partir do modelo. Suponho que você possa até fornecer objetos e referências iniciais.

Depois de ter um diretório de modelos criado com suas personalizações, você deve informar git inite git cloneonde encontrá-lo. Isso pode ser feito explicitamente com a --templateopção (Git 0.99.4 ou posterior), ou implicitamente com a GIT_TEMPLATE_DIRvariável de ambiente (Git 1.5.0 ou posterior), ou implicitamente definindo a init.templatedirvariável de configuração no “global” (por usuário) ou Arquivos de configuração Git do “sistema” (ou seja, ~/.gitconfigou /etc/gitconfig(varia de acordo com a instalação); Git 1.7.1 ou posterior).

Responder2

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

Duas soluções podem ser consideradas:

  • um modelo git como na resposta de Chris, com um dosganchos do lado do clientecapaz, na primeira utilização, de registrar o repositório git em algum arquivo "central".
    Esse arquivo seria então lido por um script externo (externo ao git), para tornar o relevante git statusou git gco que você deseja.

  • se todos os seus repositórios git forem declarados no mesmo diretório comum, você poderá declarar um repositório git pai global e adicionar todos os sub-repos comosubmódulos.
    Desdegit1.7.0, git statussabe quando um submódulo contém alterações não confirmadas.

informação relacionada