9

A と B の 2 つの別個の git リポジトリがあります。一部のリポジトリ B のファイルは、プロジェクト A のサブフォルダーに既に存在します。私の目標は、リポジトリ B のパッチを作成し、それらをリポジトリ A 内のサブフォルダーに適用して、リポジトリ B の履歴を保存することです。それらをマージしながら。問題は、パッチが新しいファイルを作成できないことです。例えば:

このフォルダー構造を想定: /home/user/B/..bunch のディレクトリおよび /home/user/A/ext/lib/B/..bunch のディレクトリ

cd /ホーム/ユーザー/B

git format-patch "xx..xx" -o /home/user/A/ (パッチファイルの作成)

cd /ホーム/ユーザー/A

git apply -v --directory=ext/lib/B/ 0001-foo-12345.patch

パッチは新しいファイルを作成しないか、B には存在するが A には存在しないフォルダーにアクセスしようとしないため、正常に動作します。

しかし

cd /ホーム/ユーザー/A

git apply -v --directory=ext/lib/B/ 0002-foo2-6789.patch

は機能せず、次のエラーがスローされます: Checking patch ext/lib/B/xyz/test.c... error: ext/lib/B/xyz/test.c: No such file or directory.

これまでに次のコマンドを試しました。

git apply -v --directory=/home/user/A/lib/B/ --include=bb/cc --exclude=cc/ --exclude=bb/ --include=* 0002-foo2-6789.patch

git apply -v --directory=/home/user/A/lib/B/ --include=* --include=bb/cc --exclude=cc/ --exclude=bb/ 0002-foo2-6789.patch

git am --directory=/home/user/A/lib/B/ --include=* --include=bb/cc --exclude=cc/ --exclude=bb/ 0002-foo2-6789.patch

4

1 に答える 1

1

新しいファイルを作成するパッチ ファイルを作成するには、いくつかの方法があります。ただし、レポ B にパッチを作成してレポ A に適用しても、レポ B の履歴はレポ A にインポートされません。「マージしながらレポ B の履歴を保存する」という意味ですか?

git apply新しいパスを作成するパッチの例:

diff --git a/b1.txt b/b1.txt
new file mode 100644            <-- lines specific to creating new files
index 0000000..12f00e9
--- /dev/null                   <-- lines specific to creating new files
+++ b/b1.txt
@@ -0,0 +1 @@
+contents

このようなパッチを作成する 1 つの方法は、ファイルをレポ B からレポ A の宛先 (git add変更されたファイルまたは新しいファイル)にコピーしてから、変更git diff --staged > my.patchされたすべてのファイルと新しいファイルのパッチを作成するために使用することです。ただし、その時点で、ファイルは既にレポ A にあるため、そのようなパッチを作成する意味はほとんどなく、これもレポ B の履歴をレポ A にインポートしません。

本当にレポ B をレポ A のサブディレクトリにマージし、両方の履歴を保存したい場合は、パッチを使用せず、ここで上位のいくつかの回答を確認することをお勧めします: How do you merge two Git repositories?

于 2021-06-12T13:13:19.670 に答える