blah.txt git -6ren">
gpt4 book ai didi

ruby - 我如何使用 rugged 从命令行创建和提交文件?

转载 作者:数据小太阳 更新时间:2023-10-29 08:37:53 24 4
gpt4 key购买 nike

我正在尝试使用 rugged 来做一些非常简单的事情:创建并提交一个文件,使存储库保持与执行时相同的状态:

git init
echo "blah blah blah" > blah.txt
git add blah.txt
git commit -m "write blah.txt"

留下 git status 打印

On branch master
nothing to commit, working directory clean

我使用的代码改编自 rugged repo 的 readme ,归结为:

name = "blah.txt"
repo = Rugged::Repository.init_at dir

File.open File.join(dir, name), 'w' do |f|
f.write content
end

oid = Rugged::Blob.from_workdir repo, name
index = repo.index

index.add(:path => name, :oid => oid, :mode => 0100644)

options = {}
options[:tree] = index.write_tree(repo)

options[:author] = { :email => "testuser@github.com",
:name => 'Test Author',
:time => Time.now }
options[:committer] = { :email => "testuser@github.com",
:name => 'Test Author',
:time => Time.now }
options[:message] = "write #{ name }"
options[:parents] = repo.empty? ? [] : [ repo.head.target ].compact
options[:update_ref] = 'HEAD'

commit = Rugged::Commit.create(repo, options)

这似乎使 存储库 处于正确状态,但工作目录 在一个奇怪的地方,git status 打印

On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)

deleted: blah.txt

Untracked files:
(use "git add <file>..." to include in what will be committed)

blah.txt

我不明白 git 认为此时正在发生什么(blah.txt 是为删除准备的?)。执行 git reset --hard 将工作目录恢复到我所知道的所需状态。

在此先感谢您的帮助。

最佳答案

您忘记保存对索引的更改。您已将引用更新为指向新的提交,但索引未更改(因为您从未调用过 Index#write),因此就 git 而言,删除是暂存的,因为文件是不在索引中,就像您运行了 git rm blah.txt 一样。

关于ruby - 我如何使用 rugged 从命令行创建和提交文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24551308/

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