2014-08-28 100 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

相關問題