结实的,拉重底座可能吗

  • 本文关键字: ruby git rugged
  • 更新时间 :
  • 英文 :


使用rugged如何执行以下操作:fetchpullrebase

我使用的是development分支,在查看了此处作为Remote类指南的文档后。

EDIT:由于git pull只是git fetchgit merge FETCH_HEAD的简写,因此更好的问题是如何执行git fetchgit mergegit rebase

git fetch:

remote = Rugged::Remote.lookup(repo, "origin")
remote.connect(:fetch) do |r|
r.download
r.update_tips!
end

git合并:

merge_index = repo.merge_commits(
Rugged::Branches.lookup(repo, "master").tip,
Rugged::Branches.lookup(repo, "origin/master").tip
)
raise "Conflict detected!" if merge_index.conflicts?
merge_commit = Rugged::Commit.create(repo, {
parents: [
Rugged::Branches.lookup(repo, "master").tip,
Rugged::Branches.lookup(repo, "origin/master").tip
],
tree: merge_index.write_tree(repo),
message: 'Merged `origin/master` into `master`',
author:    { name: "User", email: "example@test.com" },
committer: { name: "User", email: "example@test.com" },
update_ref: 'master'
})

git-rebase:

回扣尚未在libgit2中实现,因此在Rugged中不可用。


一般来说,您的用例听起来非常高级,而粗糙的API目前更侧重于低级git存储库的访问和修改。最终,我们在未来还会有许多更高级的助手(比如更简单/正确的pull),但我们还没有做到。

上面的答案似乎已经过时了。语法已更改。我需要实现一个pull操作,我正试图通过获取,然后合并和提交来实现这个操作。对于提取,我使用类似的提取方法

repo.fetch('origin', [repo.head.name], credentials: credits)

它似乎真的得到了一些东西,因为返回的哈希中充满了关于提取内容的信息。但是,它不会写入磁盘。当我在命令行中执行git状态时,我希望分支在几次提交之后,但事实并非如此。如果我用上面的相同命令第二次获取,那么什么都不会获取。这可能是因为它已经被第一次提取了,但我不知道提取在哪里。

现在,如果我继续在命令行中手动获取,然后尝试使用以下代码合并远程分支和本地分支的本地副本(本地更改已经提交)

ref_name = repo.head.name                            # refs/heads/branchname
branch_name = ref_name.sub(/^refs/heads//, '')     # branchname
remote_name = "#{remote}/#{branch_name}"             # origin/branchname
remote_ref = "refs/heads/#{remote_name}"             # refs/heads/origin/branchname
local_branch = repository.branches[branch_name]
remote_branch = repository.branches[remote_name]
index = repo.merge_commits(local_branch.target, remote_branch.target)
options = {
author:     { time: Time.now }.merge(author),
committer:  { time: Time.now }.merge(committer),
message:    'merged',
parents:    [
local_branch.target,
remote_branch.target
],
tree:       index.write_tree(repository),
update_ref: 'HEAD'
}
Rugged::Commit.create repo, options

它按预期创建提交。提交也被写入磁盘,并且在fistory中可见。但由于某种原因,该分支现在有未提交的更改。本地文件内容没有更改。我希望他们拥有提取的提交的内容。

有人能提供一个提取、合并、提交的工作示例吗?在撰写本文时,崎岖不平的版本是0.22.0b3

更新1

这将使我的工作树达到想要的状态

repo.checkout ref_name, strategy: :force

更新2

我发现了如何获取并保存状态到磁盘

r = repo.remotes[remote]
r.fetch(credentials: git_credentials)
r.save

相关内容

  • 没有找到相关文章

最新更新