我有一个包含输出的补丁文件git diff.我想得到根据补丁文件添加或修改的所有文件的摘要.我可以使用什么命令来实现这一目标?
$ vim patch
Index: toPatch
===================================================================
--- toPatch
+++ toPatch
@@ -2,4 +2,4 @@
*/
-final public class XMLWriter {
+public class XMLWriter {
$ vim toPatch
*/
final public class XMLWriter {
public static float CURRENT_VERSION=2.2f;
$ patch -p0 -ui patch
patching file toPatch
Hunk #1 succeeded at 1 with fuzz 2 (offset -1 lines).
Run Code Online (Sandbox Code Playgroud)
为什么模糊和线偏移?这是一个尝试理解差异和补丁的演示案例,因为工具有时/通常看起来不像预期的那样工作.
到目前为止,我还没有找到一个明确的答案,尽管答案可能是"改变你的工作流程".
我刚刚开始玩Mercurial的补丁队列,我可以看到它的一些重要力量.这看起来非常棒.在我的测试中,我发现如果你有一个补丁队列repo1,并且你从中拉出来repo2,你可以做一些坏事.例如:
repo1repo1repo2repo1取消应用(弹出?)所有补丁repo2现在你会看到两个不同的分支 - 从某个角度看是有道理的.然而,由于我的补丁不是repo1历史的一部分(至少在它们被应用之前),似乎应该有办法告诉mercurial我的补丁是禁止的,并且只提供"官方历史".
有没有办法做到这一点?
关于编辑GitHub拉取请求的答案的后续问题询问是否在应用之前直接编辑补丁文件会导致对原作者的工作表示赞赏.由于它不是原始问题的真正部分,我在这里要求它作为一个新问题.
最近,我一直在玩git.我正在尝试模拟将补丁应用到我的主分支,这个补丁理解了一个提交,我在java操作中添加了一些注释.我使用git生成了补丁format-patch.然后我切换到我的主分支来应用补丁.执行git apply命令时发生以下错误:
path/to/my/patch/file: line x
path/to/my/patch/file: line x+1
path/to/my/patch/file: line x+2
path/to/my/patch/file: line x+3
Run Code Online (Sandbox Code Playgroud)
我注意到,我也试过以下参数:--ignore-space,ignore-whitespace,
我有一个Gradle构建脚本,可以成功构建我的项目并编译我需要的所有工件。
但是,在某些情况下,我想让其他开发人员可以选择修补某些文件。例如,在其中一个档案中,有一个xml文件,其中包含有关数据库挂钩的信息-一些开发人员使用其他版本(甚至引擎),并且在使用生成输出之前需要对其进行更改。
我不想让他们更改可能会错误提交的版本控制文件,而是让他们选择拥有构建脚本适用的本地单个补丁文件。
在旧的蚂蚁脚本中,我们做了这样的事情
<target name="appcontext-patch" if="applicationContext.patch.file">
<patch patchfile="${applicationContext.patch.file}" originalfile="${dist.dir}/applicationContext.xml"/>
</target>
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何在Gradle中做到这一点。是否有比尝试直接将其转换为to更好的(即更惯用的)方法ant.patch?
一些上下文
这是文件首先如何在存档中结束的方式:
into('META-INF') {
from 'deployment', {
include 'applicationContext.xml'
rename { fn -> "jboss-spring.xml" }
}
}
Run Code Online (Sandbox Code Playgroud)
这将是fantabulous如果我可以做这样的事情
into('META-INF') {
from 'deployment', {
include 'applicationContext.xml'
rename { fn -> "jboss-spring.xml' }
patch 'local/applicationContext.xml.patch'
}
}
Run Code Online (Sandbox Code Playgroud)
并在将文件放入存档之前应用补丁文件。我不介意编写一些代码来实现这一目标,但是我对Gradle还是很陌生,我也不知道从哪里开始。
我正在尝试使用“组装”选项修补 IDA 中的二进制文件,每次我输入带有一些算术运算的指令来计算偏移量时,我都会收到一个Invalid Operand错误。例如:
mov [bp-4], bx
Run Code Online (Sandbox Code Playgroud)
返回Invalid Operand,而
mov ax, bx
Run Code Online (Sandbox Code Playgroud)
作品。
我尝试使用指令的格式(例如 include word ptr、 use4h等),但似乎没有任何效果。有没有办法解决这个错误,或者输入字节码来修补唯一的选项?
我有一个本地存储库,我使用以下命令创建了一个 patch.txt(从第一次提交到最后一次提交):
git diff commitid1 commitid2 > patch.txt
Run Code Online (Sandbox Code Playgroud)
但是如果我查看这个 patch.txt,我会看到 2 个目录 /a 和 /b。并且所有文件总是指向 2 个不同的目录(/a 和 /b)?怎么来的?我只有一个本地存储库
我如何创建一个补丁,以便只从一个目录中创建没有 /a 和 /b 的补丁?
谢谢!
我正在尝试为具有上下文管理器和许多调用的类函数的方法编写单元测试。我很难理解如何正确模拟该函数,以便可以测试返回值。我要模拟的类是db。正如您在下面看到的那样,我正在使用补丁程序,但是我不知道如何获取它以返回正确的方法调用。我正在得到一个通用的模拟函数,而不是我期望的返回值。
db_class.py
import db
class Foo():
def __init__(self):
pass
def method(self):
with db.a() as a:
b = a.b
return b.fetch()
Run Code Online (Sandbox Code Playgroud)
unit_db.py
from mock import Mock, patch, MagicMock
from db_class import Foo
@patch('db_class.db')
def test(db_mock):
expected_result = [5,10]
db_mock.return_value = Mock(__enter__ = db_mock,
__exit___ = Mock(),
b = Mock(fetch=expected_result))
foo = Foo()
result = foo.method()
assert result == expected_result
Run Code Online (Sandbox Code Playgroud) 我想自动测试一组仍然完全适用于(更新的)代码库的补丁。为此,我打算跑
patch -p 1 < path/to/patch0.patch
Run Code Online (Sandbox Code Playgroud)
对于所有补丁patch*.patch,检查此命令的返回码,并将其存储在某处。不幸的是,patch在某些情况下似乎可以交互工作。需要交互的典型输出是
can't find file to patch at input line 44
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: foo/docs/faq.html
|===================================================================
|--- foo.orig/docs/faq.html
|+++ foo/docs/faq.html
--------------------------
File to patch:
Run Code Online (Sandbox Code Playgroud)
有没有办法patch非交互式运行?(也许patch不是这里任务的正确工具。)