20

以前はメイン リポジトリで多くのサブモジュールを使用していましたが、プロジェクトの保守性を高めるために、実験的なブランチを開始し、それらをすべてサブツリーに置き換えました。

これはうまくいきましたが、サブツリーの1つを更新しようとすると、更新がサブツリーではない完全に間違ったディレクトリに誤ってマージされます。

ブランチ「サブツリー」に実験的なブランチが含まれるメイン リポジトリは、次のとおりです: git://github.com/hugowetterberg/goodold_drupal.git

更新をマージするリポジトリ: git://github.com/voxpelli/drupal-oembed.git

実行によるマージ: git merge -s subtree oembed/master

更新をマージするパス: sites/all/modules/oembed/

それらがマージされるパス: modules/aggregator/translations/

更新をサブツリーに入れる方法やエラーの原因を知っている人はいますか?

4

2 に答える 2

19

残念ながら、これは「git merge -s subtree」コードのバグ(または欠落している機能)です。実際には、マージするサブツリーを推測します。通常、これは魔法のように正しいことがわかりますが、サブツリーに多くの変更が含まれている場合(または元々空だった場合など)、見事に失敗する可能性があります。

それを回避する最良の方法は次のとおりです。

  1. 上記のようにファイルをマージします。

  2. 結果のすべてのファイルを、移動するはずの場所に手動で移動します。

  3. git commit -a --amendマージコミットを修正します。

このディレクトリが常に信じられないほどの流動的である場合を除いて、将来のマージはおそらく正常に機能します。

実験的な「gitsubtree」コマンドには、--prefixこれをオーバーライドできるパラメータがありますが、残念ながら現時点では機能しません(「gitmerge -s subtree」機能を回避する必要があり、実行する時間がないため)それ)。

とにかく、これはまれな状況であり、同じプロジェクトの将来のマージでも回避策は必要ありません。

于 2009-08-20T17:53:40.937 に答える
12

git バージョン 1.7.9.5

git pull -s subtree <remote name> <remote branch>

(マージは間違ったディレクトリに行きました)

git reset --hard HEAD^
git pull -s subtree -Xsubtree=correct/directory <remote name> <remote branch>

ディレクトリの末尾にスラッシュがないことに注意してください

ありがとう_

http://git.661346.n2.nabble.com/PATCH-0-8-The-return-of-Xours-Xtheirs-Xsubtree-dir-td4069081.html

于 2013-09-19T15:51:47.970 に答える