Как зафиксировать файлы, измененные хуком pre-commit в Git

3593
dimovnike

Я борюсь за пару часов, чтобы сделать метаданные git store (permissions / flags / etc) из файлов, используя metastore, и я использую hooks/pre-commitдля этого.

Сценарий вызывается правильно, и файл «метаданные» изменяется, но не добавляется в коммит.

Я пытался позвонить:

git add ./metadata 

а также

git add -u ./metadata 

из сценария предварительной фиксации, но эффекта нет. Файл заканчивается незафиксированным и помечается как измененный или помеченный, НО не переданный, никогда.

Есть ли способ сделать эту работу? По сути, я хочу, чтобы он обновлял и фиксировал файл «метаданные» для каждого коммита (желательно, как тот же коммит, чтобы я мог восстановить все разрешения после проверки)

Спасибо!

PS Если вам интересно, зачем мне это нужно, ответ - я храню файлы ОС для встроенного устройства, для которого требуются флаги permisions / suid и т. Д.

3
Это должно работать, может быть, вы делаете что-то не так. Хук pre-commit выполняется автоматически, когда вы делаете «git commit». У него должен быть установлен исполняемый бит. Поэтому попробуйте добавить некоторые файлы в постановку вручную, а затем выполните «git commit». После этого выполните «git show», чтобы увидеть, какие изменения были внесены в этот коммит, и посмотреть, были ли зафиксированы метаданные. Arkadiusz Drabczyk 9 лет назад 0

2 ответа на вопрос

2
Batist

Вы можете сделать что-то вроде этого:

#!/bin/sh #  perl -i -pe 's/var app_version = "\d+\.\d+\.\K(\d+)/ $1+1 /e' ./version.js  git add ./version.js 

Что он делает: изменяет строку var app_version = "0.1.1"; к var app_version = "0.1.2"; и добавляет файл обратно в процесс git commit. Когда вы фиксируете последние изменения будут включены.

неправильный вопрос? dimovnike 9 лет назад 2
Проблема здесь в том, что вы будете фиксировать все изменения в этом конкретном файле. Не только ранее поставленные изменения. Может работать для файлов, которые содержат только версию, хотя. Martin Gerhardy 6 лет назад 0
1
dimovnike

I have found the solution. The problem is that when modified from pre-commit hook file is the only modified file - the commit is not happening. While testing this, I was making changes only in the "metadata" file and thats why it did not work for me.

As soon as I modify some other files in the repo add add/rm new files - the metadata file is properly commited!

Bottom line: In order to commit the modified files from pre-commit hook, git needs some other staged changes, otherwise the commit won't happen (probably, git erroneously detects that there is nothing to commit).

This seems a bit unexpected behaviour to me. I tested this in git 1.8 and git 2.0 the behaviour is the same.

У меня та же проблема, но изменение других промежуточных файлов не решает проблему. Git не воспринимает изменения, сделанные pre-commit в моем случае .. frhd 9 лет назад 0
Удостоверьтесь, что вы делаете git add для canges, сделанного скриптом предварительной фиксации (в конце скрипта). dimovnike 9 лет назад 0
Я не могу этого сделать. Я получаю ошибку index.lock, поскольку git-commit вызывает pre-commit. Работает ли это для вас? frhd 9 лет назад 0

Похожие вопросы