git subtree split“未发现新的修订版本”

18

我一直在使用git subtree split将一个从其他版本控制系统导入到Git的巨大仓库分成更小的仓库。

$ git subtree split -P ./path/to/folder/ -b folder-only

这项工作一直在进行,我将一些文件夹移动到新的代码仓库中,但尝试对它们的兄弟进行操作后,在运行所有可用提交之后,没有创建分支

最终消息是:

"未找到新修订版本"

我不知道这是否重要,但是使用--debug运行会给出以下消息:

处理提交:ca9d25944cf34bbe7aa356248a166ac1fb813f2a 父提交:fc0e5a621ab871b8a11071eec321f4b40b8dcce0 新父提交: 树:

git subtree split为什么失败了?我该怎么办?


这个命令是有效的:git subtree split --prefix="path/to/folder" -b folder-only - Boggin
2
不,它不是,它和上面的一样。 - Lajos Mészáros
5个回答

19

当我使用的--prefix指向一个Git未知的目录时,我遇到了同样的症状。在我的情况下,是因为我的.gitignore配置过于激进。

因此,为了阐明我的建议:

请确保你的:

  1. --prefix文件夹已被Git识别。如果需要,先使用addcommit添加它。

  2. .gitignore文件没有排除你想要的目录。

我希望这可以帮助你,或者至少给你正确的方向提示。


1
在某些情况下,最好将其保留在.gitignore中,然后使用rsync同步到表示其他存储库的另一个文件夹中。 - Alexander Mills

9
至少在我的Windows 10环境中,使用git subtree split命令的-P(--prefix)参数指定的目录区分大小写。在我尝试确保正确的目录大小写后,就像问题发起人一样,我遇到了同样的问题。
因此,如果你想从c:\repo\Utility中拆分出Utility文件夹,则必须执行git subtree split -P Utility ...命令,而不是git subtree split -P utility ...

0
在我的情况下,当我尝试将一个仓库中的子文件夹作为另一个仓库的子树文件夹连接时,问题与我混淆了路径前缀有关。换句话说,我尝试使用目标仓库路径前缀,而实际上应该使用源路径前缀,反之亦然。
当我正确设置路径前缀后,一切开始正常工作。
更多细节请参见this答案中的场景3. git subtree。将https://github.com/git/git.git的contrib/completion/中的四个文件合并到本地仓库的third_party/git_completion/中。代码片段如下:
# Do this the first time:
$ git remote add -f -t master --no-tags gitgit https://github.com/git/git.git
$ git checkout gitgit/master
$ git subtree split -P contrib/completion -b temporary-split-branch
$ git checkout master
$ git subtree add --squash -P third_party/git-completion temporary-split-branch
$ git branch -D temporary-split-branch

不小心,我刚刚写了contrib/completion而不是正确的third_party/git-completion,导致出现了这个错误。在正确的行前加上前缀后,它就像魔术般地正常工作了。


0

Git子树似乎在这方面也是区分大小写的,在Windows 10上使用Git 2.34.1时出现了以下情况:

我改变了文件夹名称中的一个字符,从小写改为大写。一段时间后,Git子树分离结果出现了相同的消息:“未发现新版本”。

在子树分离过程中临时更改大小写解决了这个问题。


0
作为一个新手,我原以为在使用git subtree split之后,我能够在网上看到新的分支。然而,这个分支是在本地创建的。要查看所有本地分支,请使用
git branch

还请查看相关问题

将更改从git子树推送到分支以进行拉取请求


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接