2016-03-22 2 views
2

Я хотел бы выполнить некоторую команду оболочки для каждого файла, который не выполнил никаких изменений.GIT, Выполнить команду на каждом измененном файле?

E.g. Если git status показывает

On branch xxxxxxx 
Your branch is up-to-date with 'origin/xxxxxxxxx'. 

Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    modified: client/.../reports.coffee 
    modified: client.../tools.coffee 

Я хочу, чтобы выполнить команду на файлах reports.coffee и tools.coffee.

Я не хочу использовать find, потому что файлы могут меняться в разное время. Вы знаете, как я могу это достичь?

ответ

2

Вы также можете использовать эту команду:

git status -s | grep '??' | cut -f2 -d' ' | xargs echo

и заменить echo командой вы хотите выполнить

+0

Это не работает на моей машине. Я думаю, что есть ошибка в grep '??'. –

+0

Для меня git status -s печатает «M go-lib /..../ user.go» –

+0

'git status -s': печатает статус рабочего дерева в коротком формате; 'grep '??'': фильтрует только строки, включая «??», что относится к файлам без следа; 'cut -f2 -d ''': будет удерживать только вторую часть строки, детали разделяются пробелом – dvxam

1

Вы должны использовать GIT крючки:

https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks

Вы найдете файлы для изменения в .git/hooks.

Here хороший учебник

+0

Какой крючок я должен использовать? –

+0

Это зависит от того, когда именно вы хотите выполнить свой скрипт. Например, если вы хотите проверить неустановленные файлы при каждой фиксации, вы должны изменить файл 'pre-commit.sample': « Сценарий предварительной фиксации выполняется каждый раз, когда вы запускаете git commit, прежде чем Git попросит разработчика зафиксировать сообщение или создать объект фиксации. Вы можете использовать этот крючок для проверки моментального снимка, который должен быть зафиксирован ». – Till

Смежные вопросы