2015-09-20 67 views
0

我想獲取受特定提交影響的文件和目錄列表。我本身沒有任何問題,但我不知道如何獲取受影響的文件和目錄。獲取受提交影響的文件和目錄

只是爲了說清楚,我需要的是這樣的: 文件X - 刪除 文件y - 添加 文件z, - 修改

回答

2

Git是基於快照的;每次提交都包含完整的文件列表及其狀態。任何「受影響」文件的概念都需要另一個提交來比較它。這通常是針對其父母進行的,這似乎是你所問的。通過使用git_diff系列函數,可以計算出兩個提交(或更確切地說,它們的樹)之間的哪些文件是不同的。

您可以在examples listing中找到libgit2的示例。還有一個更一般的annotated diff example。第二個鏈接還顯示如何列出單個文件及其內容,如果您需要的話。檢查reference以獲取可用函數的完整列表以使用差異。

請注意,由於Git不跟蹤目錄,所以不會給你影響的導向器本身,而只是文件。

+0

「每個提交包含文件的完整列表及其狀態。」這就是我要的。文件列表及其狀態。你的答案幫助我做了一些事情,我會稍後做,所以不要刪除當前的答案。你能幫我做哪些功能嗎?感謝您的全面回答 –

+0

@StefanoMtangoo在這種情況下,這句話是指文件內容,模式,......參見** [Git Parable](http://tom.preston-werner.com/2009/05 /19/the-git-parable.html)**對Carlos提到的概念進行了非常簡單的解釋。 – nulltoken

1

您正在尋找git diff

libgit2中存在相同的函數,其文檔爲here

如果您正在分析較早的提交,「git diff [commit1] [commitAfterCommit1]」會給出第二次提交的更改列表。你可以修剪這個輸出來讓你自己修改文件名。

+0

不,我沒有比較提交。我想知道在此提交中更改的文件。 –

+0

你會發現在我給出的參考文獻中,你可以做很多不同的事情,所有的都在爲不同的提交查看不同的數據。例如,如果您不提供任何參數,它會查看您尚未完成提交的內容。我認爲這就是你想說的,但是當你說'文件在這個提交中被改變了'時,那麼你可以'git diff [previousCommit] [thisCommit]'來獲得這個提交中改變的內容。 –

+0

也可以更新答案,使用libgit2而不是git命令工具 –

相關問題