Eu escrevi meu próprio gancho pós-mesclagem personalizado, agora adicionei um diretório "ganchos" à pasta principal do meu projeto (já que o git não rastreia as alterações em .git / ganchos), em algum lugar li que posso fazer um link simbólico a partir de ganchos para .git / hooks para não ter que copiar o arquivo de uma pasta para a outra toda vez que alguém o altera, então tentei:
ln -s -f hooks/post-merge .git/hooks/post-merge
Mas não parece funcionar, alguma ideia por quê? "ln hooks / post-merge .git / hooks / post-merge" funciona bem, mas criar um link físico é o mesmo que copiar, eu acho ...
.git/hooks/
que aponta parahooks/post-merge
é resolvido para.git/hooks/hooks/post-merge
, que não existe. Você querln -s -f ../../hooks/post-merge .git/hooks/post-merge
. Ou facilitar a sua vida:ln -s -f ../hooks .git/hooks
. Seu problema não tem nada a ver com o git..git/hooks
.Respostas:
você acabou de usar o caminho errado, deveria ser:
fonte
cd
. Não deveria serln -s ./hooks/
?.git/hooks
como seu diretório de trabalho, então os caminhos relativos devem ser relativos a esse diretório. Isso é mais evidente se você primeirocd
em.git/hooks
antes de fazer a ligação simbólica, e descobrir o caminho relativo de lá.ln
será armazenado como o destino e resolvido em relação à localização do link.cd
entrar no.git/hooks
antes de fazer o link o ajudará a escrever o comando, já que você pode preencher automaticamente para o caminho correto.prepare-commit-msg
. O problema é se eu estou editando a mensagem de commit usando nano, então Ctl + X sai para abortar, git ainda completa um commit de qualquer maneira ao invés de abortar como costumava fazer antes de eu fazer essa mudança. Existe uma maneira de fazer o nano sair sem fazer com que esse commit seja concluído?Embora você possa usar links simbólicos, também pode alterar a pasta de ganchos para seu projeto nas configurações do git com:
Que é local por padrão, então não vai arruinar os ganchos do git para seus outros projetos. Ele funciona para todos os ganchos neste repositório, então é especialmente útil se você tiver mais de um gancho.
Se você já tem ganchos personalizados
.git/hooks/
que não deseja compartilhar com sua equipe, pode adicioná-los aos ganchos / e adicionar um.gitignore
para que não sejam compartilhados.fonte
Mudar de diretório antes de vincular
fonte
cd
:ln -s -f ../../hooks/post-merge
O cálculo do caminho é feito em relação ao link simbólico. Vamos entender usando um exemplo,
ln -s path/to/file symlink/file
Aqui, o caminho para o arquivo deve realmente ser o caminho relativo do caminho do link simbólico.
O sistema realmente calcula o caminho do arquivo como
symlink/path/path/to/file
O comando acima deve ser reescrito como
ln -s ../path/to/file symlink/path
A estrutura da pasta sendo,
fonte
Utilizando o comentário de Michael Cihar, aqui está um exemplo de um script bash que escrevi para simplesmente criar esses links simbólicos. Este script está localizado em git_hooks / dir, que está na raiz do projeto. Meu .git / pasta também está no mesmo nível de diretório.
Meu script deve ser executado de dentro do diretório git_hooks / real. Você pode modificá-lo para se comportar de maneira diferente, se desejar.
Este script criará um link simbólico para qualquer arquivo que não tenha uma extensão de arquivo no diretório git_hooks /. Eu tenho um README.txt neste diretório + este script (chamado symlink.sh). Todos os git hooks atuais são nomeados 'pre-commit', 'pre-push', etc., então eles serão vinculados simbolicamente.
fonte
por que não apenas cp ./hooks/* .git / hooks /
isso funcionou para mim no Mac OS
fonte
I don't have to copy the file from one folder to the other every time someone changes