2つのリポジトリがあります。最初のレポ(Aと呼びましょう)は少し前に始まりました。2番目のレポ(B)はごく最近開始されました。今、私たちはBをAのサブディレクトリにしたほうがいいと考えています。それで私はそれをしたいのですが、Bのコミット履歴を保持します。
.git
dirなどがあります。実行された操作の最後に、次の3つの基準を満たします。
HEAD
Bのに見られるファイルとディレクトリはAのサブディレクトリに見られ/path/to/repoB/somefile.js
ます。/path/to/repoA/B/somefile.js
git log
などで表示可能)いくつかの例は、私が意図していることを明確にするかもしれません:
file.txt
file.txt
B/file.txt
B/file.txt
編集:
サブディレクトリのマージgitリポジトリは、私の質問の複製として提案されています。それは私が求めているものに非常に近く、いくつかの素晴らしい答えがあることを認めます。私はsubtree
そこで答えと答えを試しましたrebase --onto
。どちらも非常に近いものsubtree
でしたが、不十分でしgit log
た。path/to/file/without/repo-subdir
(Bを移動した場所)を参照せずに、リポジトリの履歴全体の履歴を表示することはできませんでしたrepo-subdir
。そしてrebase --onto
、Bの履歴をAから見えるようにしませんでしたHEAD
。
これが私がやったことです。私を正しい方向に導いてくれたFreenode(IRC)のatrus
from#git
に感謝します。
git checkout -b indir
mkdir b-subdir
、ここb-subdir
で、BがAのdirツリーに入る予定のdirはどこにありますか。git mv [...] b-subdir
すべて(.git/
およびb-subdir/
それ自体を除く)をに移動しますb-subdir
。push -u origin HEAD
)。git remote add repo-b ssh://......../repo-b.git
git fetch repo-b
git merge --allow-unrelated-histories repo-b/indir
これにより、ファイルパスからプレフィックスを削除することなく、リポジトリBから(の--follow
スイッチを使用してgit log
)取得した任意のファイルの完全な履歴を確認できます。を使用すると、ファイルを削除した場合にのみBにファイルの履歴が表示されます(そうでない場合はAに履歴が表示されます)。b-subdir/
git subtree
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加