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

3 投票
2 回答
7167 浏览
提问于 2025-04-18 18:53

我刚开始学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会返回所有的差异细节,而我只想要更改过的文件列表。

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
3

我找到了一个解决办法,或者说至少是朝着正确的方向走了(灵感来自一个删除了自己回答的人...谢谢你,哥们)

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

这个方法基本上能满足我的需求,不过如果有更优雅的解决方案,我非常乐意听听!

撰写回答