2016-08-31 34 views
0

我正在使用Pygit2在我正在處理的回購中運行某些操作。從任何地方的回購中獲取PyGit2中當前回購的路徑

如果我的代碼文件不在回購的根目錄,我該如何從回購庫中的任何位置獲取回購的路徑?

如果從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()) 

回答

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_DIR環境設置爲 變量,則不一定會找到 .git目錄。如果你有一個git工作樹,那麼.git是一個文件,而不是一個 目錄,並且libgit2似乎不處理此(從版本 0.24)。

+0

是的,遍歷父目錄肯定是一種方法。我正在檢查pygit2是否有一種機制來開箱即用。感謝您的回覆,我會再等待一天,才能接受這一個,以防其他答案進來。 –

相關問題