在仓库根目录上使用git子树合并(与git-flow一起)

14

我们有一个基于git-flow的代码仓库,在开发分支上使用Atlassian SourceTree的git subtree将一个外部库作为子模块添加进去。

Project/
  Library/
    X/
    Y/
    Z/

后来我们执行了git flow release,将develop分支合并到主分支(master/release)。

问题出在切换到主分支(master)时,Library的内容被放置在了仓库的根目录下而不是Library文件夹内,就好像在合并过程中失去了git subtree前缀。

Project/
  X/
  Y/
  Z/

有什么想法是出了什么问题吗?


是的,它是。在开发分支中位于子文件夹中。似乎是git-flow发布过程没有保留子树指针。 - Ramon Poca
2
这可能是一个愚蠢的问题,但你的.git文件夹在哪里? - Mobile Ben
2
你是如何将一个外部库作为子树添加的?是通过文件复制、git克隆还是git子模块? - sax
与任何 git 存储库一样,它位于存储库的根目录中。 - Ramon Poca
2
我也遇到了同样的问题。按照使用git subtree的文档进行操作:git remote add $PROJECT_NAME $GIT_URI; git subtree add --prefix=$PROJECT_PATH $PROJECT_NAME $PROJECT_BRANCH目前为止一切顺利。然而,下一次运行git pull # (no explicit remote or branch)第二个远程仓库的内容也被拉到了我的主项目根目录中。我怀疑这与git远程跟踪选项有关,因为任何远程都被视为有效的对等方,并且...它们都被拉取了。 我的git配置文件中写着:fetch = +refs/heads/*:refs/remotes/$PROJECT_NAME/*我认为就是这个原因。 - dman
显示剩余2条评论
1个回答

1
子树本身在它自己的分支上有它自己的根目录。参见http://git-scm.com/book/en/v1/Git-Tools-Subtree-Merging,特别是:

你想将Rack项目作为子目录合并到主项目中。你可以使用git read-tree在Git中完成此操作。你将在第9章中了解更多关于read-tree及其相关命令的内容,但现在只需要知道它会将一个分支的根目录读入当前的暂存区和工作目录中。你刚刚切换回主分支,并将rack分支拉入主项目的rack子目录中:

$ git read-tree --prefix=rack/ -u rack_branch


这里描述了子树合并策略,我正在使用git-subtree(请参见https://github.com/git/git/blob/master/contrib/subtree/git-subtree.txt)。 - Ramon Poca

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