微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 github 代码组织的所有分支检索所有/最近的提交历史记录到 CSV/Json

如何解决从 github 代码组织的所有分支检索所有/最近的提交历史记录到 CSV/Json

我想从包含 225 多个私有和公共代码存储库的 GitHub 代码组织中获取所有提交历史记录。 我在 google 和 stackoverflow 中看到了很多其他解决方案,但不能承认一个。 我正在寻找一个自动化的解决方案,我们可以一次获取或检索所有提交历史,然后从特定日期安排它 根据 GitHub Api 的说法,我无法做到这一点,因为它每天对 GitHub 服务器没有 API 命中限制。

主要是我试图将所有提交信息提取一个 CSV 文件中。如果有任何 python 代码/脚本用于此目的,请分享

解决方法

如果你想获取单个仓库的提交历史,下面的脚本会很有帮助,

git log > data.csv

对于 225 个存储库,您需要对每个存储库分别使用此命令,可能采用 for 循环或 while 循环的形式。

,

如果存储库位于平面目录中,您可以使用 oneliner 执行此操作。

ls -d **/ | xargs -I{} -P12 git -C {} log --all --after="<date> 00:00" --before="<date> 23:59"

每天使用 api 做限制时,无法提供帮助

,

之前有类似的要求。使用下面的python逻辑解决了它。 我希望您已对所有代码存储库执行了克隆,并且您的 ssh 个人访问密钥已添加到您的 git 全局配置中。

  1. 对于所有存储库,您可以将它们添加到一个列表中并循环遍历以获取列表中提到的代码存储库的所有分支的远程源更新/ref-HEAD。
  2. 使用 git log 最初使用 git log --all 获取所有提交,然后根据您的要求使用 git log --all after={date}
  3. 使用 csv 模块以漂亮的格式编写 git 日志,并将输出一致地附加到 csv 文件中。

请找到以下代码片段。

import os
import csv

#Dummy Blank CSV for adding newline in csv module
dummy = "<Path:>/dummy.csv"

#Loop through your set of repos 
list = ["Code repo 1","Code repo 2"]
for repo in list:
    os.chdir(repo)
    # git pull all the remote origin updates from all branches
    cmd1 = "git pull --all".format(repo)
    os.system(cmd1)
    #git log all (for initial log) & then update it with --after=<date> (from a specified date - you can automate/schedule it)
    cmd2 = "git log --all --after=2021-06-10 --pretty=format:'{},%h,%an,%ad,%s' > {}.csv".format(repo,repo)
    os.system(cmd2)
    src = "{}.csv".format(repo)
    #To append here as CSV I have used csv module
    tf = open('<Path:>/Gitlog-output.csv','a+',newline="")
    if os.path.getsize('<Path:>/{}.csv'.format(repo)) != 0:
        #Writing each git log data to the above output file and conditional newline if there isn't a commit in any branch.
        tf.write(open(src).read())
        tf.write(open(dummy).read())
    tf.close()

    print("Finished logging {}".format(repo))
    # To track the list of remaining repos from your list
    print("Remaining Repos: {}".format(len(list) - list.index(repo) -1 ))
    print("#####################################")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。