2014-10-12 54 views
0

我想獲取一個表或csv(並最終可視化)關於git倉庫中的每個文件以及每次更改文件時的日期。GIT:提取文件修改數據進行分析

預期輸出: 數量是很多提交如何遏制每天 Date1 file1 12 Date1 file2 4 Date2 file1 6

該文件也許我應該去和循環槽的所有提交,並得到以某種方式修改後的文件從每次提交。你能幫我嗎?

研究

  • 對於迭代低谷犯我發現這個=>Git: want to iterate through all commits on branch, and list files in each commit

  • 獲取提交信息
    git diff --name-only SHA1 SHA2

  • 如何獲得的提交日期?
    git show $commit(在這裏,我需要所有這些進行了修改,並提交日期的文件)

  • 圖如何輸出這是一個CSV文件。
    可能這裏超出了範圍,因爲問題是Git。如果有人想要幫助,歡迎。

進展情況:

for commit in $(git rev-list master) do # Get the author date git log -1 ${commit} --pretty="%ad" --date=short # get the files changes git diff --name-only ${commit}^! done | sort | uniq -c | sort -rn

+1

你已經試過了什麼?你知道'git log'嗎?你知道如何編寫bash腳本嗎? – shadowtalker 2014-10-12 00:31:45

+0

是的,我嘗試了幾個孤立的命令。問題是我有關於bash的0知識:( – mynkow 2014-10-12 00:33:35

回答

4

日期Git中通常並不意味着什麼人認爲或希望他們。

每個提交都有兩個相關的日期 - 作者日期和提交者日期。這兩個都來自任何提交的人的計算機時鐘,他們都可以通過命令行覆蓋。因此,它們並不是特別可靠的任何指標。

但是,更大的問題是,僅僅告訴您在提交或創作的原始存儲庫中記錄的信息。當你在談論有影響的DVCS時。如果我去年夏天提交了一些內容,然後今天將其推送到共享服務器,您會看到最後一次提交的夏天日期。那是你要的嗎? (我猜「不」)如果沒有,那麼你需要通過服務器上的接收掛鉤設置一些東西來記錄日期。

如果你想繼續你的原始路徑,那麼我會建議你沿着這些路線做一些事情。從此開始。它會轉儲「日期文件」。然後你可以把它放到任何你想整理結果的地方(awk,perl,python等)

for commit in $(git rev-list master) 
do 
    # Get the author date 
    commitDate=$(git log -1 ${commit} --pretty="%ad" --date=short) 
    # get the files changes 
    git diff --name-only ${commit}^! | xargs -n1 -I {} echo ${commitDate} {} 
done 
+0

完美,這有助於很多,我的想法是找到頻繁更改的文件來檢測代碼問題。謝謝! – mynkow 2014-10-12 01:05:09

+0

@自己在第一句後停止閱讀了嗎? – 2014-10-12 01:06:49

+0

如果你想要的只是頻率,那麼你可以簡單地轉儲每個SHA改變的文件,然後計算每個名稱出現的次數並按次數排序。 – 2014-10-12 01:27:38