当前位置: 首页 > 面试题库 >

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

孙星鹏
2023-03-14
问题内容

环顾四周,但找不到一个示例。没有解释文档,我无法弄清楚。

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

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

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


问题答案:

有一个示例,说明如何在其存储库上创建/添加和提交,可以帮助您修改文件。

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

关于提交和推送,这是我的代码的摘要,希望对您有所帮助。我花了相当长的时间才弄清楚这一点,感谢Gitter上的家伙,我终于找到了答案。

代码如下:

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);
  })

希望这可以帮助。



 类似资料:
  • 如何在本地删除空文件夹,并让通过拉-推共享远程文件夹的其他协作者也这样做?我知道git不会从这个意义上“跟踪”文件夹,但问题仍然存在。 e、 我将一个文件移动到另一个文件夹并提交了(移动的)更改。 但是我不能文件夹,因为我得到的不匹配不存在。 我可以做一个,但是它是如何被推上去的呢? 我可以直接文件,但如何正确地删除目录,并将其推送到存储库,然后在其他人拉取时将其推送到存储库,以便删除其现有文件夹

  • 我正在VS Code中处理一个React项目,并试图将我所有的文件推送到一个新的Git Web URL。原因是我更改了存储库的名称,导致Web URL也发生了变化。我刚刚从我的项目中提交的所有更改都被推送到旧URL,但我需要将它们提交到新URL。但由于我没有未更改的文件,我无法从VS Code工作室内推送它们。 有没有一种方法可以在没有对我的任何文件进行任何新更改的情况下,通过我的新web URL

  • 问题内容: 我想我的调用或当我指定一个文件被修改浏览器。修改文件后,我该如何“观看”该文件以执行某些操作? 以编程方式看来,这些步骤是..基本上每秒设置一个永无休止的间隔,并缓存初始修改日期,然后每当更改一次调用X时便比较该日期。 问题答案: 如前所述,您可以使用pyinotify: 例如: 这比轮询更有效。内核会告诉您何时进行操作,而无需您不断询问。

  • 问题内容: 我有一个XML文档,在它已经包含数据之后,我想对其进行更新。 我考虑过要在(附加)模式下打开XML文件。问题在于新数据将在根结束标记之后写入。 如何删除文件的最后一行,然后从该点开始写入数据,然后关闭根标签? 当然,我可以读取整个文件并进行一些字符串操作,但是我认为这不是最好的主意。 谢谢你的时间。 问题答案: 您绝对 不应该做 的快速简便的方法(请参阅下文)是使用来将整个文件读入字符

  • 问题内容: 我正在使用Python,并且想在不删除或复制文件的情况下将字符串插入文本文件。我怎样才能做到这一点? 问题答案: 取决于你要做什么。要附加,可以用打开它: 如果要先添加某些内容,则必须先从文件中读取:

  • 问题内容: 作为我的Jenkins管道构建的一部分,我签出了我的仓库(它将复制到我可以看到的工作区中)。然后,我在工作区中修改了一个文件,然后将其回推到我的Github存储库。我只是在更新podspec文件中的版本号。 如何获取该文件并将其推回我的Git存储库中? 问题答案: 棘手的部分是使用我正在使用此方法的相关凭据设置网址- 其中credentialId是您的git凭据Id。您将需要添加到Ma