【问题标题】:git mimic old commit from other repositorygit 模仿来自其他存储库的旧提交
【发布时间】:2023-03-12 02:14:01
【问题描述】:

为什么

在我们公司,我们开始使用一些开源代码并开始修补它。我现在想公开这些更改,因此我想以正确的作者和作者日期应用这些更改(我不想因为我没有做的工作而受到赞扬)。

问题

  • company-repo,我有提交123456789 我想模仿
  • new-repo 中,我准备了一个提交(使用git add -p)。

现在我想创建一个从 company-repo 模仿提交 123456789 的提交,但在 new-repo 中创建此提交。

想法

  • git commit -C 可以从另一个提交中获取 git 提交消息,但这会失败 (could not lookup commit)
  • 因为这是跨两个不同的存储库可能会创建一个补丁?但由于文件名已更改,这将是复杂的
  • 只是解析所需的信息并重用?应该复制什么?时间戳、提交消息、其他?

【问题讨论】:

    标签: git git-commit git-rewrite-history


    【解决方案1】:

    我不知道是否有更简单的方法可以做到这一点,但我会解析 authormessagetimestamp 和在提交时重用它们。

    正确设置这两个变量:

    OLDREPO=/path/to/company-repo
    HASH=123456789 # hash of commit to mimic
    

    然后您可以从旧提交中提取值:

    DATE=$(git --git-dir=$OLDREPO/.git/ show --no-patch --no-notes --pretty='%cd' $HASH)
    AUTHOR=$(git --git-dir=$OLDREPO/.git/ show --no-patch --no-notes --pretty='%an <%ae>' $HASH)
    MESSAGE="$(git --git-dir=$OLDREPO/.git/ show --no-patch --no-notes --pretty='%B' $HASH)"
    

    并将它们用于您的新提交:

    git commit --author="$AUTHOR" --date="$DATE" -m "$MESSAGE"
    

    注意:我不是故意设置GIT_COMMITTER_DATE。从技术上讲,提交是今天创建的,而作者在很久以前编写了他的代码。

    【讨论】:

    • 这几乎是要走的路。是否也设置提交者信息取决于您。如果您想设置所有六个项目(姓名、电子邮件、时间戳 X 作者、提交者),如果您想实现对称,则有六个 env 变量。 --author 设置六个中的两个。 --date 设置一个,所以如果你愿意,你可以使用它来代替 GIT_AUTHOR_DATE
    • 你说的是哪六项?我看到 GIT_COMMITTER_DATE、GIT_AUTHOR_DATE,可能还有两个来设置作者和提交者的身份?还有什么?
    • 感谢--date 的提示,这确实会更加对称。
    • 六个环境变量为GIT_{AUTHOR,COMMITER}_{NAME,EMAIL,DATE}
    猜你喜欢
    • 1970-01-01
    • 2017-06-30
    • 2019-08-16
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 2011-09-03
    相关资源
    最近更新 更多