3

したがって、次のように、別のリポジトリを現在のリポジトリのサブディレクトリにマージしました。

git remote add -f Bproject /path/to/B
git merge -s ours --no-commit Bproject/master
git read-tree --prefix=dir-B/ -u Bproject/master
git commit -m "Merge B project as our subdirectory"

ただし、微妙な問題があるようです。私がする時

git log dir-B/

結果は、「B プロジェクトをサブディレクトリとしてマージします」というメッセージだけです。必要なログ情報、つまり dir-B のインポート履歴を取得するにはどうすればよいですか?

4

2 に答える 2

4

マージ コミットはexample.txtBProject/master名前が に変更されたものとして表示されdir-B/example.txtます。オプションが使用されgit logていない限り、名前変更後のファイル/ディレクトリの履歴をたどりません:--follow

--follow
Continue listing the history of a file beyond renames (works only for a single file).

差分を正しく表示することがどうしても必要な場合はBproject/master、プロジェクトが常にディレクトリdir-Bにあったかのように履歴を書き直してから、通常のマージを行うことができます。これは、マージされた履歴の SHA が 上のものとは関係がないことを意味しBproject/masterます。ただし、タイムスタンプ、作成者、およびコミット メッセージはすべて元の値を保持します。

これを行いたい場合は、Bproject最初に個別にクローンを作成してから、そのクローンでこれを実行することをお勧めします。

git-filter-branch manpage

To move the whole tree into a subdirectory, or remove it from there:
git filter-branch --index-filter \
        'git ls-files -s | sed "s-\t\"*-&newsubdir/-" |
                GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
                        git update-index --index-info &&
         mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD

新しい履歴が正しいように見えることを確認したら、書き換えたバージョンをリモートとしてメイン プロジェクトに追加し、通常のマージを使用してマージできます。

于 2012-10-25T01:53:36.190 に答える