【问题标题】:Git Subtree. Why can't I branch from a subtree rather than the root?Git 子树。为什么我不能从子树而不是根分支?
【发布时间】:2010-12-05 19:22:00
【问题描述】:

我正在努力理解使用 Git 子树策略的意义。我的意图是将一些不同的 repos 组合成一个伞式 repo 下的玩具 repos 小家族。我正在使用此处详述的子树策略:http://help.github.com/subtree-merge

我正在努力说服 Git 我想从根目录中的这些子树之一创建一个分支NOT。当我 cd 进入子树时,创建分支,然后 cd 回到根目录,从根目录运行 git branch 清楚地表明分支是在根目录创建的。叹息。

我喜欢 git/github,但让这个看似常规的任务正常工作令人抓狂。

有人可以告诉我吗?

【问题讨论】:

    标签: git github


    【解决方案1】:

    git 仅在“整个”树级别工作,因此无论您在工作树中的哪个位置,branchcheckout <branch>commit 等都在根级别工作。

    子树合并策略是一种合并策略,当您拥有一个存储库时,其中一个分支已将文件的子树移动到存储库中的不同位置,而另一侧已对原始位置中的这些文件进行了更改,则该策略可提供帮助。它旨在帮助合并这两个操作,以使正常的合并策略会产生更多冲突或将文件留在错误的位置。

    子树合并策略与 git 的“整棵树”操作的工作方式无关,所以如果你想创建一个只是存储库的一个子树的分支,你需要分支然后使用其他子树被移除,感兴趣的树向上移动到根级别。

    不过,鉴于您的使用模式,我建议您长期阅读子模块。它可能会提供适合您想要实现的功能。

    【讨论】:

    • Charles,我尝试了子模块路由。问题在于子模块只是对外部仓库的引用。正是我试图避免的。我希望 repo 存在于父级中,并且 NOT 引用其他任何内容。
    • 子树合并策略通常用于在单独开发的项目中合并,现在是较大项目的一部分(当然,来自此类(子)项目的文件应该放在超级项目的子目录中,而不是超级项目的顶级目录)。
    • 我不得不承认只在玩具示例中使用了子树合并,因此感谢您提供一些“真实”世界的洞察力。
    • 你可以查看外部 git-subtree 命令来做你想做的事情。 github.com/apenwarr/git-subtree
    【解决方案2】:

    我推荐 apenwarr 的 git-subtree:http://github.com/apenwarr/git-subtree。希望它在某个时候被添加到 git 本身。

    【讨论】:

    • 哇。这看起来确实像我一直在寻找的东西。感谢这个布莱恩。
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-14
    相关资源
    最近更新 更多