2012-06-07 3 views
2

Мы все испытали этот болезненный момент, когда новая функция работает нормально локально, но разрывается при развертывании, потому что мы забыли добавить новый файл.Как заставить git предупреждать или добавлять новые файлы?

Есть ли способ сделать git предупреждать или автоматически добавлять новые файлы при выполнении git commit -a?

+0

Перед тем, как совершать операции, всегда выполняйте 'git status', вы всегда совершаете слепо, не проверяя, что в вашем индексе (чтобы быть совершенным)? Кроме того, это то, что «git commit -a' делает ... Зафиксируйте каждый неисчерпаемый файл в рабочем дереве. – KurzedMetal

+1

@KurzedMetal, 'git commit -a' не рассматривает файлы без следа - привести часть руководства, описывающего опцию' --all': «Сообщите команде автоматически создавать файлы, которые были изменены и удалены, но новые файлы, о которых вы не сказали git, не затрагиваются ». – kostix

+0

Да, моя ошибка там, все еще, выполняющая« git status »до того, как рекомендуется« git commit ». Если вы вслепую «git add.» Или что-то в этом роде, вы можете добавить ненужный мусор к истории проекта. Который нелегко исправить, если он нажат на пульт. – KurzedMetal

ответ

2

Предварительно совершить крюк, как это должно тревогу по поводу оставшихся файлов:

#!/bin/bash 
. git-sh-setup # for 'die' cmd 
git status --porcelain | while IFS= read -r line; 
do 
     if [[ $line == \?\?* ]] ; then # if the file begins with ?? it's untracked by git 
       die "Uncommited files left!" # this will always terminate commit 
       # say "Uncommited files left!" # this will just print the warning 
     fi 
done 

Просто add this to your repo's pre-commit hooks и вуали :)

EDIT: Вы должны также рассмотреть возможность использования некоторой непрерывной интеграции инструментария, как Hudson или BuildBot - он может выполнять намного более всестороннюю проверку, а затем ищет недостающие файлы :)

EDIT2: к сожалению, мне не удалось использовать чтение внутри цикла, поэтому я думаю возможно, не удастся заставить этот крючок запросить ваше действие.

1
git config --global alias.commita '!git add . && git commit -a' 

После этого просто использовать:

git commita .. 

git commit -a вместо внесения. Это также добавит новые файлы.

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