2014-02-25 2 views
0

,gitpython을 사용하여 마지막 커밋으로 현재 커밋의 git diff를 수행하는 방법은 무엇입니까? 나는 O를 파악 gitpython 모듈을 시도하고

hcommit = repo.head.commit 
tdiff = hcommit.diff('HEAD~1') 

하지만 tdiff = hcommit.diff('HEAD^ HEAD')이 작동하지 않습니다! 둘 다하지 않습니다 ('HEAD~ HEAD').,

나는 diff 출력을 얻으려고합니다!

+1

나는 gitpython 코드를 사용하지 않는 한 결코 인정하지만 분명한 것 같다 hcommit 경우 그 'repo.head.commit'이고, 그것은 * 특정 * 커밋에 바인딩되어 있으므로'hcommit.diff'는 "다른 커밋과 다른 커밋을 diff"하는 것을 의미합니다. 임의의 두 커밋의 차이점을 얻으려면 다른 시작점을 선택해야합니다. – torek

답변

1

gitPython을 사용하여 git diff를 얻는 방법을 알았습니다.

import git 
repo = git.Repo("path/of/repo/") 

# the below gives us all commits 
repo.commits() 

# take the first and last commit 

a_commit = repo.commits()[0] 
b_commit = repo.commits()[1] 

# now get the diff 
repo.diff(a_commit,b_commit) 

Voila !!!

+4

'AttributeError : 'Repo'객체에는 'diff'속성이 없으며 [Repo.diff]는 [API 문서] (https://gitpython.readthedocs.io/en/stable/reference)에 언급되어 있지 않습니다. html). 이 답변을 업데이트해야합니까? – phihag

4
import git 

repo = git.Repo('repo_path') 
commits_list = list(repo.iter_commits()) 

# --- To compare the current HEAD against the bare init commit 
a_commit = commits_list[0] 
b_commit = commits_list[-1] 

a_commit.diff(b_commit) 

이렇게하면 커밋에 대한 diff 개체가 반환됩니다. 이것을 달성하는 다른 방법이 있습니다. 예를 들어 (이 http://gitpython.readthedocs.io/en/stable/tutorial.html#obtaining-diff-information에서 붙여 복사/인) : (자식 명령 콜백을 사용하지 않고)

```

hcommit = repo.head.commit 
    hcommit.diff()     # diff tree against index 
    hcommit.diff('HEAD~1')   # diff tree against previous tree 
    hcommit.diff(None)    # diff tree against working tree 

    index = repo.index 
    index.diff()     # diff index against itself yielding empty diff 
    index.diff(None)    # diff index against working copy 
    index.diff('HEAD')    # diff index against current HEAD tree 

```

0

적절한 솔루션를 들어, create_patch을 사용해야합니다 선택권.

diff_as_patch = repo.index.diff(repo.commit('HEAD~1'), create_patch=True) 
print(diff_as_patch) 
1

는 DIFF의 내용을 얻으려면 :

커밋 이전과 현재의 지수를 비교하려면

import git 
repo = git.Repo("path/of/repo/") 

# define a new git object of the desired repo 
gitt = repo.git 
diff_st = gitt.diff("commitID_A", "commitID_B")