2016-06-22 10 views
0

2つのプロジェクトからコミットを移動するには問題があります。詳細は - プロジェクト1:複数のディレクトリを再編成する単一のgitを持っています - Project 2:Haveプロジェクト1と同じディレクトリですが、すべてのディレクトリには分離されたgitがあります。 問題がある:私は2つのディレクトリとプラスでファイルを触れプロジェクトにコミット1を持っている 、と私はチェリーピックしたいコミットしていると、すべてのファイルのすべての変更を移動し、2チェリーピックを1つのgitから複数のgitにコミットする

感謝をプロジェクトにコミット先読み

答えて

0

チェリーピックはコミット全体を把握し、コミット全体を現在のブランチに適用します。私があなたの質問を理解すると、複数のディレクトリを変更するコミットを行い、チェリーは各コミットの1つのディレクトリの変更だけを、そのディレクトリだけを含む別のgitリポジトリに選びます。

私が言ったように、チェリーピックは完全にコミットしているので、それだけでは動作しません。

しかし、これを実現するために、cherry-pickとfilter-branchを併用することは可能です。

最初に行うべきことは、既存のブランチのいずれかを台無しにしないように、プロジェクト1の新しい作業ブランチをチェックアウトすることです。あなたは作業中の支店は、これの終わりまでに、炎上する難破船になります。あなたはそれを静かに取り除くことができます。害も破滅もしない。

新しい作業ブランチに入ったら、を使用してコミットを書き直し、問題のディレクトリ以外のツリー内のすべてを削除します(コミット/コミットの親から書き直す必要があります)移行するのではなく、コミット/コミットする)。

この時点で、書き直されたコミットは、プロジェクト1の1つのディレクトリにあるファイルだけに触れてしまいます(作業中のブランチでは、他のすべてのディレクトリも完全に壊れてしまいます。親コミットには、作業ブランチ内の他のすべてのディレクトリの削除が含まれ、残りのすべてのコミットは残りのディレクトリの変更に制限されます。この時点で、これらのコミットをプロジェクト2の適切なgitリポジトリにチェックすることができるはずです。

移行しようとしているすべてのディレクトリについて、すっきりとすすぎ、繰り返します。

+0

私はそれをテストしていますが、私はテストしていますが、git filter-branch --tree-filterで作業したことはありません。私は例があり、あなたの解決策を教えてくれます。 - プロジェクト1:変更を加えるb0cefe4de84、: - フレームワーク/ベース/ LockPatternUtils.java - パッケージ/アプリケーション/設定/ security_finger_picker.xml - パッケージ/アプリケーション/ MMS/SecuritySettings.java - プロジェクト2では:私は論文のgitのを持っている: - (frameworks-base)framework/base - (packages-apps-Settings)packages/apps/Settings/ - (packages-apps-Mms)packages/apps/Mms – Optimmus

+0

ここで、ブランチをフィルタリングする方法を学ぶ機会です。 gitのドキュメントやGoogleの検索には、たくさんの情報があります。 Stackoverflowはチュートリアルサイトではありませんが、400文字のコメントではチュートリアルでは十分ではありません。 –

+0

あなたの返事をありがとう、効果的にあなたは正しいです、私はすでにgitでもっと深く情報を探しました。私はこのコマンドラインを実行しました: git filter-branch --tree-filter 'rm -r!(frameworks/base)' b0cefe4de84^..HEAD ここで、フレームワーク/ベースを保持し、コミット中の残りのファイルを削除しますが、私はエラーgit-filter-branchを持っています:1:eval:構文エラー: "("予期せぬ、とにかく、コミット/コミット自体ではなく、移行するコミット/コミットの親から書き直してください)。 ? – Optimmus

関連する問題