如何批量克隆GitHub仓库列表并实现跨仓库抄袭检测
完全可以实现,整套流程不需要复杂开发,拆成批量拉取仓库、代码相似度比对、结果匹配三个环节就能跑通,具体操作如下:
前置依赖
先在本地准备好基础运行环境:
- 安装Git,确保命令行能直接调用
git命令 - 安装Java运行环境,用来跑代码相似度检测工具
- 准备好两个仓库列表文件
big和small,每行填一个GitHub仓库的克隆链接,删除多余空行
第一步:批量克隆列表内的所有仓库
不用手动逐个点克隆,写个简单的Shell脚本就能自动完成拉取,还能通过浅克隆节省下载时间和磁盘空间。
把下面的代码存为clone.sh,和big、small文件放在同一个目录下:
#!/bin/bash # 批量克隆函数:入参1为仓库列表文件路径,入参2为仓库存储目录 batch_clone() { list_file=$1 save_dir=$2 mkdir -p $save_dir cd $save_dir while read -r repo_url; do if [ -n "$repo_url" ]; then # --depth=1 仅拉取最新提交,大幅提升克隆速度 git clone --depth=1 $repo_url fi done < "../$list_file" cd .. } # 分别拉取两个列表对应的仓库 batch_clone "big" "big_repos" batch_clone "small" "small_repos"
给脚本加执行权限后直接运行即可:
chmod +x clone.sh ./clone.sh
脚本执行完成后,big列表里的所有仓库会被存在big_repos目录,small列表的仓库存在small_repos目录。
第二步:跨集合代码抄袭比对
不需要自己从零写逐行匹配的逻辑,直接用成熟的代码相似度检测工具即可,这类工具会自动过滤注释、空行、格式差异,精准识别复制粘贴、改变量名这类常见的抄袭行为,支持绝大多数主流编程语言。
检测时直接运行如下命令即可完成两个目录下所有代码的交叉比对:
java -jar jplag.jar -l python3 -s 0.8 -r detect_result ./big_repos ./small_repos
参数说明:
-l后填写待检测的代码语言,比如检测Java代码填java,检测JS代码填javascript-s后填写相似度判定阈值,取值0-1,一般设0.8即可筛出直接抄袭的内容,可根据检测场景灵活调整-r后填写检测报告的输出目录
命令运行完成后,打开输出目录里的报告文件,就能看到所有相似度超标的代码文件对,以及对应的所属仓库。
第三步:自动输出存在抄袭的仓库链接
如果不想手动翻报告匹配链接,可以写个简单的解析脚本,读取检测结果里的仓库路径,和原始big、small文件里的链接做映射,直接输出存在抄袭行为的仓库链接对即可。
优化提示
- 如果要克隆私有仓库,提前在本地配置好Git的SSH密钥或HTTPS凭据,避免拉取失败
- 克隆和检测前可以提前排除依赖目录、构建产物目录(比如
node_modules、venv、dist、__pycache__等),能大幅提升运行速度,还能避免第三方通用代码被误判为抄袭 - 如果检测的仓库总数据量很大,可以把克隆和检测任务拆成多批跑,避免内存不足
内容的提问来源于stack exchange,提问作者bellom
相关产品推荐
相关产品推荐

