git apply error没有这样的文件或目录

时间:2019-06-07 21:02:10

标签: bash git git-am git-apply

我有两个独立的git存储库:A和B。项目A的子文件夹中已经存在一些存储库B文件。我的目标是为存储库B创建补丁,然后将其应用于存储库A中的子文件夹以保存历史记录合并时回购B的代码。问题是补丁无法创建新文件。例如:

假定此文件夹结构为:/home/user/B/..bunch目录和/home/user/A/ext/lib/B/..bunch目录

  

cd / home / user / B

     

git format-patch“ xx..xx” -o / home / user / A /(创建补丁文件)

     

cd / home / user / A

     

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

工作正常,因为补丁程序未创建任何新文件,也未尝试访问B中存在但A中没有的文件夹

但是

  

cd / home / user / A

     

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

不起作用并引发此错误: 正在检查补丁ext / lib / B / xyz / test.c ... 错误:ext / lib / B / xyz / test.c:没有这样的文件或目录。

到目前为止,我已经尝试了以下命令:

  

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。补丁

1 个答案:

答案 0 :(得分:0)

有多种方法可以创建补丁文件以创建新文件。但是,在 repo B 中创建补丁并在 repo A 中应用它们不会将 repo B 的历史记录导入 repo A。这就是“在合并它们的同时保留 repo B 的历史记录”的意思吗?

导致 BlurBuilder.blur 创建新路径的示例补丁:

git apply

创建这样的补丁的一种方法是将文件从 repo B 复制到 repo A 中的目的地,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 任何更改或新文件,然后使用 git add 为所有更改创建补丁和新文件。但是,到那时,这些文件已经在 repo A 中,因此创建这样的补丁没有什么意义,而且这也不会将 repo B 的历史记录导入 repo A。

如果您真的想将 repo B 合并到 repo A 的子目录中并保留两者的历史记录,最好不要使用补丁并在此处查看前几个答案:How do you merge two Git repositories?