11

我正在尝试创建现有存储库的 gitsubtree,例如:

-> 项目A/项目B

项目 A 是父项目,我想将项目 B 添加为 git 子树。

git subtree -P projectB ssh://git@github.com/projectB.git master

但它失败了,并显示以下消息:

前缀“projectB”已经存在。

我不想再次下载所有存储库,我只想将此目录添加到我的 gitsubtree 中。

这个目录项目 B 没有被项目 A git 跟踪。

提前致谢

4

2 回答 2

9

您可以使用 vanilla 将 projectB 添加为 projectA 的子树git(您不需要git subtree)。

cd projectA
git remote add projectB_remote git@github.com/projectB.git
git fetch projectB_remote
git checkout -b projectB_branch projectB_remote/master
git checkout master
git read-tree --prefix=projectB/ -u projectB_branch

解释

  1. 输入本地projectA仓库。
  2. 添加一个projectB_remote使用 projectB 的 url 调用的新遥控器。
  3. 获取projectB_remote而不合并。
  4. 创建并签出一个projectB_branch;带入projectB_remote/master文件。
  5. 返回到projectA/master
  6. 在其中创建一个子树,projectA/master其中包含projectB_branch.

结果目录结构

projectA
    projectB
    other.txt
    project.txt
    A.txt
    files.txt

请参阅http://www.git-scm.com/book/en/v1/Git-Tools-Subtree-Merging

于 2014-12-11T20:58:23.617 回答
4

添加子树时,似乎前缀(您将在其中添加子树的子目录)不可能已经存在。

我通过在此子目录存在之前签出提交来解决此问题,执行 git subtree add,然后与包含我的旧子目录内容的分支合并。

于 2015-10-16T15:18:21.343 回答