【问题标题】:Rewrite git history programatically以编程方式重写 git 历史
【发布时间】:2020-03-21 22:33:05
【问题描述】:

我想以编程方式重写我的一个仓库的历史,例如使用 gitpython。 这个想法是读取现有存储库,并在进行一些修改后将其每个提交重新应用到新的:

  • 不同的提交时间
  • 将某些提交拆分到子模块,如果文件匹配某些模式,则添加对子模块提交的引用
  • 使用不同的提交信息

使用 gitpython,我可以读取提交历史记录树和所有相关信息,但是我还没有找到在新仓库上提交某些内容的方法,当必须从另一个仓库复制信息时,就没有成功了。

有没有办法以编程方式做到这一点? 我想一定有一种方法,因为它或多或少可以手动完成,一次提交。

非常感谢!

【问题讨论】:

  • 您是否有特殊原因要为此使用 gitpython?一般来说,git-filter-branch 提供了一个与语言无关的界面,您可以在任何语言中使用,包括 shell。
  • 没有强有力的理由,但我对 git-filter-branch 语法并不容易。在拆分子模块历史时,我看不到任何合并子模块历史的方法。我可以一起处理所有提交的时间更改,这在 python 中对我来说非常容易。基本上我会觉得自己在做的事情更加可控......

标签: python git gitpython git-rewrite-history


【解决方案1】:

你可以借鉴(或直接使用)newren/git-filter-repo,即:

git filter-repo 可以处理拆分存储库,但不一定在同一步骤中添加树 SHA1 作为子模块存储库的 gitlink。
不过,它可以扩展来做你需要的事情。

【讨论】:

    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多