2016-08-31 4 views
0

Pygit2를 사용하여 작업중인 Repo에서 특정 작업을 실행하고 있습니다.Repo 내의 어느 곳에서나 PyGit2의 현재 repo 경로를 가져옵니다.

내 코드 파일이 repo 루트에 있지 않은 경우 repo 내 어디에서든지 repo 경로를 가져올 수 있습니까?

함수가 루트에서 호출 된 경우를 위해 아래 작업을 수행 할 수 있지만 리포지토리 코드 내 어디에서든지 실행하면 어떻게 할 수 있습니까?

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 디렉토리를 찾을 때까지

$ 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()) 

답변

1

하나의 옵션은 부모 디렉토리를 통과하는 것입니다. 어떤 사람이 GIT_DIR 환경을 변수로 설정하면 .git 디렉토리를 반드시 찾을 필요는 없습니다. git worktree를 사용하는 경우 .git은 디렉토리가 아닌 파일이고 libgit2은이 파일을 처리하지 못합니다 (버전 0.24 현재).

+0

예, 상위 디렉토리 탐색은 확실히 한 가지 방법입니다. 나는 pygit2가 그것을 밖으로 할 메커니즘이 있는지 확인했다. 답장을 보내 주셔서 감사합니다. 다른 답이 올 경우를 대비하여이 날을 수락하기 전에 하루 더 기다려 드리겠습니다. –

관련 문제