2017-10-08 24 views
0

私は他のいくつかのプログラマーとチームを組んでおり、gitリポジトリの著者ごとにコード行数を取得する必要があります。これは、作者によって改訂された行を意味するだけではありません。なぜなら、それは空行とコメント行を含むからです。理想的には、私は特定の作者(自分自身のために--author="BtheDestroyer")のコミットだけを含む新しいブランチを作ってから、clocを使ってコメント行数とコード行数を別々に得ることができます。私もそれが他のコミットを通じて早送り終わるかどうかわからないgitリポジトリ内の著者ごとのコード行数をカウントする

filepath: unmerged (commit-id-1) 
filepath: unmerged (commit-id-2) 
error: your index file is unmerged. 
fatal: cherry-pick failed 

:私は、しかし、私は次のエラーのトンを取得し、最後の行の間に

git log --author="BtheDestroyer" --format=%H > mycommits 
git checkout --orphan mycommits 
tac mycommits| while read sha; do git cherry-pick --no-commit ${sha}; done 

を使用して試してみました過程の中で。何か案は?

答えて

0

自分の質問に答える:grepcutを使用してコードに戻って変換し、元のフォルダ内の別のファイルをループに

私はgit blameを使用して終了してBourneシェルスクリプトを、一時ファイルに出力を整理し、その上でclocを実行します。

ここに私のシェルスクリプトは、(私は./Blame/でそれを持っているので、SOURCEが適切に変更!)似た何かをしたい人のためです:

#!/bin/bash 
#Name of user to check 
# If you have multiple usernames, separate them with a space 
# The full name is not required, just enough to not be ambiguous 
USERS="YOUR USERNAMES HERE" 
#Directories 
SOURCE=../source 

for USER in $USERS 
do 
    #clear blame files 
    echo "" > $USER-Blame.h 
    echo "" > $USER-Blame.cpp 
    echo "" > $USER-Blame.sh 
    echo "Finding blame for $USER..." 
    #C++ files 
    echo " Finding blame for C++ files..." 
    for f in $SOURCE/*.cpp 
    do 
     git blame "$f" | grep "$USER" | cut -c 70- >> "$USER-Blame.cpp" 
    done 
    #Header files 
    echo " Finding blame for Header files..." 
    for f in $SOURCE/*.h 
    do 
     git blame "$f" | grep "$USER" | cut -c 70- >> "$USER-Blame.h" 
    done 
    #Shell script files 
    echo " Finding blame for shell script files..." 
    for f in ./GetUSERBlame.sh 
    do 
     git blame "$f" | grep "$USER" | cut -c 70- >> "$USER-Blame.sh" 
    done 
done 

for USER in $USERS 
do 
#cloc 
echo "Blame for all users found! Cloc-ing $USER..." 
cloc $USER-Blame.* --quiet 
#this line is for cleaning up the temporary files 
#if you want to save them for future reference, comment this out. 
rm $USER-Blame.* -f 
done 
関連する問題