这是我的用例:我在我的Git仓库中提交了PNG和其他内容。我想对我想提交的每个PNG应用一个特定的进程,这是我最终想要提交的进程的结果(可能修改的PNG)。
一开始我想到了一个钩子(比如pre-commit
),但它有点奇怪,因为这个过程会改变文件,所以我需要重新添加它!根据我read的内容,没有pre-add
钩子(或类似的东西)。
可能是一个解决方案是创建一个git别名?但我不想改变 - 太多 - 人们的工作方式,我正在寻找一种平稳透明的方式。
如果你有线索......即使线索是改变我的过程想法。
答案 0 :(得分:5)
你可能想要考虑涂抹&清理过滤器,在git add期间应用clean
,在结帐时涂抹污迹。这些可以按文件类型分配。查看'git attributes(5)'手册页和Git SCM book : Git Attributes。
答案 1 :(得分:5)
可能有充分的理由使用clean
,但实际上并没有阻止您在pre-commit
挂钩期间重新添加文件,这在某种程度上更直观我的意见。
您的pre-commit
看起来像是:
*run your PNG processing here*
(after processing completes) git add *.png
然后提交将继续照常进行。如果你想获得幻想,当压缩出现问题时你可以在其中抛出exit 1
,它将停止提交。
答案 2 :(得分:0)
我使用gulp
和gulp-git
做了与disso类似的事情。
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获得了图片任务代码。)