如何克隆然后使用 git-gulp 正确签出标签 [重复]

Posted

技术标签:

【中文标题】如何克隆然后使用 git-gulp 正确签出标签 [重复]【英文标题】:How do I clone and then check out a tag properly using git-gulp [duplicate] 【发布时间】:2016-07-27 03:07:00 【问题描述】:

我正在尝试让脚本滚动:

克隆一个 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”?

【问题讨论】:

【参考方案1】:

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

    要使相关任务正常工作,您可以使用回调函数或简单地返回某些内容,这样您就不会像在这种情况下使用回调那样紧密耦合任务。 您似乎想克隆到您选择的目录。为此,您必须为 git.clone 命令指定一些参数,并在尝试结帐时指定一个参数。 还要验证您是否使用有效的 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 特定问题的更好方法。

以上是关于如何克隆然后使用 git-gulp 正确签出标签 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不下载其父文件夹的情况下签出或克隆文件夹

用git创建一个中间分支

在 Jenkins 中,如何将项目签出到特定目录中(使用 GIT)

如何签出配置文件并使用mercurial重命名?

使用mercurial克隆或拉到标记后如何获取标记变更集?

删除本地 Git 更改的各种方法