创建包含新目录的 SVN 补丁
Posted
技术标签:
【中文标题】创建包含新目录的 SVN 补丁【英文标题】:Creating an SVN patch including new directories 【发布时间】:2011-11-04 00:50:12 【问题描述】:首先请原谅长文本,但我尽量详细。
我正在为一个开源项目 (DSpace) 进行开发。我对他们的 SVN 仓库没有提交权限,所以我检查了源代码并一直在使用 git 来管理我的版本控制。
在我的开发过程中,我在我的项目中添加了几个目录和二进制文件。
现在是制作 SVN 补丁文件的时候了,这样我就可以回馈社区了! Netbeans 通过 Team-> Create patch 选项为我执行此操作。到目前为止一切顺利...
但是,当我在另一台机器上再次检查源代码并使用补丁命令时:
# get current dir
DIR="$( cd "$( dirname "$0" )" && pwd )"
#check out dspace release
svn co http://scm.dspace.org/svn/repo/dspace/tags/dspace-1.7.2/ -q $DIR/dspace-1.7.2/
#apply patch
cd $DIR/dspace-1.7.2
echo "Now running at "&& pwd
patch --dry-run -N -p0 < $DIR/patches/patch.diff
cd $DIR
运行脚本
当我运行这个脚本时,一切都很顺利,直到补丁尝试修改我的新目录之一中的文件。上面写着:
can't find file to patch at input line 9214
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: dspace-jspui/dspace-jspui-webapp/src/main/webapp/static/js/jQueryUI/jquery-ui.js
|--- dspace-jspui/dspace-jspui-webapp/src/main/webapp/static/js/jQueryUI/jquery-ui.js Base (BASE)
|+++ dspace-jspui/dspace-jspui-webapp/src/main/webapp/static/js/jQueryUI/jquery-ui.js Locally Modified (Based On LOCAL)
--------------------------
File to patch:
在它停止之前,它能够修补一堆已经在原始dspace版本中的文件,所以我认为它与patch命令的-pXXX参数无关(尽管如此我已经尝试了 -p10) ...我认为这只发生在我尝试修补我创建的目录之一中的文件时。 我的猜测是 patch 命令不会创建新目录,所以找不到正确的路径。
这让我发疯了,请问有人知道如何解决我的问题吗?
提前致谢!
编辑:
我在 patch 命令中添加了 --verbose 选项。结果如下:
--------------------------
Patching file dspace-jspui/dspace-jspui-webapp/src/main/webapp/static/js/autocompleter/styles.css using Plan A...
Hunk #1 succeeded at 1.
Hmm... The next patch looks like a unified diff to me...
can't find file to patch at input line 9214
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: dspace-jspui/dspace-jspui-webapp/src/main/webapp/static/js/jQueryUI/jquery-ui.js
|--- dspace-jspui/dspace-jspui-webapp/src/main/webapp/static/js/jQueryUI/jquery-ui.js Base (BASE)
|+++ dspace-jspui/dspace-jspui-webapp/src/main/webapp/static/js/jQueryUI/jquery-ui.js Locally Modified (Based On LOCAL)
--------------------------
File to patch:
在我退出补丁过程后,如果我做
cd dspace-1.7.2/dspace-jspui/dspace-jspui-webapp/src/main/webapp/static/js/jQueryUI
我明白了:
-bash: cd: dspace-1.7.2/dspace-jspui/dspace-jspui-webapp/src/main/webapp/static/js/jQueryUI: No such file or directory
这是我在开发过程中添加的文件夹之一,证明patch并没有创建这些新文件夹。
【问题讨论】:
你能显示部分或全部patch.diff吗?我不知道 NetBeans 是如何生成补丁的,但是如果你在文件系统中添加一个文件或目录并且不告诉 subversion 应该添加它,它就不会出现在 CLI 客户端生成的补丁中。跨度> 我尝试通过 svn add * -- force 添加我修改后的目录中的所有文件,然后我执行了 svn diff > patch.diff 命令。不幸的是,我无法在此处发布差异文件,因为它是一项学术工作,只能在审查后发布...... :( 我认为您可能需要在结帐时手动创建目录和文件 - 进一步考虑这一点,我认为 subversion 不支持在patch - svn diff 只列出文本差异。 是的,我试试。我将创建一个仅包含我的新目录的“覆盖”目录结构,并将其从 svn checkout 复制到根 dspace 目录。 它确实支持添加二进制文件,只是不为它们生成补丁。 【参考方案1】:如果生成补丁,其中必须包括添加新文件/目录,对于纯颠覆 CLI,您必须将 --git
选项添加到 svn diff
命令
【讨论】:
以上是关于创建包含新目录的 SVN 补丁的主要内容,如果未能解决你的问题,请参考以下文章
我应该如何构建我的插件开发以及如何将补丁应用于 svn 中的补丁?