我是Linux和bash的新手,所以对我的问题很愚蠢感到抱歉,但是我在创建和应用补丁文件时遇到了问题。
假设我有两个目录原始/ 和新建/ ,并且在原始目录中,很少有4个或5个文件在 new中完全丢失/ 或被更改,其中一些位于某些子目录中。
根据一些我应该使用diff -rubN original/ new/ > patch.diff
的教程,但是其他教程却指出我应该使用diff -rubN new/ original/ > patch.diff
无论如何,如果我使用第一个,然后运行patch -t -p0 < patch.diff
,则会发生奇怪的事情,我得到所有文件的结果“正在修补文件的原始/子文件夹/文件名”,然后是原始/ 文件夹消失了, new / 文件夹仍然是空的,我必须再次运行patch命令。当我收到消息时,“下一个补丁程序将删除文件new / subfolder / filename,该文件不存在!” -在此之后, new / 文件夹中有文件,这很好,但是我不知道:
编辑:如果文本中不清楚,我将尝试将原始/ 文件夹中文件中的更改传输到 new / 文件夹中。似乎第二个差异(diff -rubN new/ original/ > patch.diff
)在这种情况下仅适用于一个文件,但仅适用于一个文件...但是只要差异大于一个文件,例如,如果我将新文件添加到原始/ 文件夹(在 new / 文件夹中不存在),补丁以那些奇怪的方式结束,删除不在 new / 文件夹并显示消息“下一个补丁程序将创建文件../到已存在的原始文件/ ..的路径!”和“修补文件../原始文件的路径”
还有一个新发现,在第一次补丁推荐之后,仅 new / 文件夹中不存在的文件似乎从原始/ 文件夹中删除
Edit2 :好的,只需找出如果我使用cd new/; patch -p1 < ../patch.diff
补丁就可以了,并且 original / 文件夹不会被删除。 我只是不明白为什么,因为对我来说,它似乎是相同的代码-> / original和/ new文件夹所在的目录中的p0或/ new目录中的p1...。我看不到区别< / p>