git read-tree 到项目根目录

kra*_*ich 6 git merge

我的 main_repo 的文件夹结构如下

应用程序根目录

  • 应用程序
    • 代码
        • 文件1
        • 文件2
      • 酒吧
  • 皮肤
  • 文件1
  • 文件2

这是主要的应用。我还有另一个存储库,其中包含我的主应用程序的扩展。问题是扩展目录布局与主项目根目录重叠,例如

扩展根目录

  • 应用程序
    • 代码
      • 巴兹
        • 文件1
        • 文件2
  • 皮肤
    • 文件1
    • 文件2
  • 文件3
  • 文件4

所以我不能使用子模块工具。我需要合并这两个存储库以进行进一步的开发。我需要能够从extension_repo合并到main_repo并返回,因此如果我对合并到main_repo的扩展进行了更改,我只能将这些更改(没有应用程序本身)合并到extension_repo。我不知道这是否可能。看来读取树合并可以做到我想要的,但我不能以这种方式使用它

git read-tree --prefix=/ -u extension_remote_branch
Run Code Online (Sandbox Code Playgroud)

因为我收到这个错误

error: Entry '.gitignore' overlaps with '.gitignore'.  Cannot bind.
Run Code Online (Sandbox Code Playgroud)

我想我重叠的所有目录都会出现此错误。除了 .gitignore 之外,我实际上没有重叠的文件。

STW*_*STW 8

到目前为止,我还没有找到通过 git 使用单个命令来完成此操作的方法;所以我使用了一个相当简单的解决方法。基本方法是read-tree进入第二个空目录。然后将第二个目录移到第一个目录之上。

基本流程是:

mkdir upstream-tree
git read-tree --prefix=upstream-tree/ -u myremote/branch
git commit -m "Pulled in remote tree"
cp -rf upstream-tree/* local-tree/
git rm -r upstream-tree
git add local-tree
git commit -m "Merged upstream-tree into local-tree"
Run Code Online (Sandbox Code Playgroud)


小智 1

让我猜猜。您是 magento 开发人员吗?

目前我找到了一个解决方案:

  • 克隆您的扩展存储库
  • 添加干净框架的远程(在我的例子中是magento),
  • git merge -s ours --no-commit ...
  • 从框架存储库读取树并重置索引

现在,所有更改都将保存到扩展的存储库中。没有框架的文件。不幸的是,这种方法仅适用于一个扩展。但我看到了一种有趣的方法,.git为每个扩展名重命名文件夹。我还没有尝试过。