跳转到主要内容

Kids VCS管理库。

项目描述

Latest PyPI version Travis CI build status Test coverage

kids.vcs 是一个Python库,提供GIT辅助工具。如果它没有与github搞混,我可能会将其命名为 kids.git

它是“Kids”(用于保持简单)库的一部分。

特性

使用 kids.vcs

  • 您可以管理和访问您的git仓库、提交、日志或git配置。

兼容性

此代码适用于python2和python3。尚未在Windows上测试。

安装

您不需要下载代码的GIT版本,因为 kids.vcs 可在PyPI上获得。因此,您应该能够运行

pip install kids.vcs

如果您已下载了GIT源代码,则可以通过传统方式安装当前版本

python setup.py install

如果您没有GIT源代码,但想从github获取最新master或分支,您也可以

pip install git+https://github.com/0k/kids.vcs

或者甚至选择特定的修订版(分支/标签/提交)

pip install git+https://github.com/0k/kids.vcs@master

用法

让我们用一个新的git仓库来玩玩,首先创建临时目录

>>> from __future__ import print_function

>>> import tempfile, os
>>> old_cwd = os.getcwd()
>>> tmpdir = tempfile.mkdtemp()
>>> os.chdir(tmpdir)

现在让我们创建一个真正的git仓库

>>> from kids.vcs import git

此第一条命令将创建一个新目录并启动 git init,并将返回新的 GitRepos 对象

>>> r = git.GitRepos.create("repos",
...                         email="committer@example.com",
...                         name="The Committer")

您可能只想使用现有的目录并启动 git init,然后使用

>>> r = git.GitRepos.init("repos")

或者,如果想要使用已经初始化的现有文件夹

>>> r = git.GitRepos("repos")

默认情况下,使用当前目录,并且包含当前目录的最高级git仓库将用作主git仓库。

避免实例化不存在的git仓库

>>> git.GitRepos("/")
Traceback (most recent call last):
...
OSError: Not a git repository ('/' or any of the parent directories).

Git命令快捷方式

除了以下部分将公开的所有辅助工具之外,GitRepos对象提供了一个便捷的.git属性,可以直接访问git命令行

>>> print(r.git.rev_parse(is_bare_repository=True))
false

需要注意以下几点

  • 方法名称是要启动的git命令

  • _(下划线)将被替换为-

  • 有2种不同的方法来使用这些方法

    • 提供一个唯一的字符串数组,该数组将被简单地追加到命令行。

    • 提供字符串位置参数和关键字参数

      • 关键字参数是选项...

        • 如果关键字由多个字符组成,则在其前面添加双横线

        • 如果关键字是单个字符,则在其前面添加单横线

        • _(下划线)在关键字名称中将被替换为-

        • 然后将值追加到命令行上。

      • 位置参数将追加在所有选项之后...

  • 方法返回值是发送命令的空间删除标准输出。

为了说明这一点以及以下各点

>>> print(r.git.commit(
...     message='new: first commit',
...     author='Bob <bob@example.com>',
...     date='2000-01-01 10:00:00',
...     allow_empty=True))
[master (root-commit) ...] new: first commit
 Author: Bob <bob@example.com>
 Date: Sat Jan 1 10:00:00 2000 ...

>>> print(r.git.tag("0.0.1"))
>>> print(r.git.commit(
...     message='new: second commit',
...     author='Alice <alice@example.com>',
...     date='2000-01-02 11:00:00',
...     allow_empty=True))
[master ...] new: second commit
 Author: Alice <alice@example.com>
 Date: Sun Jan 2 11:00:00 2000 ...
>>> print(r.git.tag("0.0.2"))

访问核心信息

您可以从git仓库本身获取有趣的信息

>>> print(r.toplevel)
/.../repos

>>> r.bare
False

>>> print(r.gitdir)
/.../repos/.git

读取git配置

我们可以通过以下方式访问配置

>>> r.config
<...GitConfig...>

>>> print(r.config["core.filemode"])
true

您还可以直接实例化GitConfig

>>> from kids.vcs import git

>>> print(git.GitConfig("repos")["core.filemode"])
true

在没有仓库的情况下,应该使用当前仓库,如果没有,它应该像正常的git config一样回答

>>> git.GitConfig()["core.filemode"]
Traceback (most recent call last):
...
KeyError: 'core.filemode'
>>> os.chdir("repos")
>>> print(git.GitConfig()["core.filemode"])
true

Git提交访问

我们可以访问每个提交的有趣信息

>>> r.commit("HEAD")
<GitCommit 'HEAD'>

并且有几种信息可用

>>> print(r.commit("HEAD").author_name)
Alice
>>> print(r.commit("master").subject)
new: second commit

您可以访问所有这些

