gpt4 book ai didi

git - 如何干净地拆分 Git 存储库?

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

This question带我走了一段路,但我仍然错过了一些东西。

我有一个单用户存储库(因此重写历史记录与推/pull 没有问题),我在其中开发了产品代码以及支持代码和文档。

经过一年左右的工作,我终于看到了曙光,并想将我的 repo 一分为二。这是我尝试过的:

  • 在项目根目录下新建两个目录;我们称它们为 Project/Code/和 Project/Support/
  • git mv 将所有的代码内容放入代码/
  • git mv 所有支持的东西都到支持/
  • 适本地复制和修改 .gitignore
  • promise 一切

  • 现在,当我运行我认为正确的命令时:
    git filter-branch -d /cygdrive/z/temp/ --subdirectory-filter Code/ -- --all

    我只是通过一次提交获得了一个独立的分支,我的原始分支仍然存在(如 original/refs/head/brent ),而所有其他分支都保持原样。

    我真正需要的是重写历史,就好像 Code/目录“总是在那里”一样,而 Support/东西不是,反之亦然。

    我是一个相对的 Git 菜鸟,所以我确定我错过了一些重要的概念——请填写。

    好的,我已经做到了,它似乎很好地完成了我需要的工作,非常感谢。我有几个补充:
  • 我添加了一个 -r 以允许删除完整的目录。这样对吗?我使用的实际命令是:

    git filter-branch --index-filter\
    'git rm -r --cached --ignore-unmatch '\
    -- --all
  • 存储库现在的提交数量大约是我预期的两倍。这些在 gitk 中显示为从名称为“original/refs/heads/TestSys”之类的事物中链接回来。

  • 我假设这些是原始提交树;我该如何摆脱它们?它们不会出现在 fsck 中,并且 prune 和 gc --aggressive 都不会摆脱它们。

    哦,哦,只要阅读精美的手册;打算尝试 git clone 来修剪 cruft。

    好的,现在我已经完成了克隆,并且存储库已经缩小到其原始大小。克隆似乎只复制了当前(源代码库)HEAD 的分支信息,我不得不用这个手动设置其他分支:
    for n in `git branch -r|grep -v 'HEAD'` ; do git branch ${n/origin?/} $n ; done 

    在克隆时有没有一种简单的方法可以做到这一点?

    另外:我不想显得忘恩负义,但现在有“空”提交,它们过去只用于触摸现在已经消失的文件。

    有没有简单的方法来消除这些?

    真的很感谢你的帮助和耐心。

    最佳答案

    我想将文件移动到子目录是问题所在——git 在移动之前不会跟随它们。我建议从旧的存储库中克隆两个新的存储库,并在每个存储库中运行以下命令:

    git filter-branch --index-filter 'git rm --cached --ignore-unmatch <list of files that shouldnt be here>' -- --all

    关于git - 如何干净地拆分 Git 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3530268/

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