gpt4 book ai didi

python - 将新的 "git ..."子命令实现为 Python 脚本

转载 作者:太空狗 更新时间:2023-10-30 00:53:13 28 4
gpt4 key购买 nike

我觉得这个问题可以用一两个超链接来回答;我只是没有想出正确的搜索词来自己找到这些链接...

我正在尝试对 git p4 子命令进行一些小的更改,该命令作为名为 /usr/libexec/git-core/git- 的 3797 行 Python 脚本实现p4。在深入探讨代码之前,我想了解一下 Python git 命令的结构。

子命令从它的调用者那里得到什么信息?它可以依赖现有的哪些环境变量?它如何检测配置(来自 .git/config 和/或 ~/.gitconfig)? git 命令行选项是如何从 git 传递下来的(如果有许多不同子命令通用的命令行选项,并且您想确保它们的处理是集中的)?子命令启动时的当前工作目录是什么?如果我更改 cwd 会怎样?我如何与 git 沟通它应该更改存储库(进行提交、添加或删除标签、重写历史记录)作为我的新子命令功能的一部分?我的命令可以在不创建工作树的情况下直接“处理”索引吗?如果可以,如何处理?如何处理和报告错误?如何以一致的方式打印使用信息?

我假设一定有关于这个主题的博客文章和事情,但是搜索“在 python 中编写一个 git 子命令”、“创建新的 git 子命令”等,只会找到从 Python 运行现有 git 命令的方法和方法分别创建新的 git repos。

最佳答案

当然是 Git 的文档 covers this .简短版本:

如果 git foo 不是内置命令,Git 将在 PATH 中搜索 git-foo 并运行它。但它什么都不做:它甚至不验证您是否在存储库目录中。 (毕竟,很多命令甚至不需要一个命令,例如 git hash-objectgit ls-remote。)

虽然存在内部和外部 API,但大多数新命令只是针对 existing suite 编写的git 命令。它们是一切发生的方式,它们决定是否需要工作副本或索引是否足够。

在这种情况下,“管道”命令通常变得很重要:根据我编写其中一些命令(并使用 filter-branch)、cat-filecommit-treefor-each-refmerge-baserev-listrev-parse 特别有用。显然,这取决于你想做什么:其他人可能会发现 --cached 选项与各种(否则)瓷器命令更相关。

关于python - 将新的 "git ..."子命令实现为 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49075168/

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