2013-09-18 3 views
8

Вот мой прецедент: я беру PNG и другие вещи в моем Git repo. Я хотел бы применить конкретный процесс для всех PNG, которые я хотел бы совершить, и это результат процесса, который я, наконец, хочу совершить (потенциально модифицированный PNG).Как автоматически вызывать скрипт перед добавлением git?

В начале я подумал о крючке (например, pre-commit), но это немного странно, потому что процесс изменит файл, поэтому мне нужно будет его снова добавить! И в соответствии с тем, что я read, нет крюка pre-add (или что-то в этом роде).

Может быть, решение заключается в создании псевдонима git? Но я не хочу меняться - слишком много - как работают люди, я ищу гладкий и прозрачный способ.

Если у вас есть ключ ... даже если ключ должен изменить мою идею процесса.

ответ

4

Возможно, вы захотите рассмотреть чистый фильтр &, с использованием clean, применяемого во время добавления git, и пятна во время проверки. Их можно выделить по типу файла. Посмотрите на «git attributes (5)» man page и Git SCM book : Git Attributes.

+0

Hi @ philip-oakley спасибо за ответ, ваше решение кажется правильным: «чистый» фильтр запускается при постановке файлов. Я постараюсь использовать его и сказать вам, если все в порядке! – Labynocle

+0

решение в порядке, но приятно переписать файл, но немного сложнее обработать изображение :) Мне нужно больше исследовать – Labynocle

2

Вместо этого может быть целесообразно использовать clean, но на самом деле ничего не мешает вам повторно добавлять файлы во время крюка pre-commit, что, на мой взгляд, несколько интуитивно.

Ваш pre-commit будет выглядеть примерно так:

*run your PNG processing here* git add *.png

коммита, будет продолжаться как обычно. Если вы хотите получить фантазию, вы можете бросить exit 1 там, когда что-то пойдет не так с сжатием, и оно остановит фиксацию.

0

Я сделал что-то похожее на disso, используя gulp и gulp-git.

var git = require('gulp-git') 

// ... other tasks 

gulp.task('add', function(){ 
    return gulp.src('cdn/**') 
    .pipe(git.add()) 
}) 

Эта задача добавления затем называется в конце всего остального. Затем у меня есть gulp, настроенный с помощью крючка предварительной фиксации. Работает как шарм.

Так что в вашем случае, полный файл может выглядеть примерно так:

var gulp = require('gulp') 
var $ = require('gulp-load-plugins')() 
var runSequence = require('run-sequence') 

gulp.task('default', function() { 
    return runSequence(
    'images', 
    'add' 
    ) 
}) 

gulp.task('images', function() { 
    return gulp.src('app/images/**/*') 
    .pipe($.cache($.imagemin({ 
     progressive: true, 
     interlaced: true 
    }))) 
    .pipe(gulp.dest('dist/images')) 
}) 

gulp.task('add', function(){ 
    return gulp.src('dist/**') 
    .pipe($.git.add()) 
}) 

(. Обратите внимание, что я не проверял ... Я получил код изображения задачи от Google)

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