我正在使用Pygit2在我正在处理的回购中运行某些操作。
如果我的代码文件不在repo的根目录下,如何从repo中的任何位置获取repo的路径?
如果从root调用该函数,我可以执行以下操作,但是如果我从存储库代码中的任何位置运行它,该怎么办?
mAdapter = new FirebaseRecyclerAdapter<Campaign, CampaignHolder>(Campaign.class, R.layout.recyclerview_template, CampaignHolder.class, ref) {
@Override
public void populateViewHolder(final CampaignHolder viewHolder, final Campaign campaign, final int position) {
findViewById(R.id.progress_bar).setVisibility(View.INVISIBLE);
MainActivity.this.holder = viewHolder;
viewHolder.setTitle(campaign.title);
//... Other "set" methods
}
}
答案 0 :(得分:1)
一个选项只是遍历父目录,直到找到.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
环境,则GIT_DIR
目录
变量。如果您有一个git工作树,那么.git
是一个文件,而不是
目录,libgit2
似乎没有处理此问题(从版本开始
0.24)。
答案 1 :(得分:0)
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