gpt4 book ai didi

version-control - 避免化石中的整个提交

转载 作者:行者123 更新时间:2023-12-04 06:56:37 25 4
gpt4 key购买 nike

我在我的化石存储库中添加了一个文件目录,但是:

  • 包含的文件占用的空间比我预期的多
  • 后来我意识到添加它完全是多余的。

  • 所以现在我发现自己的存储库比包含从未有用的文件所需的存储库大一个数量级。
    整个目录都包含在一次提交中,在那个提交中没有做任何其他事情,并且从那以后从未修改过,但我之后不得不做其他提交(在对化石更有信心之后,我知道我可以使用 在做任何其他事情之前撤消 ,但当时我没有意识到这种可能性)。

    我发现完成这项工作的唯一方法是对数据执行避开以删除它们,但我也在网上发现此操作可能对数据库造成严重破坏。鉴于这是一个与工作相关的存储库,我担心会造成损害。

    有没有办法摆脱那些安全且不会使数据库处于损坏/充满警告状态的文件?

    最佳答案

    如果 bad checkin 只存在于你的仓库(或者你的仓库加一个服务器)并且没有被其他用户拉取过,最简单的解决方法是使用 fossil purge .

    使用 fossil purge checkins <tag>将这些签到移动到“墓地”; <tag> part 也可以是 checkin 的哈希值,而不仅仅是一个符号标签。请注意,如果您指定一个分支,则整个分支将被清除;即使您不指定分支, checkin 的所有后代也将被清除(因为它们依赖于它)。一旦确认一切正常,请使用 fossil purge obliterate如果您需要释放磁盘空间,请摆脱墓地。如果您不需要磁盘空间,您可以让墓地闲置一段时间,直到您确定一切正常。咨询 fossil help purge进一步的选择。

    您可能希望保留存储库的备份(它只是一个文件,您可以直接复制它)以防万一出现问题。

    回避机制仅用于在全局范围内清除工件,并且旨在作为最后手段在中央服务器上使用:它将防止这些工件再通过该服务器传播给其他用户。如果您的更改仅在本地进行,或者您可以访问所有服务器并且可以使用 fossil purge相反,回避是不必要的。

    如果您确实需要清除分支中间的某些内容,则需要额外的步骤。

  • 备份存储库文件,因为您将对其进行重要的手术。
  • 使用 fossil update在有缺陷的之前移动到签到。
  • 使用 fossil merge --cherrypick复制第一个“好” checkin 。做 fossil commit --allow-fork提交该 checkin 的副本;编辑器应该预先填充原始提交消息。系统将提示您确认您不想更改提交消息。按“y”。
  • 对所有剩余的“好” checkin 重复步骤 3 ( fossil merge --cherrypick + fossil commit )。你不需要 --allow-fork对于这些。

  • 您现在应该有一个包含所有要保留的 checkin 的分支,以及一个包含错误 checkin 和良好 checkin 的原始版本的单独分支。验证 fossil ui 中的图形看到一切都井然有序。完成后,使用 fossil purge去除如上所述的错误 checkin 及其后代。

    步骤 3+4 中的过程可以使用 shell 脚本自动化:
    #!/bin/sh
    set -e
    for commit in "$@"; do
    fossil merge --cherrypick "$commit"
    echo yes | VISUAL=true fossil commit --allow-fork
    done

    把它放在一个文件中,比如 fossil-replay.sh ,使其可执行,然后使用 fossil-replay.sh commit1 commit2 ... commitn重播 commit1通过 commitn从存储库中的当前位置。显然,替换 commit1等与实际提交哈希。

    关于version-control - 避免化石中的整个提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42832992/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com