git - 在 yeoman 生成器中推送到 git repo?

原文 标签 git yeoman yeoman-generator

我希望有人能澄清一下 Yeoman 的 spawnCommand() 方法是如何工作的。我正在开发一个生成器,我希望它能够初始化一个 git repo,最后提交并推送生成的应用程序。

我的印象是第二个参数是一个数组,它是一个将在进程下运行的命令数组。所以,这样的事情会运行“git init”,然后运行“git remote add origin”等。

end: function () {
    if(this.repo !== '') {
      this.spawnCommand('git', ['init', 
        'remote add origin ' + this.repo, 
        'add --all', 
        'commit -m "initial commit from generator"', 
        'push -u origin master']
      );
    }
    console.log(yosay('I believe we\'re done here.'));
}

不幸的是,它只是抛出一个使用错误:
usage: git init [-q | --quiet] [--bare] ...

所以然后我尝试自己做init,然后是这样的其他人:

end: function () {
    if(this.repo !== '') {
      this.spawnCommand('git', ['init']);
      this.spawnCommand('git', ['remote add origin ' + this.repo, 
        'add --all', 
        'commit -m "initial commit from generator"', 
        'push -u origin master']
      );
    }
    console.log(yosay('I believe we\'re done here.'));
}

然后输出对我来说意义不大:
git: 'remote add origin {URL}' is not a git command. See 'git --help'.
Initialized empty Git repository in /my/project/.git/

这让我觉得它们是异步运行的,这可能是添加远程源失败的原因,但否则我很困惑。

有没有另一种方法可以让生成器推送到 git,或者我最好不要尝试自动化初始推送?

编辑:

将每个命令作为其自己的 spawnCommand() 运行也不起作用。

this.spawnCommand('git', ['init']);
this.spawnCommand('git', ['remote add origin ', this.repo]);
this.spawnCommand('git', ['add --all']);
this.spawnCommand('git', ['commit -m "initial commit from generator"']);
this.spawnCommand('git', ['push -u origin master']);

输出:
error: invalid key: pager.remote add origin 
error: invalid key: pager.add --all
error: invalid key: alias.remote add origin
error: invalid key: alias.add --all
error: invalid key: pager.commit -m "initial commit from generator"
error: invalid key: pager.push -u origin master
Initialized empty Git repository in /my/project/.git/
error: invalid key: alias.commit -m "initial commit from generator"
error: invalid key: alias.push -u origin master
git: 'remote add origin ' is not a git command. See 'git --help'.
git: 'push -u origin master' is not a git command. See 'git --help'.
git: 'add --all' is not a git command. See 'git --help'.
git: 'commit -m "initial commit from generator"' is not a git command. See 'git --help'.

开始认为这可能不是最好的方法。

最佳答案

使用一个 this.spawnCommandSync()每个要运行的 git 命令。

this.spawnCommandSync('git', ['init']);
this.spawnCommandSync('git', ['remote', 'add', 'origin', this.repo]);
this.spawnCommandSync('git', ['add', '--all']);
this.spawnCommandSync('git', ['commit', '-m', '"initial commit from generator"']);
this.spawnCommandSync('git', ['push', '-u', 'origin', 'master']);

该数组是一个字符串参数数组。这是与node.js spawn相同的界面- 除了包装交叉生成以支持 Windows 之外,没有任何魔法。
this.spawnCommand()是异步的,所以如果你使用它,你需要控制流程,这样命令就不会同时运行并且可能以错误的顺序运行。考虑到这是一个 yeoman 生成器,使用同步命令通常就足够了。

关于git - 在 yeoman 生成器中推送到 git repo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29832785/

相关文章:

npm - 运行自耕农角度生成器, karma 依赖错误

除非我重置,否则 Git 已经是最新的

Git - 将推送提交移动到不同的分支

node.js - 从NodeJS服务器调用Yeoman命令

javascript - Grunt 不断删除我的绝对路径

javascript - Yeoman:使用用户提供的参数调用子生成器

linux - 尝试删除 Git 修订历史中涉及长文件名的提交消息

git - bundle 程序: `bundle package` 带有 :git 源

javascript - 生成器在 async() 调用后退出

javascript - Yeoman Angular 特征生成器 cdnify 任务未找到