gpt4 book ai didi

git surgery - 将单个存储库拆分为多个存储库

转载 作者:太空狗 更新时间:2023-10-29 14:09:31 25 4
gpt4 key购买 nike

我有一个现有的 git 存储库:

my-repo/
.git/
foo/
foo-content-goes-here
bar/
bar-content-goes-here

我希望获得以下存储库结构:

my-foo-repo/
.git/
foo-content-goes-here

my-bar-repo/
.git
bar-content-goes-here

我看过Detach (move) subdirectory into separate Git repository .这几乎可以满足我的需要。

我运行了这些命令:

$ cd path/to/my-repo/../
$ git clone --no-hardlinks my-repo foo-repo
$ cd foo-repo
$ git remote rm origin
$ git filter-branch --tag-name-filter cat --subdirectory-filter foo \
--prune-empty -- --all
$ git reset --hard
$ git gc --aggressive
$ git prune

我说这几乎行得通。注意到的问题:

  1. git gc --aggressive 这一步为我的存储库花费了 2 个多小时。我有 13 个存储库需要从我当前的单个存储库中提取。我可以编写此过程的脚本,但希望能提供任何加快速度的方法?
  2. git loggitk 向我显示新 foo-repo 的预期提交。 gitX向我展示了预期的提交,以及带有旧历史的断开连接的树。 foo-repo 目录的大小比我预期的要大得多,所以大概我还有一些东西需要清理。我不确定如何摆脱这些东西?我什至需要在 push 之前摆脱它吗?

最佳答案

您可以反过来尝试:在原始工作场所的工作分支中过滤出您想要的目录,然后仅将该分支推送到新的存储库。

$ cd /path/to/global-repo

$ git branch work-foo master
$ git filter-branch --tag-name-filter cat --subdirectory-filter foo \
--prune-empty work-foo

$ cd /path/to
$ mkdir foo-repo
$ cd foo-repo
$ git init
$ git pull /path/to/global-repo work-foo

如果你走这条路,你想使用 --all 选项到 filter-branch

关于git surgery - 将单个存储库拆分为多个存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4669795/

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