📅  最后修改于: 2023-12-03 15:40:35.587000             🧑  作者: Mango
有时我们需要检查特定用户在代码中添加或删除了哪些代码行,以便进行代码审核和管理。本文介绍如何使用Shell-Bash脚本编写一个检查特定用户删除的添加的代码行的工具。
可以使用Git命令获取代码仓库的历史提交记录。例如,使用以下命令获取最近50次提交记录:
git log -50 --pretty=format:'%h %s' --author=<username>
其中,--author=<username>
用于指定特定用户。
解析获取到的提交记录,可以使用以下命令:
git log -50 --pretty=format:'%h %s' --author=<username> | while read commit; do
commit_hash=$(echo ${commit} | awk '{print $1}')
commit_msg=$(echo ${commit} | awk '{$1=""; print $0}')
echo "Commit: ${commit_hash} Message: ${commit_msg}"
done
其中,echo "Commit: ${commit_hash} Message: ${commit_msg}"
将输出每次提交的提交哈希和提交信息,方便后续处理。
针对每一次提交,可以使用以下命令获取变更和修改的代码行:
git diff-tree --no-commit-id --name-only -r ${commit_hash} | while read file; do
git diff ${commit_hash}~1..${commit_hash} -- ${file} | grep -E "^[-+]" | grep -Ev "^(--- a|\\+\\+\\+ b)" | while read line; do
git_diff=$(echo ${line} | awk '{print $1}')
code_line=$(echo ${line} | awk '{$1=""; print $0}')
echo "${commit_hash} ${file} ${git_diff} ${code_line}"
done
done
其中,git diff-tree --no-commit-id --name-only -r ${commit_hash}
用于获取变更过的文件列表,git diff ${commit_hash}~1..${commit_hash} -- ${file}
获取本次提交的具体变化,grep -E "^[-+]"
匹配被删除或添加的代码行,grep -Ev "^(--- a|\\+\\+\\+ b)"
排除Git Diff输出的无用信息。
以上命令会输出每次变更和修改的代码行,并包括提交哈希、文件名、变更(删除或添加)类型以及代码行内容。
将以上命令整合为一个完整的Shell脚本:
#!/bin/bash
#Usage: ./check_user_changes.sh <username> <count>
git log -${2} --author="${1}" --pretty=format:'%h %s' | while read commit; do
commit_hash=$(echo ${commit} | awk '{print $1}')
commit_msg=$(echo ${commit} | awk '{$1=""; print $0}')
echo -e "\nCommit: ${commit_hash} Message: ${commit_msg}\n"
git diff-tree --no-commit-id --name-only -r ${commit_hash} | while read file; do
git diff ${commit_hash}~1..${commit_hash} -- ${file} | grep -E "^[-+]" | grep -Ev "^(--- a|\\+\\+\\+ b)" | while read line; do
git_diff=$(echo ${line} | awk '{print $1}')
code_line=$(echo ${line} | awk '{$1=""; print $0}')
echo "${commit_hash} ${file} ${git_diff} ${code_line}"
done
done
done
可执行./check_user_changes.sh <username> <count>
以检查特定用户最近<count>
次提交中所做出的修改。
# 检查特定用户删除的添加的代码行 - Shell-Bash
有时我们需要检查特定用户在代码中添加或删除了哪些代码行,以便进行代码审核和管理。本文介绍如何使用Shell-Bash脚本编写一个检查特定用户删除的添加的代码行的工具。
## 第一步:获取历史代码提交记录
可以使用Git命令获取代码仓库的历史提交记录。例如,使用以下命令获取最近50次提交记录:
```bash
git log -50 --pretty=format:'%h %s' --author=<username>
其中,--author=<username>
用于指定特定用户。
解析获取到的提交记录,可以使用以下命令:
git log -50 --pretty=format:'%h %s' --author=<username> | while read commit; do
commit_hash=$(echo ${commit} | awk '{print $1}')
commit_msg=$(echo ${commit} | awk '{$1=""; print $0}')
echo "Commit: ${commit_hash} Message: ${commit_msg}"
done
其中,echo "Commit: ${commit_hash} Message: ${commit_msg}"
将输出每次提交的提交哈希和提交信息,方便后续处理。
针对每一次提交,可以使用以下命令获取变更和修改的代码行:
git diff-tree --no-commit-id --name-only -r ${commit_hash} | while read file; do
git diff ${commit_hash}~1..${commit_hash} -- ${file} | grep -E "^[-+]" | grep -Ev "^(--- a|\\+\\+\\+ b)" | while read line; do
git_diff=$(echo ${line} | awk '{print $1}')
code_line=$(echo ${line} | awk '{$1=""; print $0}')
echo "${commit_hash} ${file} ${git_diff} ${code_line}"
done
done
其中,git diff-tree --no-commit-id --name-only -r ${commit_hash}
用于获取变更过的文件列表,git diff ${commit_hash}~1..${commit_hash} -- ${file}
获取本次提交的具体变化,grep -E "^[-+]"
匹配被删除或添加的代码行,grep -Ev "^(--- a|\\+\\+\\+ b)"
排除Git Diff输出的无用信息。
以上命令会输出每次变更和修改的代码行,并包括提交哈希、文件名、变更(删除或添加)类型以及代码行内容。
将以上命令整合为一个完整的Shell脚本:
#!/bin/bash
#Usage: ./check_user_changes.sh <username> <count>
git log -${2} --author="${1}" --pretty=format:'%h %s' | while read commit; do
commit_hash=$(echo ${commit} | awk '{print $1}')
commit_msg=$(echo ${commit} | awk '{$1=""; print $0}')
echo -e "\nCommit: ${commit_hash} Message: ${commit_msg}\n"
git diff-tree --no-commit-id --name-only -r ${commit_hash} | while read file; do
git diff ${commit_hash}~1..${commit_hash} -- ${file} | grep -E "^[-+]" | grep -Ev "^(--- a|\\+\\+\\+ b)" | while read line; do
git_diff=$(echo ${line} | awk '{print $1}')
code_line=$(echo ${line} | awk '{$1=""; print $0}')
echo "${commit_hash} ${file} ${git_diff} ${code_line}"
done
done
done
可执行./check_user_changes.sh <username> <count>
以检查特定用户最近<count>
次提交中所做出的修改。