5

私はこのようなフォルダ構造を持つmain_repoを持っています

application_root

  • アプリ
    • コード
      • foo
        • file1
        • file2
      • バー
  • lib
  • file1
  • file2

これがメインアプリケーションです。そして、メインアプリケーション用の拡張機能を備えた別のリポジトリがあります。問題は、拡張ディレクトリのレイアウトが、次のようなメインプロジェクトのルートからのディレクトリとオーバーラップすることです。

extension_root

  • アプリ
    • コード
      • バズ
        • file1
        • file2
    • file1
    • file2
  • file3
  • file4

そのため、サブモジュールツールを使用できません。さらなる開発のために、この2つのリポジトリをマージする必要があります。私はextension_repoからmain_repoにマージし、また元に戻す機能が必要なので、main_repoにマージされた拡張機能に変更を加えた場合、この変更のみを(アプリケーション自体なしで)extension_repoにマージできます。それが可能かどうかはわかりません。読み取りツリーのマージは私が望むことを実行しているようですが、私はそれをそのように使用することはできません

git read-tree --prefix=/ -u extension_remote_branch

このエラーが発生するため

error: Entry '.gitignore' overlaps with '.gitignore'.  Cannot bind.

オーバーラップしたすべてのディレクトリでこのエラーが発生すると思います。.gitignoreを除いて、実際には重複するファイルはありません。

4

4 に答える 4

5

これまでのところ、git を介して 1 つのコマンドでこれを行う方法は見つかりませんでした。代わりに、かなり簡単な回避策を使用します。基本的なアプローチはread-tree、2 番目の空のディレクトリに移動することです。次に、2 番目のディレクトリを最初のディレクトリの上に移動します。

基本的な流れは次のとおりです。

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"
于 2014-09-23T14:26:21.330 に答える
1

私に当てさせてください。あなたはマジェントの開発者ですか?

今のところ、解決策を見つけました:

  • 拡張レポを複製する
  • クリーンフレームワーク(私の場合はmagento)のリモートを追加し、
  • git merge -s ours --no-commit ...
  • フレームワーク リポジトリからツリーを読み取り、インデックスをリセットする

これで、すべての変更が拡張機能のリポジトリに保存されます。フレームワークのファイルなし。残念ながら、この方法は 1 つの拡張子に対してしか機能しません。.gitしかし、拡張子ごとにフォルダーの名前を変更するという興味深い方法を見つけました。まだ試していません。

于 2013-03-10T00:08:15.920 に答える
1

インデックスをチェックしてください - 「試みた」git read-treeが、正しい構文を得る前に数回刺した場合、インデックスに表示されていない一連の変更が競合の原因となっている可能性があります。

read-tree私は今日、既存のプロジェクトを空の (新しい) git リポジトリのルートにしようとして、この正確なシナリオに遭遇しましgit read-tree --prexfix=/ -u BRANCHた。resetcleanmaster

于 2014-02-27T19:02:35.473 に答える