Github搜索小技巧
背景
获取了一个多人运动的git仓库,需要提取仓库里面所有的Email,然后根据Email搜一下Github是否存在对应的提交记录。这是一个很常见的问题,比如公司员工在提交gihtub的时候,没有注意修改提交的邮箱,很可能使用公司的邮箱进行提交。
解决方式
有两种方法可以提取一个仓库的所有邮箱:
第一种
git log "--format=format:%ae" | sort | uniq
第二种
git shortlog -sea | grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" | awk '{print tolower($0)}' | sort | uniq | grep -wv 'users.noreply.github.com'
然后根据github小技巧写一个批量获取邮箱的脚本:
# coding: utf-8
import requests
import json
from random import choice
import sys
import time
TOKEN_LISTS = [
""
]
def search_commits(token, email):
headers = {"Accept": "application/vnd.github+json",
"Authorization": f"Bearer {token}"
}
req = requests.get('http://api.github.com/search/commits',
{'q': f"committer-email:{email}"},
headers=headers)
return json.loads(req.text)
if __name__ == "__main__":
# file = sys.argv[1]
file = "/tmp/email.txt"
with open(file, "r") as f:
for line in f.readlines():
email = line.strip()
token = choice(TOKEN_LISTS)
try:
time.sleep(1)
if search_commits(token, email).get("total_count") > 0:
print(email)
except Exception as e:
raise(e)