Nodegit:如何修改文件并推送更改?

看看周围的例子,但找不到一个。 文档没有解释,我无法弄清楚。

如何修改文件(例如README.md),为修改后的文件创build提交,然后将提交推送到服务器?

Nodegit: http ://www.nodegit.org/

Nodegit文档: http ://www.nodegit.org/nodegit

有一个如何创build/添加和提交他们的回购,它可以帮助你修改文件的例子。

https://github.com/nodegit/nodegit/blob/master/examples/add-and-commit.js

关于提交和推送,这里是我的代码片段,我希望它可以帮助你一点。 我花了相当多的时间来解决这个问题,感谢Gitter的人 ,我find了一个答案。

代码如下所示:

 var path = require('path'); var nodegit = require("nodegit"), repoFolder = path.resolve(__dirname, 'repos/test/.git'), fileToStage = 'README.md'; var repo, index, oid, remote; nodegit.Repository.open(repoFolder) .then(function(repoResult) { repo = repoResult; return repoResult.openIndex(); }) .then(function(indexResult) { index = indexResult; // this file is in the root of the directory and doesn't need a full path index.addByPath(fileToStage); // this will write files to the index index.write(); return index.writeTree(); }).then(function(oidResult) { oid = oidResult; return nodegit.Reference.nameToId(repo, "HEAD"); }).then(function(head) { return repo.getCommit(head); }).then(function(parent) { author = nodegit.Signature.now("Author Name", "author@email.com"); committer = nodegit.Signature.now("Commiter Name", "commiter@email.com); return repo.createCommit("HEAD", author, committer, "Added the Readme file for theme builder", oid, [parent]); }).then(function(commitId) { return console.log("New Commit: ", commitId); }) /// PUSH .then(function() { return repo.getRemote("origin"); }).then(function(remoteResult) { console.log('remote Loaded'); remote = remoteResult; remote.setCallbacks({ credentials: function(url, userName) { return nodegit.Cred.sshKeyFromAgent(userName); } }); console.log('remote Configured'); return remote.connect(nodegit.Enums.DIRECTION.PUSH); }).then(function() { console.log('remote Connected?', remote.connected()) return remote.push( ["refs/heads/master:refs/heads/master"], null, repo.defaultSignature(), "Push to master") }).then(function() { console.log('remote Pushed!') }) .catch(function(reason) { console.log(reason); }) 

希望这可以帮助。

Rafael的解决scheme肯定会起作用,但我可能会补充说,不需要在服务器中执行.connect 。 推销回购的最简单方法如下:

  • 推动只使用用户名和密码authentication的主人

      //Previous calls }).then(function() { return repo.getRemote("origin"); //Get origin remote }).then(function(remote) { return remote.push(["refs/heads/master:refs/heads/master"], { callbacks: { credentials: function(url, userName) { console.log("Requesting creds"); return NodeGit.Cred.userpassPlaintextNew("[USERNAME]", "[PASSWORD]"); } } }); }).then(function(err) { console.log("Push error number:"); console.log(err); }).catch(function(err) { console.log(err); }).done(function(commitId) { console.log("All done"); }) 
  • 通过SSH身份validation推送到myBranch

      //Previous calls }).then(function() { return repo.getRemote("origin"); //Get origin remote }).then(function(remote) { return remote.push(["refs/heads/myBranch:refs/heads/myBranch"], { callbacks: { credentials: function(url, userName) { console.log("Requesting creds"); return NodeGit.Cred.sshKeyFromAgent(userName); } } }); }).then(function(err) { console.log("Push error number:"); console.log(err); }).catch(function(err) { console.log(err); }).done(function(commitId) { console.log("All done"); })