Yeoman generator - создать удаленный репозиторий github

Я пишу свой собственный йоменский генератор для фреймворка Flask-Bootstrap. После того, как я создаю все каталоги, копирую / шаблонирую все файлы, в идеале я хотел бы создать локальное git-репо (что я могу сделать), затем инициализировать удаленный репозиторий и отправить первый коммит в него.

Наступает момент создания локального репо, первого локального коммита и добавления удаленного источника, но затем он зависает при попытке перейти на мастер-источник.

Кроме того, я не смог найти надежную документацию по функции exo () Йомана, кто-нибудь сможет указать мне правильное направление в этом отношении.

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 

...

Я ссылаюсь на этот SO вопрос о создании удаленного репозитория GitHub из CLI.

Обновить

Поэтому я попытался использовать 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 ответ

Прежде всего, давайте сделаем четкое различие. То, что вы пытаетесь сделать, не имеет ничего общего с самим Йоманом.

Вы хотите создать репозиторий git, зафиксировать и отправить на удаленный компьютер. Это будет сделано с помощью Node.js apis, и он будет работать как любой обычный код JavaScript. Yeoman - это не волшебство, это всего лишь фреймворк с помощниками для создания приложений и упрощения повторного использования генераторов и их распространения.

Из того, что я вижу, у вас есть несколько ошибок в вашем коде:

Во-первых, почему ты всегда cdв каталог приложения? Как только вы внутри, вы не выйдете, если не скажете это сделать.

Во-вторых, ты звонишь exec куча, и вы предоставляете обратные вызовы. Это должно подсказывать вам, что этот API является асинхронным. Это значит, что он не будет работать по порядку. И, на самом деле, читая журнал, вы можете видеть, что файлы добавляются в промежуточную область после того, как вы попытались зафиксировать.

Вы, наверное, поняли, если бы вы поймали исключение (function (err, etc...) в ваших обратных звонках). Но вы не, так что вы не уведомлены о каких-либо ошибок, возникающих.

Так что же теперь делать? Ну, может, начнем с чтения об асинхронном кодировании и шаблонах. Может быть, вы захотите использовать асинхронный для организации действий в зависимости друг от друга. Далее, используя exec Команды довольно сырые и не супер ремонтопригодны. Есть несколько инструментов node.js для работы с git. Вы должны проверить nodegit (есть также много других опций на NPM).

Другие вопросы по тегам