2014-08-28 46 views
2

我是Python/Git newb,但我正在尝试编写一个脚本,该脚本需要两个分支或提交作为参数,并在两者之间显示已更改文件的列表,不是所有与常规差异相关的无关信息。获取两个提交或分支之间已更改文件的列表

这是通过使用

git diff --name-only FIRSTBRANCH...SECONDBRANCH 

在bash脚本来实现,但使用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) 

打印差异将返回所有的差异细节时,我只想要更改的文件列表

+0

@MattDMo我试过使用gitpython .diff功能,但它没有办法让我添加“--name-only”标志,据我所知,这将解决我的问题。如果是这样,那么这将是理想的。 – z0d14c 2014-08-28 19:53:31

+0

它不会在您输出。你会得到一个Diff元素的列表,你可以从中得到你需要的任何位。例如,请参阅http://www.masnun.com/2012/01/28/fetching-changed-files-diff-between-two-git-commits-in-python.html。 (我认为这仍然是有效的或者曾经是,我实际上不知道,但看起来像文档所说的那样。) – 2014-08-28 19:54:56

+1

@ z0d14c把不起作用的代码连同它的完整描述工作,在你的问题。 – Marcin 2014-08-28 20:07:00

回答

2

固定或至少在正确的轨道与以下(灵感人谁删除了自己的答案...谢谢,家伙)

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

这基本上做什么,我需要它,但如果有一个更优雅的解决方案,我很想听听吧!

2

这是一种在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

虽然这个答案可能是正确和有用的,但如果你[随同它一起包括一些解释],这是首选(http://meta.stackexchange.com/q/114762/ 159034)来解释它是如何帮助解决问题的。如果存在导致其停止工作并且用户需要了解其曾经工作的变化(可能不相关),这在未来变得特别有用。 – 2015-12-21 17:51:34

相关问题