从一个分支添加git子树

21

我正在尝试使用 git subtree add 将一个名为 cow 的仓库添加到我的项目中。特别地,我想要添加分支 stable (而不是 master 分支)。我尝试了:

git subtree add -P cow https://github.com/geoffryan/cow.git stable

但是这会返回错误

'stable' does not refer to a commit.

我也尝试过:

git subtree add -P cow https://github.com/geoffryan/cow.git cow/stable
'cow/stable' does not refer to a commit.

并且:

git subtree add -P cow https://github.com/geoffryan/cow.git ca26d248a12c21264e32a2c212381cafb578c9fb
'ca26d248a12c21264e32a2c212381cafb578c9fb' does not refer to a commit.

哈希值是指stable分支中最新提交的哈希值。我在网上看到的使用示例都使用master作为提交,是否可以在非master分支上使用subtree add

2个回答

30

这似乎是有效的

$ git remote add cow https://github.com/geoffryan/cow.git
$ git fetch cow
$ git subtree add -P cow cow/stable
Added dir 'cow'

我不明白如何直接使用带有仓库部分的命令。


但这会污染父存储库,带来一堆来自cow存储库不需要的提交... :-/ - Adam Spiers
哪些是不必要的提交? - gipi
5
可能有点晚,但你可以使用--squash参数来防止git子树重播整个日志。 - tongpu
2
你可能想要添加 --squash 选项,这样 git subtree 就只会从子项目中导入单个提交,而不是其整个历史记录。 - Sebastien Varrette
2
为了澄清一下,因为@rpattabi编辑了答案:在我看来,--squash不是正确的选项,因为如果你使用git subtree,通常你会想保留原始历史记录,否则你可以像往常一样复制和提交文件。 - gipi
显示剩余2条评论

0

我遇到了类似的问题。然而,gipi的解决方案对我不起作用。奇怪的是,当我添加主分支时一切正常,但当我想要添加其他分支时,它会返回

fatal: Couldn't find remote ref xxx/yyy
Unexpected end of command stream

所以我尝试了另一种方式:

mkdir tmp
cd tmp
git init
git clone url_for_xxx.git yyy

然后从该临时仓库的主分支添加子树

git subtree add -P yyy /path/to/tmp/ master 

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