开始结账操作时git做了什么?它会写出一个锁文件吗?
我使用gulp,如果git正在积极执行结账操作,我希望它能“暂停”观察者。
我很可能不得不“重新安置”某些东西,让文件观察者重新投入使用。
答案 0 :(得分:6)
函数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)
将其关闭然后再打开,而不是销毁对象并重新创建它。