git subtree add:更改前缀并保留本地提交历史

7
有没有一个简单的方法来移动使用以下命令添加的子树?
git subtree add --prefix=<prefix> <repository> <commit>

在其他方面,是否可能将前缀从dir1更改为dir2
对于git子树:在派生存储库中更改子树分支/路径是否可能?的答案建议删除子树,然后重新添加。
这对我不起作用,因为我需要保留本地提交,还有其他方法吗?

你说的本地提交是指在添加子树后更改了那个子目录中的文件吗? - Maic López Sáenz
1个回答

5

其中一种替代方案是从包含您想保留的本地提交的当前提交中进行分离:

git subtree split --prefix=dir1 HEAD

# Create a branch with the printed commit just to use it later
git branch split_dir_1 <split_commit>

然后按照您提到的问题所描述的,删除子目录并重新添加子树。

git rm dir1
git commit
git subtree add --prefix=dir2 . split_commit

请记住,这样做仍然可以在存储库历史记录中看到第一个子树的创建、删除和重新添加时间。

谢谢您的回答,使用您的方法之后是否可以进行 git subtree pull 操作?我需要测试一下... 如果可行的话,我会接受您的答案,谢谢。 - klarezz
应该是可以的,是的。只要在子树操作中没有压缩,git subtree split 将保留子树的原始历史记录。您可以将新的分离分支推送到原始子树存储库,因此您也应该能够拉取。 - Maic López Sáenz
在这种情况下,您仍然可以尝试执行git subtree split,并将分割的提交push到子树存储库中。这样,您就会在那里拥有原始子树提交和新内容。然后再次删除dir1,并在dir2中读取子树。 - Maic López Sáenz
好的,谢谢!我会在有时间的时候检查这个方法的(我已经采用了删除本地提交的方式...) - klarezz

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