【问题标题】:Yeoman generator - create remote github repositoryYeoman 生成器 - 创建远程 github 存储库
【发布时间】:2015-08-09 15:48:19
【问题描述】:

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

到了创建本地仓库、进行第一次本地提交并添加远程源的地步,但在尝试推送到源主机时被挂断了。

顺便说一句,我还没有找到关于 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 SO 关于从 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':

【问题讨论】:

  • 我看不到使用 yeoman 命令来使用 git 的意义。为什么不直接使用 git 命令呢?并让用户使用 svn 或 mercurial 或其他任何他喜欢的东西?
  • 我最感兴趣的是创建这个生成器供个人使用,我只使用 git

标签: git github yeoman yeoman-generator


【解决方案1】:

首先,让我们做一个明确的区分。您尝试做的与 Yeoman 本身无关。

您想创建一个 git 存储库,提交并推送到远程。这将使用 Node.js apis 完成,它会像任何普通的 JavaScript 代码一样工作。 Yeoman 并不神奇,它只是一个框架,它带有帮助器来构建应用程序并使生成器更易于重用并允许其分发。

据我所知,您的代码中有多个错误:

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

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

您可能已经意识到如果您捕获了异常(回调中的function (err, etc...))。但您不是,因此您不会收到任何错误发生的通知。

那么从现在开始该怎么做?好吧,也许从阅读异步编码和模式开始。也许您会想使用async 来根据彼此协调操作。接下来,使用exec 命令是非常原始的并且不是超级可维护的。有多个 node.js 工具可以与 git 一起使用。您应该查看nodegit(NPM 上还有很多其他选项)。

【讨论】:

    猜你喜欢
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多