git导出修改新增文件指定分支、月份、用户作者

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、新建文件
    • 1. 新建文件addr.txt 文件填写git地址
    • 2.新建文件get.sh
    • 3.新增文件run.sh
  • 二、使用步骤
    • 1. 新建目录上传三个文件(addr.txt、get.sh、run.sh)
    • 2. 初始化项目
    • 3.导出文件


前言

提示:引用网上git汇总用户脚本
优化点:

  1. 优化自动创建文件及文件夹
  2. 增加指定用户
  3. 增加保存指定用户文件

一、新建文件

1. 新建文件addr.txt 文件填写git地址

如下(示例):

http://xxxx/jinggeng/cds.git

2.新建文件get.sh

第一次的时候执行,该脚本作用为 拉取项目
脚本如下:

#!/bin/bash
Branch=master
git_repo=cdc.txt
while read repo
do
git clone $repo
done < $git_repo

3.新增文件run.sh

作用为 从git日志中过滤所需要的文件 并保存在save文件夹中
脚本如下:

#!/bin/bash
# 统计后台的总的提交次数、增加、删除、留存代码行数
# 统计按照自然月进行或者指定时段进行 $1 为月份(1-12)
# $2 指定分支
# $3 指定用户
#### 定义分支 ####
if [ $2 = "" ] ; then
Branch=master
else
Branch=$2
fi
auth=$3
#### 定义版本库 ####
#git_repo=cdc.txt
### 当前目录###
if [ $(echo $0 | grep '^/') ]; then
cur_dir=$(dirname $0)
else
cur_dir=$(pwd)/$(dirname $0)
fi

if [ ! -d save ];then
	mkdir save
fi
if [ ! -f commit.txt ];then
	touch commit.txt
fi
if [ ! -f total.txt ];then
        touch total.txt
fi
if [ ! -f detail.txt ];then
        touch detail.txt
fi
if [ ! -f every.txt ];then
        touch every.txt
fi
repo_file=$cur_dir/cdc.txt #版本库定义
commit_file=$cur_dir/commit.txt #提交次数明细
total_file=$cur_dir/total.txt #每人提交次数汇总
detail_file=$cur_dir/detail.txt #每人提交行数明细
everyone_file=$cur_dir/every.txt
project_name=''
### 接收月份参数###
Month=$1
echo '开始执行'
echo '执行月份:'$Month' 用户:'$auth
### 初始化中间文件###
:>$commit_file
:>$detail_file
:>$everyone_file
### 首先统计每个人的提交次数,记录到中间文件
function Count() {
while read git_url
do
echo $git_url
goluk_repo=`echo $git_url |awk -F/ '{print $NF}'`
goluk_repo=${goluk_repo%.*}
project_name=$goluk_repo
cd $goluk_repo
git checkout $Branch
git pull
git log --pretty='%aN' --since ==2022-$Month-01 --until=2022-$Month-31 --author=$auth | sort | uniq -c | sort -k1 -n -r >> $commit_file
cd ../
done < $repo_file
}
### 代码提交行数
function Codelines() {
while read git_url
do
echo $git_url
goluk_repo=`echo $git_url |awk -F/ '{print $NF}'`
goluk_repo=${goluk_repo%.*}
cd $goluk_repo
git pull
git checkout $Branch
# 统计各版本总行数
git log --author=^.* --pretty=tformat: --numstat --since=2022-$Month-01 --until=2022-$Month-31 |\
awk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } \
END { print add,subs,loc ,repo_name }' repo_name=$goluk_repo - >> $detail_file
### debug begin
###git log --author=^.* --pretty=tformat:%aN --numstat --since=2016-$Month-01 --until=2016-$Month-31 |\
### awk '!/^$/' >> $cur_dir/every2.txt
## debug end
# 记录个人代码、增加行数、删除行数明细

git log --pretty='tformat:%aN' --numstat --since=2022-$Month-01 --until=2022-$Month-31 --author=$auth >>$everyone_file
cd ../
done < $repo_file
}
#awk '{sum[$2]+=$1}END{for(i in sum)print i ,sum[i]}' scrope.txt |sort -k2 -nr >
Count $Month
### 计算总提交次数
awk '{sum[$2]+=$1}END{for(i in sum)print i ,sum[i]}' $commit_file |sort -k2 -nr > $total_file
Codelines $Month
### 汇总提交数
awk '{cnt+=$2}END{printf "%-20d%10d\n",Mon,cnt}' Mon=$Month $total_file
### 汇总代码行数
#awk '{adds+=$1;removes+=$2;saves+=$3}END{print adds,removes,saves}' $detail_file
### 汇总计算各人的代码行数
### 删除空行
awk '!/^$/' $everyone_file |\
### 计算
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}} \
else{adds=adds+$1;dels=dels+$2;next} }' |\
### 汇总
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]}'

for line in `awk '{print $3}' $everyone_file`
do
FILE_JAVA=$project_name"/"$line
if [ -f $FILE_JAVA ] && [ ${FILE_JAVA#*.} == "java" ];then
	cp -f $FILE_JAVA ./save
fi
done
echo '执行结束 git提交文件保存在save文件夹中'


二、使用步骤

1. 新建目录上传三个文件(addr.txt、get.sh、run.sh)

前提:服务器需安装git ,yum安装 yum install git

mkdir /data/cds ##创建目录
cd /data/cds ## 移动目录
rz addr.txt ## 上传文件
rz get.sh ## 上传文件
rz run.sh ## 上传文件
chmod +x *.sh ## 赋予脚本执行权限

2. 初始化项目

执行命令如下:

./get.sh ## 该脚本读取addr.txt 文件中的git地址 拉取项目

3.导出文件

命令如下:

./run.sh 5 master xiaoming ## 作用:导出master分支作者xiaoming在2022年5月份的新增和修改的文件

在save文件夹中查看文件

你可能感兴趣的:(git,linux,服务器)