Preciso de ajuda com um script Bash que adicionará automaticamente o nome do branch do git como um hash nas mensagens de confirmação.
git
bash
git-branch
Tomer Lichtash
fonte
fonte
git branch | grep ...
métodos para obter o branch atual são a maneira errada de fazer isso. Consideregit symbolic-ref -q HEAD
(como mostrado nesta resposta ) ougit rev-parse --abbrev-ref HEAD
. O comando symbolic-ref falhará se você estiver em um HEAD separado, então se você deseja detectar esse caso, use-o. Caso contrário, o método rev-parse --abbrev-ref é provavelmente o melhor.Respostas:
Use o
prepare-commit-msg
oucommit-msg
githook .Já existem exemplos em seu
PROJECT/.git/hooks/
diretório.Como medida de segurança, você terá que habilitar manualmente esse gancho em cada repositório que deseja usá-lo. Porém, você pode confirmar o script e copiá-lo em todos os clones para o
.git/hooks/
diretório.fonte
.git/hooks/prepare-commit-msg.sample
. =) Tudo que você precisa modificar (depois de seguir as instruções nos comentários) é copiar e colar qualquer solução de stackoverflow.com/questions/1593051/… que desejar.git/hooks/prepare-commit-msg.sample
contém três exemplos. Um para comentar a seção de conflitos, adicionandogit diff --name-status -r
saída a ela e adicionando linhas Signed-off-by ... Sem adicionar nome de ramificação à mensagem de confirmação. Então fui forçado a escrever meu próprio livro.you will have to manually enable such a hook on each repository you wish to use it
significa que você precisa dar permissões de execução ao FILE? Em caso afirmativo, posso editar a resposta para incluir isso (ou você poderia, por favor)?Aqui está meu
commit-msg
script como exemplo:Cria a seguinte mensagem de confirmação:
Estou usando o número do problema porque a
branch_name
descrição do problema é colocada no comandobranch_description
usinggit branch --edit-description [branch_name]
.Mais sobre as descrições dos ramos você pode encontrar neste Q&A .
O exemplo de código é armazenado no seguinte Gist .
fonte
echo $NAME: "$(cat $1)" > $1
. Isso funciona porque a razão pela qual as novas linhas estavam sendo perdidas é que a echo estava tratando cada linha de$(cat "$1")
como um novo argumento e ecoando cada uma com um espaço entre eles. Rodando$(cat "$1")
com aspas duplas, echo trata a saída cat como um único argumento. Também não acho que seja necessário citar,$1
pois seu valor é.git/COMMIT_EDITMSG
Um script um pouco mais simples que adiciona o nome do branch à mensagem de confirmação antes de editá-la. Então, se você quiser mudar ou remover, você pode.
Crie este arquivo .git / hooks / prepare-commit-msg :
fonte
sed: 1: ".git/COMMIT_EDITMSG": invalid command code .
ao usar isso.sed -i '.bak' "1s/^/$branchName : \n/" $1
@
como umsed
separador em vez de,/
já que as barras normais são mais prováveis de aparecer no nome do branch ou na mensagem de confirmação, bagunçando tudosed
.Você pode fazer isso com uma combinação dos ganchos prepare-commit-msg e pre-commit.
.git / hooks / prepare-commit-msg
.git / hooks / pre-commit
Definir permissões
fonte
--amend
por exemplo. Em vez de usar,echo
você deve usarsed
. Aqui está em uma linha:sed -i "1s@^@$(git branch | grep '^\*' | cut -b3-) @" $1
adicione o código abaixo no arquivo prepare-commit-msg.
Ele adicionará o nome do branch para enviar mensagem, exceto mesclar-commit. O merge-commit tem informações de branch por padrão, então o nome de branch extra é desnecessário e torna a mensagem feia.
fonte
Inspirado pela resposta de Tim que se baseia na resposta principal, acontece que o gancho prepare-commit-msg toma como argumento o tipo de confirmação que está ocorrendo . Como visto na mensagem padrão prepare-commit-se $ 2 for 'merge' então é um commit de mesclagem. Portanto, a opção de maiúsculas e minúsculas pode ser alterada para incluir a função addBranchName () de Tim.
Incluí minha própria preferência sobre como adicionar o nome do branch e todas as partes não comentadas do
prepare-commit-msg.sample
gancho padrão .fonte
Se você quiser torná-lo global (para todos os projetos):
Crie um
git-msg
arquivo com o conteúdo da resposta de shytikov e coloque-o em alguma pasta:Agora habilite os ganchos:
e
git init
novamente em cada projeto que você deseja usar.fonte
Eu estava tendo problemas para fazer essas soluções funcionarem no MacOS devido ao fato de que ele usa BSD em
sed
vez de GNUsed
. Eu consegui criar um script simples que faz o trabalho. Ainda usando.git/hooks/pre-commit
:Isso pressupõe um padrão de nomenclatura de ramificação semelhante a
functional-desc_JIRA-NUMBER
. Se o nome da sua agência for apenas o número do seu tíquete Jira, você pode simplesmente se livrar de tudo, do pipe ao f2. Também requer que você tenha um arquivo nomeado.gitmessage
em seu diretório inicial.fonte
Caso queira adicionar o ticket do JIRA na mensagem de commit, use o script abaixo.
Envie uma mensagem como
PROJECT-2313: Add awesome feature
Isso requer que o nome do seu ramo comece com o tíquete jira.Esta é uma combinação das seguintes soluções:
Ele foi modificado para OS X, com o
sed -i '.bak'
e funciona bem no SourceTree.https://gist.github.com/georgescumihai/c368e199a9455807b9fbd66f44160095
fonte