gpt4 book ai didi

python - 以编程方式 `git checkout .` 与 dulwich

转载 作者:太空狗 更新时间:2023-10-30 00:37:15 26 4
gpt4 key购买 nike

有这个代码

from dulwich.objects import Blob, Tree, Commit, parse_timezone
from dulwich.repo import Repo
from time import time

repo = Repo.init("myrepo", mkdir=True)
blob = Blob.from_string("my file content\n")
tree = Tree()
tree.add("spam", 0100644, blob.id)
commit = Commit()
commit.tree = tree.id


author = "Flav <foo@bar.com>"
commit.author = commit.committer = author
commit.commit_time = commit.author_time = int(time())
tz = parse_timezone('+0200')[0]
commit.commit_timezone = commit.author_timezone = tz
commit.encoding = "UTF-8"
commit.message = "initial commit"

o_sto = repo.object_store
o_sto.add_object(blob)
o_sto.add_object(tree)
o_sto.add_object(commit)

repo.refs["HEAD"] = commit.id

我最终在历史记录中进行了提交,但是创建的文件正在等待删除(git status 这么说)。

git checkout . 修复了它。

我的问题是:如何使用 dulwich 以编程方式执行 git checkout .

最佳答案

Git 状态显示它已被删除,因为工作副本中不存在该文件,这就是为什么检查它可以修复状态。

dulwich 中似乎还不支持高级工作副本类和函数。您必须处理树和 Blob 以及解包对象。

好的,接受挑战:我可以与 Dulwich 进行基本 checkout :

#get repository object of current directory
repo = Repo('.')
#get tree corresponding to the head commit
tree_id = repo["HEAD"].tree
#iterate over tree content, giving path and blob sha.
for entry in repo.object_store.iter_tree_contents(tree_id):
path = entry.in_path(repo.path).path
dulwich.file.ensure_dir_exists(os.path.split(path)[0])
with open(path, 'wb') as file:
#write blob's content to file
file.write(repo[entry.sha].as_raw_string())

它不会删除必须删除的文件,不会关心你的索引等。
另见 Mark Mikofski's github project以获得基于此的更完整的代码。

关于python - 以编程方式 `git checkout .` 与 dulwich,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6640546/

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