gpt4 book ai didi

ruby - 来自原点的坚固合并提交不会更新工作树

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:12 24 4
gpt4 key购买 nike

类似于this question ,但我没有创建新文件,而是尝试从原点合并。使用 Rugged::Repositorymerge_commits 创建新索引和新的合并提交后,git 报告新文件(来自 origin ) 已删除。

创建合并索引,

> origin_target = repo.references['refs/remotes/origin/master'].target
> merge_index = repo.merge_commits(repo.head.target, origin_target)

和一个新的合并提交,

> options = {
update_ref: 'refs/heads/master',
committer: {name: 'user', email: 'user@foo.com', time: Time.now},
author: {name: 'user', email: 'user@foo.com', time: Time.now},
parents: [repo.head.target, origin_target],
message: "merge `origin/master` into `master`"}

并确保使用合并索引中的树。

> options[:tree] = merge_index.write_tree(repo)

创建提交

> merge_commit = Rugged::Commit.create(repo, options)

检查我们的 HEAD 是否已更新:

> repo.head.target.tree
=> #<Rugged::Tree:16816500 {oid: 16c147f358a095bdca52a462376d7b5730e1978e}>
<"first_file.txt" 9d096847743f97ba44edf00a910f24bac13f36e2>
<"second_file.txt" 8178c76d627cade75005b40711b92f4177bc6cfc>
<"newfile.txt" e69de29bb2d1d6434b8b29ae775ad8c2e48c5391>

看起来不错。我在索引中看到了新文件。将其写入磁盘。

> repo.index.write
=> nil

...但是 git 报告新文件已删除:

$ git st
## master...origin/master [ahead 2]
D newfile.txt

如何正确更新我的索引和工作树?

最佳答案

Git 存储库和工作目录之间有一个重要的区别。虽然最常见的命令行 git 命令在工作目录和存储库上运行,但 libgit2/librugged 的​​低级命令主要仅在存储库上运行。这包括在您的示例中编写索引。

要更新工作目录以匹配索引,以下命令应该有效(在写入索引后):

options = { strategy: force }
repo.checkout_head(options)

checkout_head 的文档:http://www.rubydoc.info/github/libgit2/rugged/Rugged/Repository#checkout_head-instance_method

注意:我使用 update_ref: 'HEAD' 测试了提交。我不确定 update_ref: 'refs/heads/master' 是否会产生同样的效果。

关于ruby - 来自原点的坚固合并提交不会更新工作树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27971814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com