4

スクリプトで GitPython モジュールを使用しようとしていますが、使用できません。それはあまり文書化されていません:GitPython Blame

通常、再現したい git のせいは次のとおりであるため、私はそれほど遠くないと思います。git blame -L127,+1 ../../core/src/filepath.cpp -e

これが私のスクリプトです:

from git import *
    repo = Repo("C:\\Path\\to\\my\\repos\\")
    assert not repo.bare
    # log_line = open("lineDeb.txt")
    # for line in log_line:
    repo.git.blame(L='127,+1' '../../core/src/filepath.cpp', e=True)

コメントされた 2 行は、「lineDeb.txt」ファイルの各番号行で git Blame を実行するという最終目標のためのものです。

私は次の出力を持っています:

...
git.exc.GitCommandError: 'git blame -L127,+1../../core/src/filepath.cpp -e' returned with exit code 129
stderr: 'usage: git blame [options] [rev-opts] [rev] [--] file
...

私はosモジュールでそれを作ることができることを知っていますが、私はpythonのままにしたい.

このモジュールまたはpythonの専門家が私を助けることができますか?

たぶん、GitPython を正しく使用していないのでしょうか?

目標は、ラインコミッターのメールを取得することです...

前もって感謝します。

4

2 に答える 2

5
for commit, lines in repo.blame('HEAD', filepath):
    print("%s changed these lines: %s" % (commit, lines))

は、指定された をファイル内の出現順にcommit変更したものです。linesしたがって、すべてlinesをファイルに書き込む場合、ファイルのfilepathリビジョンは になりますHEAD

特定の行のみを探している場合、現在blameサブコマンドに渡すことができるオプションがないため、自分で行を数えなければなりません。

ln = 127 # lines start at 0 here
tlc = 0

for commit, lines in repo.blame('HEAD', filepath):
    if tlc <= ln < (tlc + len(lines)):
         print(commit)
    tlc += len(lines)

-Lこれは、それぞれのオプションを に渡すよりも最適ではありgit blameませんが、仕事をする必要があります。

遅すぎることが判明した場合は、 に追加**kwargsRepo.blameて に渡すPR を作成することを検討できますgit blame

于 2015-03-09T13:20:19.640 に答える