如何使用git gulp正确克隆并签出标签
我正在尝试制作一个脚本:如何使用git gulp正确克隆并签出标签,gulp,gulp-git,Gulp,Gulp Git,我正在尝试制作一个脚本: 克隆一个repo(例如git clone someClonePath.git),然后 签出标记(git签出标记/someTag) 签出在克隆完成之前完成(失败)。这里的问题在于我对gulp中异步任务的理解。在使用gulp git签出标签之前,我如何验证克隆是否已成功执行“cloneDir”?查看您更新的帖子后的几件事 要使依赖任务工作,您可以使用回调函数或简单地返回一些内容,这是最好的,这样您就不会将任务紧密地耦合在一起,而在本例中使用回调函数就是这样做的 看起来您
- 克隆一个repo(例如git clone someClonePath.git),然后
- 签出标记(git签出标记/someTag)
签出在克隆完成之前完成(失败)。这里的问题在于我对gulp中异步任务的理解。在使用gulp git签出标签之前,我如何验证克隆是否已成功执行“cloneDir”?查看您更新的帖子后的几件事
git.clone
命令指定一些参数,并在尝试签出时指定一个参数gulp.task('clone', function(){
return git.clone('URL-TO-REMOTE-REPO', {args: './cloneDir'}, function (err) {
if (err) {
throw err;
}
});
});
gulp.task('checkout',['clone'], function(){
git.checkout('tags/' + argv.tag,{ cwd: './cloneDir' }, function (err) {
if (err) {
throw err;
}
});
});
也许你最好使用回调@stek29,回调是另一种选择,我在帖子的评论链接中提到了这一点。回调选项对在我共享的链接上发表文章的人不起作用。他们不是更好吗?他们可以缩短代码,因为它还可以替换
if
/throw
部分。另外,AFAIK回调更具JS风格。关于返回git.clone,我得到了相同的行为。控制台如下所示(以演示计时问题):[10:42:56]正在启动“克隆”。。。[10:42:56]在4.97毫秒后完成“克隆”[10:42:56]开始“签出”。。。[10:42:56]“签出”在157μs后出错[10:42:56]错误:eNot,没有此类文件或目录。。。[10:42:59]克隆到“cloneDir”…回调可能更像“JS风格”,但是gulp擅长使用返回流,而不是使用回调。此外,使用回调将任务紧密耦合;这不是应该如何设置吞咽任务。使用return是解决这个问题的更好方法。
gulp.task('clone', function(){
return git.clone('URL-TO-REMOTE-REPO', {args: './cloneDir'}, function (err) {
if (err) {
throw err;
}
});
});
gulp.task('checkout',['clone'], function(){
git.checkout('tags/' + argv.tag,{ cwd: './cloneDir' }, function (err) {
if (err) {
throw err;
}
});
});