Yeoman生成器 - 创建远程github存储库

时间:2015-08-09 15:48:20

标签: git github yeoman yeoman-generator

我正在为Flask-Bootstrap框架编写自己的yeoman生成器。在创建所有目录后,复制/模板所有文件,我最好创建一个本地git repo(我能够做),然后初始化一个远程存储库并将第一次提交推送到它。

它可以创建本地存储,进行第一次本地提交并添加远程源,但在尝试推送到源主服务器时会挂起。

另外,我还没有找到关于Yeoman的exec()函数的可靠文档,是否有人能够指出我正确的方向。

input.js

...

git: function(){
  var done = this.async();

  // create git repository and start remote github repository
  exec('cd ' + this.appName + ' && git init', function(err, stdout) {
    console.log('Initialized local git repository\n', stdout);
  });

  exec('cd ' + this.appName + ' && curl -u ' + this.githubUsername + ' https://api.github.com/user/repos -d \'{"name":"' + this.appName + '"}\'', function(err, stdout) {
    console.log('Initialized remote github repository!\n', stdout);
  });

  exec('cd ' + this.appName + ' && git remote add origin git@github.com:' + this.githubUsername + '/' + this.appName + '.git', function(err, stdout) {
    console.log('Added github remote origin\n', stdout);
  });

  exec('cd ' + this.appName + ' && git add .', function(err, stdout) {
    console.log('Added all files to git staging area\n', stdout);
  });

  exec('cd ' + this.appName + ' && git commit -m "init commit"', function(err, stdout) {
    console.log('Made first commit!\n', stdout);
  });

  exec('cd ' + this.appName + ' && git push origin master', function(err, stdout) {
    console.log('Pushed first commit to github\n', stdout);
  });

  done();
},

...

输出

...

Initialized local git repository
Initialized empty Git repository in /Users/joey/Desktop/trippity/.git/
Made first commit!
Added all files to git staging area
Added github remote origin

//Never prints line corresponding to pushing to the remote 

...

我正在引用this关于从CLI创建远程GitHub存储库的问题。

更新

所以我尝试在测试仓库上使用GitHub API尝试从CLI创建远程仓库。一旦你使用curl,你会被提示输入你的github密码(这是有道理的)。我没有在yeoman发生器中看到这个提示输入我的密码,这可能是为什么它会被挂断,有关如何向用户显示此提示的任何想法?

joey@JoeyOrlandoMacBookAir:~/Desktop/trippity$ curl -u joeyorlando https://api.github.com/user/repos -d '{"name":"trippity"}'
Enter host password for user 'joeyorlando':

1 个答案:

答案 0 :(得分:2)

首先,让我们明确区分。你想做的事与Yeoman本身无关。

您想要创建一个git存储库,提交并推送到远程。这将使用Node.js apis完成,它将像任何普通的JavaScript代码一样工作。 Yeoman不是魔术,它只是一个支持应用程序的辅助框架,使发生器更容易重复使用并允许它们的分发。

从我所看到的,您的代码中存在多个错误:

首先,为什么你总是cd进入app目录?一旦你进入它,除非你告诉它,否则你不会搬出去。

其次,你正在调用exec,并提供回调。这应该暗示这个API是异步的。这意味着它不会按顺序运行。事实上,阅读日志后,您可以看到在尝试提交后,文件会被添加到暂存区域。

你可能已经意识到你是否捕获了异常(回调中的function (err, etc...))。但你不是,所以你不会收到任何错误的通知。

那么从现在开始呢?好吧,也许从阅读有关异步编码和模式开始。也许你会想要使用async来协调行动,这取决于彼此。接下来,使用exec命令是非常原始的,不是超级可维护的。有多个node.js工具可以使用git。您应该结帐nodegit(NPM上还有很多其他选项)。