マージ先のサブディレクトリがかなり深くネストされている git のサブツリー マージ ステートジーを使用しようとしています - 現在は 4 レベルの深さです。
ここの指示に従って、モジュール リポジトリをリモートとして追加し、git read-tree を実行してリモート コードをローカル リポジトリのサブディレクトリに取得し、それらの変更をコミットしました。
私の問題は、リモートからメイン プロジェクトのマスター ブランチに変更をプルしてマージしようとしたときに発生します。上記のページのステップ 5 は、-s サブツリー スイッチを使用した git pull を提案しています。これは、サブディレクトリの深さが 1、2、または 3 レベルで、4 レベルでない場合に正しく機能します。
これは、2 レベルの深さのサブディレクトリにマージした結果です。sites/all/ の README ファイルが正しく更新されていることがわかります。私のリモート リポジトリでは、README はルートにあります。
$ git pull -s subtree REMOTE_REPO master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /path/to/my/REMOTE_REPO
* branch master -> FETCH_HEAD
Merge made by subtree.
sites/all/README | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
ここで、サブディレクトリは 3 レベルの深さです: sites/all/modules/. これも問題なく機能し、変更をプルしてファイルを更新します。
$ git pull -s subtree REMOTE_REPO master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /path/to/my/REMOTE_REPO
* branch master -> FETCH_HEAD
Merge made by subtree.
sites/all/modules/README | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
しかし今、私のコードは 4 レベルの深さのサブディレクトリにあります: sites/all/modules/my_module/. Git は REMOTE_REPO から変更を取得しているように見えますが、ファイルは更新されず、代わりに既に最新であると通知されます。
$ git pull -s subtree REMOTE_REPO master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /path/to/my/REMOTE_REPO
* branch master -> FETCH_HEAD
Already up-to-date!
Merge made by subtree.
すぐにもう一度実行すると、変更が取り込まれたり、ファイルが更新されたりしません。
$ git pull -s subtree REMOTE_REPO master
From /path/to/my/REMOTE_REPO
* branch master -> FETCH_HEAD
Already up-to-date.
この時点で git ログを表示すると、リモート リポジトリとマージからの変更が表示されますが、チェックアウト内のファイルは更新されていません。
これはバグですか、それとも何か間違っていますか?
更新: Chris Johnsen は、エラーをスローする次のオプションを提供しました。
$ git pull -X subtree=sites/all/modules/my_module/ REMOTE_REPO master
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From /Users/jeff/work/checkouts/compass_suite
* branch master -> FETCH_HEAD
fatal: entry not found in tree 173d4f16af4d2d61ae5c4b3446c392e8b49cc57d