git - 如何使用 git subtree 包含另一个 git 存储库的一部分并在两个方向上 merge 更新

标签 git github git-merge git-subtree

下面显示了两个 git 存储库。第一个的结构类似于典型的 Python 项目。

foo_repo/
    .git/
    setup.py
    foo/
         __init__.py
         some_code.py
    tests/

bar/
    .git/

我想将 foo_repo/foo/ 目录作为子树包含在 bar/ 中,并且我希望能够将更新 merge 到 foo_repo/foo/some_code.py 从 foo_repo 存储库到 bar,反之亦然。

初始设置还不错。在我使用的 foo/ 目录中:

git subtree --prefix=foo/ split -b export

然后我在 foo_repo 中有一个新分支,其中只有 foo_repo/foo/ 目录的内容。要将它放入 bar,我只需转到 bar/ 目录并:

git subtree --prefix=foo/ add ../foo_repo/.git export

现在我已经准备就绪,我想进行一些代码开发并使 foo/ 在两个存储库中保持最新。从酒吧推我想我已经想通了。来自 bar/ 目录:

touch foo/more_code.py
git add foo/more_code.py
git commit -m "more code"
git subtree --prefix=foo/ push ../foo_repo/.git export

然后从 foo_repo/ 目录:

git checkout master
git subtree --prefix=foo/ merge export

以另一种方式 merge 是我被卡住的地方。来自 foo_repo/:

git checkout master
touch foo/yet_more_code.py
git add foo/yet_more_code.py
git commit -m "yet more code"
???

??? 是将 foo/ 目录与 export 分支 merge 的命令。然后从bar/:

git subtree --prefix=foo/ pull ../foo_repo/.git export

所以我基本上是在寻找 ??? 点中的行,或者执行相同操作的不同工作流程。我试过重复 git subtree --prefix=foo/split -b export_foo 是行不通的。

最佳答案

如果您再次拆分 foo/,将为该子树创建的新提交将创建在 export 中已存在的旧提交之上,包括所需的 merge 对于这样的:

git subtree --prefix=foo/ split

请注意,如果使用 -b 选项,该分支先前不应存在,因此您可能需要创建一个新分支或稍后强制更改它。

关于git - 如何使用 git subtree 包含另一个 git 存储库的一部分并在两个方向上 merge 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18906928/

相关文章:

git - git将不会 merge -说“已经是最新的”。当不是

ios - 更改文件位置后,项目无法识别我的某些类

git - 我的代码还有多少?

git - merge 时的 DIRTY_INDEX

Git merge 策略 : spaces make default shows no conflict and bring unexpected results

git - 有没有办法通过 VS IDE 将我未提交的源代码与 git 中的任意历史记录项进行比较?

git - 我可以为某个目录下的所有目录设置用户名/电子邮件吗?

git - 无法理解 Git 分支、 merge 和 rebase

git - 为什么在Android Studio 3.3.1 中使用Github 中的Revert 无法回滚到某个点?

git - merge 、更新和 pull Git 分支而不使用 checkout