Запись файла в пустой репозиторий не в корневом каталоге с помощью NodeGit / LibGit2 - PullRequest
0 голосов
/ 20 ноября 2018

Мне удалось записать файл в ветку в пустом хранилище, используя приведенный ниже код, но он работает только для файлов в корне.Мне не удалось найти хороший пример в документации о том, как построить дерево для подпапки и использовать его в качестве коммита.

async function writeFile(filename, buffer) {
  const signature = NodeGit.Signature.now('Jamie', 'jamie@diffblue.com');
  const repo = await NodeGit.Repository.openBare('java-demo.git');
  const commit = await repo.getBranchCommit('master');
  const rootTree = await commit.getTree();
  const builder = await NodeGit.Treebuilder.create(repo, rootTree);
  const oid = await NodeGit.Blob.createFromBuffer(repo, buffer, buffer.length);
  await builder.insert(filename, oid, NodeGit.TreeEntry.FILEMODE.BLOB);
  const finalOid = await builder.write();
  await repo.createCommit('refs/heads/master', signature, signature, 'Commit message', finalOid, [commit]);
}

const buffer = new Buffer('Hello\n', 'utf-8');
writeFile('test.txt', buffer).then(() => console.log('Done'));

Какие изменения необходимо будет опубликовать (например,) src / test.txt, а не test.txt?

1 Ответ

0 голосов
/ 20 ноября 2018

Типичный рабочий процесс для написания деревьев проходит через индекс.Например, git_index_add_frombuffer, за которым следует git_index_write_tree.Даже если вы не хотите записывать в индекс хранилища на диске, вы все равно можете использовать интерфейс индекса, создав индекс в памяти.

В пустом хранилище без индекса вы можете использовать git_index_new затем git_index_read_tree, чтобы получить индекс, инициализированный для содержимого вашего дерева.Затем запишите дерево в хранилище с помощью git_index_write_tree_to.

. Я менее знаком с интерфейсом treebuilder, но, похоже, вам придется рекурсивно создавать новые поддеревья.Например, получите или создайте поддерево src и вставьте в него блоб test.txt.Затем получите или создайте корневое дерево и вставьте в него поддерево src.

...