25

这是我的用例:我在我的 Git 存储库中提交 PNG 和其他内容。我想对我想提交的每个 PNG 应用一个特定的过程,这是我最终要提交的过程的结果(潜在的修改后的 PNG)。

一开始我想到了一个钩子(比如 a pre-commit),但这有点奇怪,因为这个过程会改变文件,所以我需要重新添加它!根据我阅读的内容,没有pre-add钩子(或类似的东西)。

可能的解决方案是创建一个 git 别名?但我不想改变——太多——人们的工作方式,我正在寻找一种顺畅透明的方式。

如果你有线索......即使线索是改变我的流程想法。

4

3 回答 3

10

您可能需要考虑涂抹和清洁过滤器,clean在 git add 期间应用,在结帐期间应用涂抹。这些可以按文件类型分配。查看“git attributes(5)”手册页和Git SCM 书:Git Attributes

于 2013-09-18T19:47:14.767 回答
7

可能有充分的理由使用它clean,但实际上没有什么可以阻止您在挂钩期间重新添加文件pre-commit,这在我看来更直观一些。

pre-commit会看起来像:

*run your PNG processing here* (after processing completes) git add *.png

然后提交将照常继续。如果您想变得花哨,可以exit 1在压缩出现问题时将其扔进去,它会停止提交。

于 2015-11-09T23:55:46.680 回答
0

我做了一些类似于 disso 的事情,使用gulpand 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())
})

(请注意,我还没有测试过......我从谷歌获得了图像任务代码。)

于 2017-03-16T13:24:03.633 回答