从2个文件夹的diff创建补丁文件

kar*_*hov 38 git diff patch

我对一个开源项目做了一些更改,没有花时间创建适当的补丁文件.

现在,项目的维护者发布了一个新版本,在新的和编辑过的文件中,有一堆重命名的文件.

什么是将我的更改应用到新版本的最佳方式?
我是diff/patch使用的新手,如果我能用git完成它,那就更好了.

Wil*_*ell 52

如果你有两个目录a,并b认为是相似的,你想b是一样的a,你可以创建并应用补丁有:

$ diff -ur b a > ba.diff
$ patch -i ba.diff
Run Code Online (Sandbox Code Playgroud)

假设您有目录local(包含本地版本的upstream1.0)upstream1.0,和upstream1.1.要创建并应用您的更改upstream1.1:

$ diff -ur upstream1.0 local > my.diff
$ cd upstream1.1
$ patch -i ../my.diff 
Run Code Online (Sandbox Code Playgroud)

检查文档中的补丁,并尝试说服上游维护者使用git.如果您可以使用git工具来处理本地存储库,那么事情会变得更加简单.

  • 如果某处存在二进制文件,那么diff -uarN ba> ba.diff`会更好. (9认同)
  • `diff -urN ba> ba.diff`如果您在*a*中创建的新文件不在*b*中 (7认同)
  • 我将其命名为-uraN,因为快捷方式更容易记住:) (3认同)

nir*_*iry 10

如果项目是在git下并且您没有在本地提交更改,那么您可以简单git diff > file.patch地获取可修补的差异数据.如果您已在本地提交更改,则可以git log在您之前查找提交git diff commit_string > file.patch.

如果项目不在git下,或者你没有克隆存储库而没有克隆存储库(如标题所示),则可以使用diff -urN original_dir new_dir > file.patch创建补丁文件.在这两种情况下,您可以稍后尝试使用补丁来应用补丁.

但是,考虑使用git工具将更改与新版本合并,因为git也能够跟踪文件名更改.你需要学习很多关于git本身的知识,并且你需要一些时间才能做到正确 - 你应该在开始玩它之前备份你的工作.