2016-01-11 5 views
2

Я хотел остановить всех разработчиков от возможности делать git push для управления (--force исключено). Вместо того, чтобы просить всех создать файл предварительного нажатия в папке .git/hooks, я хотел автоматизировать процесс с использованием npm и добавить необходимые файлы в удаленный репозиторий git.npm установленный предварительный пусковой крючок, связанный с пользовательским сценарием, всегда пропускается

Я добавил к «пре-толчка» в package.json, который указывает на пользовательский сценарий,

"pre-push": { 
"run": [ 
    "prepushscript" 
] 
}, 

"scripts": { 
"start": "node app.js", 

"test": "node_modules/.bin/gulp test", 
"prepushscript": "prepushscript" 
}, 

"devDependencies": { 
. 
. 
"pre-push": "^0.1.0", 
. 
. 
} 

Примечание: prepushscript пользовательский скрипт находится на том же уровне, что и файл package.json.

prepushscript файл довольно прямолинеен

protected_branch='master' 
current_branch=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,') 

if [ $protected_branch = $current_branch ] 
then 
    echo "Error: You are attempting to push to a protected branch." 
exit 1 # push will not execute 
fi 

Обычай скрипт работает, потому что на создание локального предварительно нажимной файл в .git/папку крючков и пытаются подтолкнуть к защищенным результатам ветвления в эхе скрипта сообщение об ошибке, которое будет видно. Установка Npm создает символическую ссылку в папке .git/hooks. После того, как у меня есть обязательство готово выдвинуть в то время как на местном мастер и запустить мерзавец толчок, толчок проходит и я получаю следующее,

pre-push: 
pre-push: Failed to find the root of this git repository, cannot locate the `package.json`. 
pre-push: Skipping the pre-push hook. 
pre-push: 
Everything up-to-date 

Я попытался заменить prepushscript записи с простой констатацией эха в пакете .json, чтобы увидеть, есть ли проблема со сценарием, но я получаю тот же консольный журнал. Другие попытки, которые были сделаны, заключались в добавлении расширений в файл prepushscript, чтобы узнать, работает ли он.

Основная проблема, которую я не могу понять, - я не могу найти источник ошибки и то, что она имеет отношение к package.json. Спасибо за вашу помощь!

ответ

0

У меня была такая же ошибка с пакетом npm с предварительным нажатием. Кажется, что это не мое окно с полным пробелом, как «Program Files». В конце я должен был пойти «git-pre-push».

0

Это провал на этой линии:

this.root = this.exec(this.git, ['rev-parse', '--show-toplevel']); 

https://github.com/dflourusso/pre-push/blob/master/index.js#L173

Который пытается получить абсолютный путь к каталогу «верхнего уровня».

this.git содержит путь к исполняемому файлу git. Проблема возникает при использовании графического интерфейса git и использует собственный встроенный исполняемый файл. Я столкнулся с этой проблемой при использовании SourceTree и изменил свои предпочтения, так что он использовал систему исполняемый:

SourceTree> Настройка> Git> Использование системы Git (Git Version)

Если вы используете другой GUI пойти его предпочтениях и убедитесь, что он использует исполняемый файл System.