【问题标题】:How do I clone and then check out a tag properly using git-gulp [duplicate]如何克隆然后使用 git-gulp 正确签出标签 [重复]
【发布时间】:2023-03-04 19:37:01
【问题描述】:

我正在尝试让脚本滚动:

  • 克隆一个 repo(例如 git clone someClonePath.git),然后
  • 签出一个标签(git checkout tags/someTag)
gulp.task('clone', function(){
  git.clone('somepath/cloneDir.git', function (err) {
    if (err) {
      throw err;
    }
  });
});


gulp.task('checkout',['clone'], function(){
  process.chdir('./cloneDir');
  git.checkout('tags/' + argv.tag,function (err) {
    if (err) {
      throw err;
    }
  });
});

结帐在克隆之前完成(失败)。这里的问题在于我对 gulp 中异步任务的理解。在使用 gulp-git 签出标签之前,如何验证克隆是否成功“cloneDir”?

【问题讨论】:

    标签: gulp gulp-git


    【解决方案1】:

    查看您更新的帖子后的一些事情。

    1. 要使相关任务正常工作,您可以使用回调函数或简单地返回某些内容,这样您就不会像在这种情况下使用回调那样紧密耦合任务。
    2. 您似乎想克隆到您选择的目录。为此,您必须为 git.clone 命令指定一些参数,并在尝试结帐时指定一个参数。
    3. 还要验证您是否使用有效的 URL 进行克隆。

    试试这个:

    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;
        }
      });
    });
    

    【讨论】:

    • 也许你应该更好地使用回调? Check this
    • @stek29,回调是另一种选择,在我作为帖子评论发布的链接中已注明。回调选项不适用于在我分享的链接上发帖的人。
    • 不是更好吗?他们可以缩短代码,因为它也替换了if/throw 部分。 AFAIK 回调也更像 JS 风格。
    • 关于返回 git.clone,我得到了同样的行为。控制台看起来像这样(演示时间问题):[10:42:56] 开始“克隆”... [10:42:56] 4.97 毫秒后完成“克隆”[10:42:56] 开始“结帐” '... [10:42:56] 'checkout' 在 157 μs 后出错 [10:42:56] 错误:ENOENT,没有这样的文件或目录... [10:42:59] 克隆到 'cloneDir'。 ..
    • 回调可能更像是“JS 风格”,但是,gulp 擅长使用返回流而不是使用回调。此外,使用回调紧密耦合任务;这不是 gulp 任务的设置方式。使用 return 是解决 IMO 特定问题的更好方法。
    猜你喜欢
    • 2013-12-15
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2011-04-15
    • 2015-06-29
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    相关资源
    最近更新 更多