我正在为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':
答案 0 :(得分:2)
首先,让我们明确区分。你想做的事与Yeoman本身无关。
您想要创建一个git存储库,提交并推送到远程。这将使用Node.js apis完成,它将像任何普通的JavaScript代码一样工作。 Yeoman不是魔术,它只是一个支持应用程序的辅助框架,使发生器更容易重复使用并允许它们的分发。
从我所看到的,您的代码中存在多个错误:
首先,为什么你总是cd
进入app目录?一旦你进入它,除非你告诉它,否则你不会搬出去。
其次,你正在调用exec
,并提供回调。这应该暗示这个API是异步的。这意味着它不会按顺序运行。事实上,阅读日志后,您可以看到在尝试提交后,文件会被添加到暂存区域。
你可能已经意识到你是否捕获了异常(回调中的function (err, etc...)
)。但你不是,所以你不会收到任何错误的通知。
那么从现在开始呢?好吧,也许从阅读有关异步编码和模式开始。也许你会想要使用async来协调行动,这取决于彼此。接下来,使用exec
命令是非常原始的,不是超级可维护的。有多个node.js工具可以使用git。您应该结帐nodegit(NPM上还有很多其他选项)。