繁体   English   中英

从存储库中的任何位置获取 PyGit2 中当前存储库的路径

[英]Get path of the current repo in PyGit2 from anywhere within the repo

我正在使用 Pygit2 在我正在处理的 repo 中运行某些操作。

如果我的代码文件不在 repo 的根目录下,如何从 repo 内的任何位置获取 repo 的路径?

如果从 root 调用该函数,我可以执行以下操作,但是如果我从存储库代码中的任何位置运行它,该怎么办?

$ cd /home/test/Desktop/code/Project
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.

$ ipython3

In [1]: import os, pygit2
In [2]: repo = pygit2.Repository(os.getcwd())

一种选择是简单地遍历父目录,直到找到.git目录:

import os
import pathlib
import pygit2

def find_toplevel(path, last=None):
    path = pathlib.Path(path).absolute()

    if path == last:
        return None
    if (path / '.git').is_dir():
        return path

    return find_toplevel(path.parent, last=path)

toplevel = find_toplevel('.')
if toplevel is not None:
  repo = pygit2.Repository(str(toplevel))

当然,这里有一些警告。 如果有人设置了GIT_DIR环境变量,您不一定会找到.git目录。 如果你有一个 git 工作树,那么.git是一个文件,而不是一个目录,而且libgit2似乎没有处理这个(从 0.24 版开始)。

pygit2确实有一个机制可以做到这一点,来自libgit2

from pygit2 import Repository, discover_repository


def get_repo(path: str) -> Repository:
    repo_path = discover_repository(path)
    if not repo_path:
        raise ValueError(f"No repository found at '{path}' and its parents")
    return Repository(repo_path)

https://www.pygit2.org/repository.html?highlight=discover#pygit2.discover_repository

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM