gpt4 book ai didi

SVN差异忽略已删除的文件

转载 作者:行者123 更新时间:2023-12-02 03:57:03 24 4
gpt4 key购买 nike

我对 SVN 真的很陌生,我不确定我做错了什么。

我从一个包含以下内容的存储库开始:

HelloWorld.java

我在我的计算机上创建了一个工作集,然后将 HelloWorld.java 复制到 HelloWorldDe.java。然后我将 HelloWorld.java 重命名为 HelloWorldEn.java 并修改 HelloWorldDe.java 中的一行。在此之后,我有一个包含以下内容的工作集:
HelloWorldEn.java <-- Renamed copy of HelloWorld.java
HelloWorldDe.java <-- Renamed copy of HelloWorld.java with one line change

当我做 SVN 状态时,我得到了这个:
A HelloWorldDe.java
D HelloWorld.java
A HelloWorldEn.java

当我做 SVN diff 时,我得到了这个:
Index: HelloWorldDe.java
===================================================================
--- HelloWorldDe.java (revision 0)
+++ HelloWorldDe.java (revision 0)
@@ -0,0 +1,5 @@
+public class HelloWorld {
+ public static void main( String [] args ) {
+ System.out.println("Hallo welt!");
+ }
+}
Index: HelloWorld.java
===================================================================
--- HelloWorld.java (revision 13)
+++ HelloWorld.java (working copy)
@@ -1,5 +0,0 @@
-public class HelloWorld {
- public static void main( String [] args ) {
- System.out.println("Hello World!");
- }
-}
Index: HelloWorldEn.java
===================================================================
--- HelloWorldEn.java (revision 0)
+++ HelloWorldEn.java (revision 0)
@@ -0,0 +1,5 @@
+public class HelloWorld {
+ public static void main( String [] args ) {
+ System.out.println("Hello World!");
+ }
+}

但是,当我尝试在原始工作集上运行“patch -p0 -i German.diff”时,我最终得到了这个:
HelloWorld.java <-- Empty file
HelloWorldEn.java
HelloWorldDe.java

谁能解释为什么我得到一个空文件而不是文件被删除?

最佳答案

1.首先,几个问题

  • 什么版本subversion你正在用吗? (见第 3 部分)
  • 你是如何生成 German.diff 的?我们是否假设 German.diff 看起来与 svn diff 的输出完全一样?你提出的?

  • 2.补丁确实删除文件
    patch确实删除了 的文件本身通过删除所有行来清空 ,通常默认情况下,但如手册页中所述,这取决于实现。来自 man patch :

    -E or --remove-empty-files

    Remove output files that are empty after the patches have been applied. Normally this option is unnecessary, since patch can examine the time stamps on the header to determine whether a file should exist after patching. However, if the input is not a context diff or if patch is conforming to POSIX, patch does not remove empty patched files unless this option is given. When patch removes a file, it also attempts to remove any empty ancestor directories.



    您可以强制此选项或强制 --posix获得确定性行为。如果您这样做, patch应该删除那个文件。

    注意:空可能会产生误导。它真的是空的吗,比如 size = 0 字节?或者只是一个 \n里面有字符,没有文字?我发现真正的空文件是 patch 的噩梦,但如果它导致它们为空,它应该删除它们。

    3. svn有一个错误

    某些版本的 svn diff 根本不会将移动/重命名/删除的文件放在 diff 中!这取决于您如何调用 diff。所以 请确认您提供给 patch 的补丁文件(German.diff), 实际上有一个条目 对于补丁中的该文件,否则您可能会遇到此问题。

    见: http://svn.haxx.se/dev/archive-2004-03/0333.shtml .这封来自 SVN DEV 列表的存档电子邮件显示开发人员自己发现了这个问题,在 1.0.1 发布之前的某个时间,十多年前。

    根据我的经验,此问题已在 SVN 1.7 中修复。

    关于SVN差异忽略已删除的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12124660/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com