【发布时间】:2015-01-30 14:57:42
【问题描述】:
git 在开始结账操作时做了什么?它会写出锁定文件还是什么?
我使用 gulp,如果 git 正在执行结帐操作,我希望它“暂停”观察者。
我可以接受可能不得不“重新保存”一些东西来让文件观察器重新启动。
【问题讨论】:
标签: git gulp git-checkout gulp-watch
git 在开始结账操作时做了什么?它会写出锁定文件还是什么?
我使用 gulp,如果 git 正在执行结帐操作,我希望它“暂停”观察者。
我可以接受可能不得不“重新保存”一些东西来让文件观察器重新启动。
【问题讨论】:
标签: git gulp git-checkout gulp-watch
函数gulp.watch() 返回一个对象,其中包含一个可以调用的end() 方法 - 请参阅glob-watcher 模块中的定义。
您可以按照以下方式做一些事情:
var gulp = require('gulp');
function doGitCheckout(callback) {
console.log('doing checkout...');
setTimeout(function() {
console.log('done checkout...');
callback();
}, 1000);
}
var watcher;
gulp.task('watch:start', function() {
if (!watcher) {
watcher = gulp.watch('dist/**/*', ['build']);
console.log('started watcher');
}
});
gulp.task('watch:stop', function() {
if (watcher) {
watcher.end();
watcher = null;
console.log('stopped watcher');
}
});
gulp.task('git:checkout', ['watch:stop'], function(cb) {
console.log('isWatching = ' + !!watcher);
// Start the Git checkout...
doGitCheckout(function() {
// The Git checkout is finished!
gulp.start('watch:start', function() {
cb();
});
});
});
gulp.task('default', ['watch:start', 'git:checkout']);
所以我们在开始观察时保持对观察者对象的引用,并且有一个任务在观察者运行时停止观察者。我们的 Git 任务依赖于 watch:stop 开始,然后启动 Git 检出,并在完成时回调。回调启动任务watch:start,完成后,我们最终触发函数cb,表示git:checkout已经完成!
另一种方法可能是在监视对象上使用add(pattern) 和remove(pattern) 将其关闭然后再次打开,而不是销毁对象并重新创建它。
【讨论】:
git rebase 这样的较长任务。它也不会停止读取操作,因为它应该保持一致。