Como confirmar arquivos modificados pelo gancho pre-commit no Git

3

Estou lutando por algumas horas para fazer metadados de armazenamento do git (permissões / flags / etc) dos arquivos usando o metastore e eu uso hooks/pre-commit para isso.

O script é invocado corretamente e o arquivo "metadata" é modificado, mas não adicionado ao commit.

Eu tentei ligar:

git add ./metadata 

e

git add -u ./metadata

do script de pré-consolidação, mas não há efeito. O arquivo acaba sendo descomprometido e marcado como modificado ou encenado, MAS não confirmado, nunca.

Existe alguma maneira de fazer isso funcionar? Basicamente, eu quero que ele atualize e confirme o arquivo "metadata" em cada commit (de preferência, como o mesmo commit, para que eu possa restaurar todas as permissões após o checkout)

Obrigado!

P.S. Se você está se perguntando por que eu preciso disso, a resposta é que eu armazeno arquivos do sistema operacional para um dispositivo embutido que precisa de sinalizadores de permissões / suid, etc.

    
por dimovnike 14.06.2014 / 19:40

2 respostas

2

Você pode fazer algo assim:

#!/bin/sh
#

perl -i -pe 's/var app_version = "\d+\.\d+\.\K(\d+)/ $1+1 /e' ./version.js

git add ./version.js

O que ele faz: ele altera a string var app_version="0.1.1"; para var app_version="0.1.2"; e adiciona o arquivo novamente a o processo de commit do git. Quando você confirmar, a última alteração será incluída.

    
por 18.10.2014 / 13:06
1

Eu encontrei a solução. O problema é que, quando modificado do arquivo de gancho pre-commit, é o único arquivo modificado - o commit não está acontecendo. Ao testar isso, eu estava fazendo alterações apenas no arquivo "metadata" e é por isso que não funcionou para mim.

Assim que eu modificar alguns outros arquivos no repositório, adicione add / rm new files - o arquivo de metadados foi devidamente enviado!

Linha inferior: Para confirmar os arquivos modificados do gancho pre-commit, o git precisa de algumas outras mudanças preparadas, caso contrário o commit não acontecerá (provavelmente, o git erroneamente detecta que não há nada para confirmar).

Isso parece um comportamento inesperado para mim. Eu testei isso no git 1.8 e git 2.0 o comportamento é o mesmo.

    
por 16.06.2014 / 11:00