获取两个提交或分支之间更改的文件列表

3
我是一名Python/Git新手,但我正在尝试编写一个脚本,该脚本接受两个分支或提交作为参数,并显示两者之间更改的文件列表,而不是与常规差异一样带有所有其他信息。
在bash脚本中,可以使用以下方法来实现这一功能:
git diff --name-only FIRSTBRANCH...SECONDBRANCH

但是,使用gitpython编写Python脚本翻译似乎并不容易。如果有任何想法,请分享。
编辑:以下是一些代码。
user = str(sys.argv[1])
password = str(sys.argv[2])
currentBranch = str(sys.argv[3])
compBranch = str(sys.argv[4])

repo = Repo(directory)
currentCommit = repo.commit(currentBranch)
compCommit = repo.commit(compBranch)
diffed = repo.diff(currentBranch, compBranch)

当我只想要一个更改文件列表时,print diff 会返回所有差异细节。


@MattDMo 我尝试使用gitpython的.diff功能,但据我所知它没有办法让我添加"--name-only"标志,这将解决我的问题。如果有的话,那就太理想了。 - z0d14c
它也不会向您抛出输出。您将获得Diff元素列表以供使用,并可以从中提取所需的任何部分。例如,请参见http://www.masnun.com/2012/01/28/fetching-changed-files-diff-between-two-git-commits-in-python.html。(我假设它仍然有效或曾经有效,我实际上并不知道,但这似乎是文档所说的内容。) - Etan Reisner
1
@z0d14c 在你的问题中放上不起作用的代码,以及它为什么不起作用的详细描述。 - Marcin
@MattDMo 现在发布中 - z0d14c
2个回答

8
这里有一个用Python实现的方法。
 #Dif two branches, returns list
import git 


def gitDiff(branch1, branch2):
    format = '--name-only'
    commits = []
    g = git.Git('/path/to/git/repo')
    differ = g.diff('%s..%s' % (branch1, branch2), format).split("\n")
    for line in differ:
        if len(line):
            commits.append(line)

    #for commit in commits:
    #    print '*%s' % (commit)
    return commits

2
虽然这个答案可能是正确和有用的,但最好还是附上一些解释,以解释它如何帮助解决问题。如果将来发生了变化(可能与此无关),导致它停止工作并且用户需要了解它曾经如何工作,这将变得尤为有用。 - Kevin Brown-Silva

3

以下是固定的或至少在正确的轨道上(受某人回答删除的启发...谢谢,伙计)

subprocess.check_output(['git', 'diff', '--name-only', currentBranch + '..' + compBranch])

这基本上做到了我需要的,尽管如果有更优雅的解决方案,我很愿意听听!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接