git:あるリポジトリの履歴を別のリポジトリのディレクトリにコピー(チェリーピック)します

ピストス

2つのリポジトリがあります。最初のレポ(Aと呼びましょう)は少し前に始まりました。2番目のレポ(B)はごく最近開始されました。今、私たちはBをAのサブディレクトリにしたほうがいいと考えています。それで私はそれをしたいのですが、Bのコミット履歴を保持します。

  • 完全なコミット履歴が必要です。つまり、Bの履歴を1つのパッチに押しつぶして、それをAの新しいコミットとしてドロップしたくありません。
  • 私はBの正確なSHA1を保持することを気にしません(それはおそらく不可能であることを理解しています)。
  • Bのコミットのタイムスタンプを保持する必要はありません(ただし、保持しておくと便利です)。
  • 私は著者を維持することを気にしません。
  • Bの各コミットの差分/パッチを保持したいだけです。
  • 2つの別々のリポジトリの概念を保持する必要はありません。実は、これからはAだけが欲しいです。
  • BがAのgitサブモジュールである必要はなく、独自の.gitdirなどがあります。

実行された操作の最後に、次の3つの基準を満たします。

  1. HEADBのに見られるファイルとディレクトリはAのサブディレクトリに見られ/path/to/repoB/somefile.jsます。/path/to/repoA/B/somefile.js
  2. Bのすべてのコミットメッセージは、Aのコミットの時系列の終わりに順番に表示されます。
  3. 各コミットの差分が利用可能です(git logなどで表示可能

いくつかの例は、私が意図していることを明確にするかもしれません:

  1. リポジトリBでは、コミット1は追加することです file.txt
  2. コミット2は編集することです file.txt
  3. したがって、レポAでは、2つの新しいコミットが必要です。
  4. レポAコミット98:追加 B/file.txt
  5. レポAコミット99:編集 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)のatrusfrom#git感謝します。

  1. リポジトリBで、新しいブランチを作成します。git checkout -b indir
  2. レポBでmkdir b-subdir、ここb-subdirで、BがAのdirツリーに入る予定のdirはどこにありますか。
  3. リポジトリBで、git mv [...] b-subdirすべて(.git/およびb-subdir/それ自体を除くをに移動しますb-subdir
  4. その移動をリポジトリBにコミットします。
  5. 原点にプッシュ(push -u origin HEAD)。
  6. レポAgit remote add repo-b ssh://......../repo-b.git
  7. git fetch repo-b
  8. git merge --allow-unrelated-histories repo-b/indir

これにより、ファイルパスからプレフィックスを削除することなく、リポジトリBから(の--followスイッチを使用してgit log取得した任意のファイルの完全な履歴を確認できますを使用すると、ファイルを削除した場合にのみBにファイルの履歴が表示されます(そうでない場合はAに履歴が表示されます)。b-subdir/git subtree

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Git:ファイルの履歴をあるリポジトリから別のリポジトリにコピーします

分類Dev

履歴を保持しながら、特定のファイルをあるgitリポジトリから別のgitリポジトリにコピーする方法

分類Dev

履歴のないgitリポジトリをコピーする

分類Dev

サブディレクトリの履歴を親ディレクトリにコピーします

分類Dev

単一のブランチとその履歴を新しいリポジトリにコピーします

分類Dev

あるプロジェクトから別のプロジェクトのデバッグ出力ディレクトリにexeをコピーします

分類Dev

gitは、数回のコミット前に削除された大きなサブディレクトリをリポジトリ履歴から削除します

分類Dev

別のgitリポジトリへのコミットをチェリーピックするにはどうすればよいですか?

分類Dev

コミットを別のgitリポジトリにコピーする方法

分類Dev

サブディレクトリを別のGitリポジトリにデタッチ(移動)します

分類Dev

Git:以前のすべての履歴なしでコミットをチェリーピックする方法

分類Dev

SVNリポジトリのルートレベルディレクトリを別のリポジトリのサブディレクトリにします

分類Dev

gitは、履歴を保持しながらディレクトリを別のリポジトリに移動します

分類Dev

あるgitリポジトリから別のgitリポジトリにフォルダ(およびその中のすべて)をコピーします

分類Dev

Gitサブモジュールを使用して、同じリポジトリ内の別のブランチのディレクトリ内に1つのブランチのコピーを保持できますか?

分類Dev

gitリポジトリを別のディレクトリに移動してそのディレクトリをgitリポジトリにする方法は?

分類Dev

gitリポジトリを既存のディレクトリにマージする方法はありますか?

分類Dev

履歴を持つ2つのgitリポジトリをサブディレクトリにマージし、常にそこにあるファイルのふりをします

分類Dev

Gitコマンドを使用して、特定のディレクトリにある「リモートリポジトリ」ファイルを一覧表示します

分類Dev

別のgitリポジトリからコミットをチェリーピックすることは可能ですか?

分類Dev

プッシュされたファイルをあるGitHubリポジトリから別のリポジトリに自動的にコピーします

分類Dev

マージ後にブランチを別のディレクトリにコピーします

分類Dev

既存のgitリポジトリのコピーを新しいリポジトリに取得する方法

分類Dev

既存のgitリポジトリのコピーを新しいリポジトリに取得する方法

分類Dev

ベアリポジトリ内の1つのディレクトリのコンテンツをリポジトリ外のディレクトリにコピーします

分類Dev

履歴を保持しながら、いくつかのフォルダーとファイルをgitリポジトリから別のリポジトリにコピーします

分類Dev

コード履歴を保持したまま、リポジトリフォルダーをあるプロジェクトから別のプロジェクトに移動する-Azure DevOps

分類Dev

別のリポジトリからのチェリーピックコミット

分類Dev

Gitリポジトリを使用したTFSでユーザーのチェックイン履歴を確認する方法

Related 関連記事

  1. 1

    Git:ファイルの履歴をあるリポジトリから別のリポジトリにコピーします

  2. 2

    履歴を保持しながら、特定のファイルをあるgitリポジトリから別のgitリポジトリにコピーする方法

  3. 3

    履歴のないgitリポジトリをコピーする

  4. 4

    サブディレクトリの履歴を親ディレクトリにコピーします

  5. 5

    単一のブランチとその履歴を新しいリポジトリにコピーします

  6. 6

    あるプロジェクトから別のプロジェクトのデバッグ出力ディレクトリにexeをコピーします

  7. 7

    gitは、数回のコミット前に削除された大きなサブディレクトリをリポジトリ履歴から削除します

  8. 8

    別のgitリポジトリへのコミットをチェリーピックするにはどうすればよいですか?

  9. 9

    コミットを別のgitリポジトリにコピーする方法

  10. 10

    サブディレクトリを別のGitリポジトリにデタッチ(移動)します

  11. 11

    Git:以前のすべての履歴なしでコミットをチェリーピックする方法

  12. 12

    SVNリポジトリのルートレベルディレクトリを別のリポジトリのサブディレクトリにします

  13. 13

    gitは、履歴を保持しながらディレクトリを別のリポジトリに移動します

  14. 14

    あるgitリポジトリから別のgitリポジトリにフォルダ(およびその中のすべて)をコピーします

  15. 15

    Gitサブモジュールを使用して、同じリポジトリ内の別のブランチのディレクトリ内に1つのブランチのコピーを保持できますか?

  16. 16

    gitリポジトリを別のディレクトリに移動してそのディレクトリをgitリポジトリにする方法は?

  17. 17

    gitリポジトリを既存のディレクトリにマージする方法はありますか?

  18. 18

    履歴を持つ2つのgitリポジトリをサブディレクトリにマージし、常にそこにあるファイルのふりをします

  19. 19

    Gitコマンドを使用して、特定のディレクトリにある「リモートリポジトリ」ファイルを一覧表示します

  20. 20

    別のgitリポジトリからコミットをチェリーピックすることは可能ですか?

  21. 21

    プッシュされたファイルをあるGitHubリポジトリから別のリポジトリに自動的にコピーします

  22. 22

    マージ後にブランチを別のディレクトリにコピーします

  23. 23

    既存のgitリポジトリのコピーを新しいリポジトリに取得する方法

  24. 24

    既存のgitリポジトリのコピーを新しいリポジトリに取得する方法

  25. 25

    ベアリポジトリ内の1つのディレクトリのコンテンツをリポジトリ外のディレクトリにコピーします

  26. 26

    履歴を保持しながら、いくつかのフォルダーとファイルをgitリポジトリから別のリポジトリにコピーします

  27. 27

    コード履歴を保持したまま、リポジトリフォルダーをあるプロジェクトから別のプロジェクトに移動する-Azure DevOps

  28. 28

    別のリポジトリからのチェリーピックコミット

  29. 29

    Gitリポジトリを使用したTFSでユーザーのチェックイン履歴を確認する方法

ホットタグ

アーカイブ