gpt4 book ai didi

git subtree 简化如果从不贡献上游?

转载 作者:太空狗 更新时间:2023-10-29 13:41:02 28 4
gpt4 key购买 nike

如果您希望在主项目中包含子项目但从不向上游贡献更改,存在哪些优化(甚至包括 git subtree 的替代方案)?

实际用例:我正在嵌入 Ghost进入现有的 express.js 网站,例如进入 lib/Ghost。我将需要对其进行一些修改,他们无论如何都不希望在上游贡献这种类型。对 Ghost 项目的任何正常贡献都将通过 GitHub 上的典型分支完成,而不是从我的其他项目中完成。

因此,在最初将 Ghost 嵌入到我的项目中之后,唯一发生的事情就是偶尔更改本地源代码,以及有时从上游获取主分支的更新。

在这种情况下,git subtree 是否仍然是一种合适的方法,如果是,那么是否有任何陷阱或简化适用,因为这种需要永远不会对上游做出贡献?因此是否也可以将主要的 TryGhost/Ghost 存储库作为我的上游子树,而不是首先 fork Ghost,然后将 fork 作为项目的上游?

最佳答案

Subtree 听起来非常适合我。

如果您要进行任何本地更改,我认为子树比子模块更合适。

  1. 任何克隆您的项目的人都不需要像使用子模块那样运行额外的命令。
  2. 您所做的任何更改都将直接对您的子项目副本进行,并且不需要像使用子模块那样将其推送到公共(public)存储库以供其他人访问以便人们同步这些更改。
  3. 从上游 pull 是小菜一碟,如果从事您项目的其他人没有 git 子树也没关系(他们只是不会 merge 或拆分上游)。

我能想到的唯一缺点是你的存储库中有子项目的完整副本,但除非它是一个巨大的项目,对于关心它的 super 项目来说是可选的?

  • 您不需要为子项目创建分支,只需:

    git subtree add --prefix Ghost --squash -m "Adding Ghost." https://github.com/TryGhost/Ghost.git master

    从那时起您可以自由地进行更改,而完全忽略它最初来自 Ghost depot 的事实。从我上面的示例中可以看出,您甚至不需要添加 Remote 。

  • 如果您经常 pull ,则可能需要创建 Remote 。

    git remote add ghost https://github.com/TryGhost/Ghost.git
    git subtree pull --prefix=Ghost --squash -m "Updating Ghost." ghost master
  • 最后,即使您稍后决定要回馈上游,一个分支或任何地方,您只需将与子项目相关的部分拆分到一个分支中,这对您来说真的很简单然后将更改从该分支推送到分支存储库。

    git subtree split -p Ghost -b Ghost-contrib-br --rejoin
    # this should switch to the branch with only the ghost files

    git push <remote-contrib-repo>

    注意:我没有使用--squash,因为历史记录只会是自添加或上次--rejoin以来您修改的内容>

    --rejoin 是一种蹩脚的 hack,它会提交回您的 super 项目,因此 split 命令知道下一次拆分的最佳起点。在未来,我认为这将通过一个新的部分 .git/config 进行管理(我什至可以自己做)。

关于git subtree 简化如果从不贡献上游?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21975081/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com