统计Git版本库每个人提交次数和代码的增加和删除行数脚本
一、简单说明基于git log的输出统计;
按照月份统计,当然稍微改动也可以按照年月进行统计;
遍历所有的版本库,可以在统计的时候指定不同的分支。
二、脚本内容
脚本分为三部分部分,一部分为格式化输出,如下:
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>#!/bin/bash</li><li># 按照cdc.txt 中定义的目录统计个项目的总提交次数、增加、删除、留存代码行数</li><li># 统计按照自然月进行或者指定时段进行 $1 为月份(1-12)</li><li>### 当前目录###</li><li>if [ $(echo $0 | grep '^/') ]; then</li><li>cur_dir=$(dirname $0)</li><li>else</li><li>cur_dir=$(pwd)/$(dirname $0)</li><li>fi</li><li></li><li>### 定义使用文件###</li><li>repo_file=$cur_dir/cdc.txt #定义版本库目录文件</li><li>everyone_file=$cur_dir/every.txt</li><li>goluk_file=$cur_dir/goluk.csv</li><li>### 接收月份参数###</li><li>Month=$1</li><li>:>$goluk_file</li><li>while read name project_dir</li><li>do</li><li></li><li>echo $name |awk '{printf "%-20s%1s%10s%1s%10s%1s%10s%1s%10s\n",$1, \</li><li>"," , "提交次数" , "," , "增加代码" , "," , "减少代码" , "," , "留存代码"}' >> $goluk_file</li><li>everyone_file=$cur_dir/$project_dir/every.txt</li><li>### 汇总计算各人的代码行数</li><li>### 删除空行</li><li>awk '!/^$/' $everyone_file |\</li><li>### 计算</li><li>awk '{if($1 ~ /^[a-zA-Z]+$/) {if(NR==1){printf "%20s",$1 }else {printf "\n%20s%8d%8d",$1,adds,dels;adds=0;dels=0}} \</li><li>else{adds=adds+$1;dels=dels+$2;next} }' |\</li><li>### 汇总</li><li>awk '{cnt[$1]++;name[$1]=$1;adds[$1]+=$2;dels[$1]+=$3}END{for(i in name) printf "%-20s%1s%10d%1s%10d%1s%10d%1s%10d\n",\</li><li>name[i],",",cnt[i],",",adds[i],",",dels[i],",",adds[i]-dels[i]}' >> $goluk_file</li><li>done < $repo_file</li></ol>一部分为实际统计计算部分,代码如下:
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>#!/bin/bash</li><li># 统计后台的总的提交次数、增加、删除、留存代码行数</li><li># 统计按照自然月进行或者指定时段进行 $1 为月份(1-12)</li><li>#### 定义分支 ####</li><li>if [ $2 = "" ] ; then</li><li>Branch=develop</li><li>else</li><li>Branch=$2</li><li>fi</li><li>#### 定义版本库 ####</li><li>#git_repo=cdc.txt</li><li>### 当前目录###</li><li>if [ $(echo $0 | grep '^/') ]; then</li><li>cur_dir=$(dirname $0)</li><li>else</li><li>cur_dir=$(pwd)/$(dirname $0)</li><li>fi</li><li></li><li>### 定义使用文件###</li><li>repo_file=$cur_dir/cdc.txt #版本库定义</li><li>commit_file=$cur_dir/commit.txt #提交次数明细</li><li>total_file=$cur_dir/total.txt #每人提交次数汇总</li><li>detail_file=$cur_dir/detail.txt #每人提交行数明细</li><li>everyone_file=$cur_dir/every.txt</li><li>### 接收月份参数###</li><li>Month=$1</li><li>### 初始化中间文件###</li><li>:>$commit_file</li><li>:>$detail_file</li><li>:>$everyone_file</li><li></li><li>### 首先统计每个人的提交次数,记录到中间文件</li><li>function Count() {</li><li>while read git_url</li><li>do</li><li>echo $git_url</li><li>goluk_repo=`echo $git_url |awk -F/ '{print $NF}'`</li><li>cd $goluk_repo</li><li>git checkout $Branch</li><li>git pull</li><li>git log --pretty='%aN' --since ==2016-$Month-01 --until=2016-$Month-31 | sort | uniq -c | sort -k1 -n -r >> $commit_file</li><li>cd ../</li><li>done < $repo_file</li><li>}</li><li>### 代码提交行数</li><li>function Codelines() {</li><li>while read git_url</li><li>do</li><li>echo $git_url</li><li>goluk_repo=`echo $git_url |awk -F/ '{print $NF}'`</li><li>cd $goluk_repo</li><li>git pull</li><li>git checkout $Branch</li><li># 统计各版本总行数</li><li>git log --author=^.* --pretty=tformat: --numstat --since=2016-$Month-01 --until=2016-$Month-31 |\</li><li>awk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } \</li><li>END { print add,subs,loc ,repo_name }' repo_name=$goluk_repo - >> $detail_file</li><li>### debug begin</li><li>###git log --author=^.* --pretty=tformat:%aN --numstat --since=2016-$Month-01 --until=2016-$Month-31 |\</li><li>### awk '!/^$/' >> $cur_dir/every2.txt</li><li>## debug end</li><li># 记录各人代码、增加行数、删除行数明细</li><li>git log --pretty='tformat:%aN' --numstat --since=2016-$Month-01 --until=2016-$Month-31 >>$everyone_file</li><li>cd ../</li><li>done < $repo_file</li><li>}</li><li>#awk '{sum[$2]+=$1}END{for(i in sum)print i ,sum[i]}' scrope.txt |sort -k2 -nr ></li><li>Count $Month</li><li>### 计算总提交次数</li><li>awk '{sum[$2]+=$1}END{for(i in sum)print i ,sum[i]}' $commit_file |sort -k2 -nr > $total_file</li><li>Codelines $Month</li><li>### 汇总提交数</li><li>awk '{cnt+=$2}END{printf "%-20d%10d\n",Mon,cnt}' Mon=$Month $total_file</li><li>### 汇总代码行数</li><li>#awk '{adds+=$1;removes+=$2;saves+=$3}END{print adds,removes,saves}' $detail_file</li><li>### 汇总计算各人的代码行数</li><li>### 删除空行</li><li>awk '!/^$/' $everyone_file |\</li><li>### 计算</li><li>awk '{if($1 ~ /^[a-zA-Z]+$/) {if(NR==1){printf "%20s",$1 }else {printf "\n%20s%8d%8d",$1,adds,dels;adds=0;dels=0}} \</li><li>else{adds=adds+$1;dels=dels+$2;next} }' |\</li><li>### 汇总</li><li>awk '{cnt[$1]++;name[$1]=$1;adds[$1]+=$2;dels[$1]+=$3}END{for(i in name) printf "%-20s%10d%10d%10d%10d\n", name[i],cnt[i],adds[i],dels[i],adds[i]-dels[i]}'</li></ol>最后一部分脚本,是首次git clone版本库用的
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>#!/bin/bash</li><li></li><li>#### 定义分支 ####</li><li>Branch=release</li><li>#### 定义版本库 ####</li><li>git_repo=cdc.txt</li><li>while read repo</li><li>do</li><li>git clone $repo</li><li>done < $git_repo</li></ol>
三、使用注意事项
1、三部分独立成三个脚本文件比较好
2、统计机器必须要有所有版本库的读权限,否则没法clone。
3、版本库定义文件格式,文件末尾不能留空行
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>git@1.1.1.1:users/p1/cdc/authority</li><li>git@1.1.1.1:users/p2/cdc/business</li></ol>
4、关于多项目的统计目录结构
<ol style="margin:0 1px 0 0px;padding-left:40px;" start="1" class="dp-css"><li>.<br /></li><li><br /></li><li>├── GetStat.sh #第一部分脚本<br /></li><li>├── android #项目目录<br /></li><li>│ ├── GetAllByMon.sh #第二部分脚本<br /></li><li>│ ├── cdc.txt #本项目源码的git地址<br /></li><li>│ ├── commit.txt<br /></li><li>│ ├── detail.txt<br /></li><li>│ ├── every.txt<br /></li><li>│ ├── total.txt<br /></li><li>│ └── workspace-goluk #项目源码<br /></li><li><br /></li><li>├── cdc.txt # 项目名称和目录文件,以空格分隔<br /></li><li><br /></li><li>├── firmware #结构同上目录<br /></li><li>│ ├── GetAllByMon.sh<br /></li><li>│ ├── Getrepo.sh<br /></li><li>│ ├── cdc.txt<br /></li><li>│ ├── commit.txt<br /></li><li>│ ├── detail.txt<br /></li><li>│ ├── every.txt<br /></li><li>│ ├── goluk_src<br /></li><li>│ ├── s2l_linux_sdk<br /></li><li>│ └── total.txt</li></ol>

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

メモ帳++7.3.1
使いやすく無料のコードエディター

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









