gpt4 book ai didi

Git subtree push 似乎推送不适用于子树的提交?

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

我有一个 repo 的子文件夹,我试图将其拆分为子树。首先,我按照此过程 ( https://stackoverflow.com/a/43985326/136785 ) 创建一个分支,该分支仅包含与子文件夹相关的提交(包括重命名)。我确认分支的提交日志看起来像预期的那样。

接下来,我为该子项目创建一个新的存储库:

git init --bare \\nas\git\FPF.git
git push ssh://myserver.com/~/FPF.git branch-fpf:master

然后我从父存储库中删除子文件夹并将其重新添加为子树:
git rm -r htdocs/wp-content/plugins/fpf
git add -A
git commit -am "Removing folder to re-add as subtree"
git remote add fpf ssh://myserver.com/~/FPF.git
git subtree add --prefix=htdocs/wp-content/plugins/fpf fpf master --squash

现在作为快速检查,我将获取远程子树存储库的副本(当然在另一个文件夹中):
git clone ssh://myserver.com/~/FPF.git

和:
git subtree push --prefix=htdocs/wp-content/plugins/fpf fpf master

因为我没有在添加子树和推送之间进行任何更改,所以我希望推送没有任何新内容。但事实证明,如果我再次克隆 FPF.git,我发现它现在有大量的额外提交 - FPF 已经增长了很多倍,提交日志现在反射(reflect)了许多仅适用于外部文件的提交子树。

为什么会 git子树推送推送不适用于子树的提交?

编辑 1:额外的提交是来自主(父)存储库的所有提交,在第一次 FPF 提交之前开始并回到时间的开始。换句话说:如果我在执行 git subtree push 之前和之后比较 FPF subtree repo 的日志,它们是相同的,直到我到达“pre-push”克隆日志的底部。从那里,“post-push”克隆的日志一直持续到父项目的第一次提交。 Git subtree push 有效地附加了父级的完整先前历史。

编辑 2:我决定放弃 git-subtree。我发现了 https://github.com/ingydotnet/git-subrepo ,它不仅工作正常,而且解决了许多子树的缺点(最显着的是非常缓慢的推送)。把这个问题留在这里,以防其他人想出答案或在同样的问题上挣扎,但为了简化一点,这里有一个完整的从头到尾的命令集,展示了这个问题。与上面的区别:这不是从多个过滤器分支嫁接而成的分支开始;它只是执行单个子树拆分的最简单情况:
cd MainProjectRepo
git subtree split --prefix=htdocs/wp-content/plugins/fpf --branch=branch-new
git init --bare \\nas\git\FPF.git
git remote add fpf ssh://myserver.com/~/FPF.git
git push fpf branch-new:master
git rm -r htdocs/wp-content/plugins/fpf
git add -A
git commit -am "Removing folder to re-add as subtree"
git subtree add --prefix=htdocs/wp-content/plugins/fpf fpf master --squash

git clone ssh://myserver.com/~/FPF.git /tmp/fpf1
git subtree push --prefix=htdocs/wp-content/plugins/fpf fpf master
git clone ssh://myserver.com/~/FPF.git /tmp/fpf2

如上所述,fpf2 以源代码库的整个提交历史结束。

最佳答案

对于可能遇到此问题的其他人:
我的结论是,经过许多小时的挣扎(阅读、讨论、以不同方式重试等)后,git-subtree 无法正常工作。相反,我发现了一个更好的选择:git-subrepo .它不仅工作正常,而且解决了许多子树的其他缺点——最显着的是非常缓慢的推送。
因此,我对如何解决此问题的“答案”:放弃 git-subtree 并改用 git-subrepo :)

关于Git subtree push 似乎推送不适用于子树的提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61150709/

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