>>> print(", ".join(sorted(git.GIT_FORMAT_KEYS)))
author_date, author_date_timestamp, author_email, author_name, body,
committer_date_timestamp, committer_name, decorate_string,
parent_list_string, raw_body, sha1, sha1_short, subject

还有一个便利的属性date

>>> print(r.commit("0.0.2").date)
2000-01-02

标签

您可以获取标签列表

>>> r.tags
[<GitCommit ...'0.0.1'>, <GitCommit ...'0.0.2'>]

日志

您可以通过以下方式访问所有提交

>>> list(r.log())
[<GitCommit ...>, <GitCommit ...>]

并指定要包含或排除的提交祖先(参见git log

>>> list(r.log(["HEAD", "^0.0.1", ]))
[<GitCommit ...>]

贡献

欢迎任何建议或问题。非常欢迎推送请求,请查看指南。

推送请求指南

您可以发送任何代码。我会查看它,并将其集成到代码库中,并将您作为作者。这个过程可能需要时间,并且如果遵循以下指南,将花费更少的时间

  • 使用PEP8或pylint检查您的代码。尽量保持80列宽。

  • 按最小的关注点分离您的提交。

  • 每个提交都应该通过测试(以便进行易于二分搜索)

  • 每个功能/错误修复提交都应该包含代码、测试和文档。

  • 欢迎优先进行带有排版或代码外观更改的小提交。这些应该在提交摘要中用!minor标记。

  • 提交消息应遵循gitchangelog规则(检查git日志以获取示例)

  • 如果提交修复了问题或完成了功能的实现,请在摘要中提及。

如果您对以下未回答的指南有任何疑问,请检查当前的git log,您可能会找到以前的提交,它将向您展示如何处理您的问题。

许可证

版权(c)2019 Valentin Lab。

根据BSD许可证许可。

变更日志

0.0.3 (2019-04-02)

新功能

  • 添加GitUrl作为访问远程git仓库URL部分的便利方式。[Valentin Lab]

  • 添加了ls_remote(url)remote_url_reachable(url)query_remote_for_ref(url, ref)以与远程仓库一起工作。[Valentin Lab]

  • 在模块中直接提供对 git 命令行的快捷方式。[Valentin 实验室]

修复

  • Python 3.7 兼容性修复。[Valentin 实验室]

0.0.2 (2018-04-09)

新功能

  • 主要更新。[Valentin 实验室]

    • GitCommit:不再识别魔法标识符 LAST

    • GitCommit:添加了新的属性来访问提交的直接信息 sha1_shortauthor_emailparent_list_stringdecorate_string

    • GitCommit:添加了使用 trailer_LABEL 属性的 Pythonic 访问通用尾部值的权限。支持多值尾部值。

    • GitCommit:添加了特定的 authorsauthor_names 特殊属性,利用 Co-Authored-By 尾部值和提交作者提供完整的作者列表。

    • GitCommit:新的 parents 属性用于获取 GitCommit 父级列表。

    • GitCommit:新的 tags_name 属性用于获取当前提交的标签列表,包括 tags,它通过新的 GitTag 对象遍历当前提交,以及 .tag(label) 方法通过其标签实例化当前提交的 GitTag

    • GitCommit:支持 <(小于)操作符,尽可能与命令 git log 提供的提交顺序关系相匹配。

    • GitCommit:支持 in(.__contains__(..))操作符,与祖先关系相匹配。

    • 新的 GitTag``object 代表注解标签和非注解标签,有关用法请参阅 README.rst

    • GitRepos:新的 .create(..) 类方法用于创建新的 git 仓库。

    • GitRepos:新的 .init(..) 类方法用于从现有仓库创建新的 git 仓库。

    • GitRepos:新的 .Tag(label) 方法用于从给定的标签获取 GitTag 对象。

    • GitRepos:将 .commit(..) 方法重命名为 .Commit(..)。旧方法仍保留以兼容性原因。

    • GitRepos:将 .config(..) 方法重命名为 .Config(..)。旧方法仍保留以兼容性原因。

    • GitRepos:API 变更:.log(..) 方法现在更接近于 git log 命令行的使用,已移除 includesexcludesinclude_merge 参数。请参阅文档以获取更多信息。

修复

  • 使用 GitRepos.log() 时捕获了坏仓库。[Valentin 实验室]

  • GitConfig() 在没有参数时会失败。[Valentin 实验室]

0.0.1 (2015-02-05)

  • 首次导入。[Valentin 实验室]

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源分布

kids.vcs-0.0.3.tar.gz (18.3 kB 查看哈希值)

上传时间 源代码

构建分布

kids.vcs-0.0.3-py2.py3-none-any.whl (18.3 kB 查看哈希值)

上传于 Python 2 Python 3

由以下支持