svn - 如何以这样的方式将两个任意修订值相比较,以便将差异应用于SVN工作副本

  显示原文与译文双语对照的内容

记录系统是一个SVN库,但是出于任何原因,我将存储库拉到了Mercurial中。 因为不建议创建额外的克隆和分支等等,所以我不希望使用hgsubversion扩展。

我希望能够做我自己的开发,然后我希望,然后应用一个巨大的修补程序( 或者小补丁),我的with 。

所以我有:


/dev/repos/hg/project/master
/dev/repos/hg/project/master-feature-foo
...

在Mercurial方面和在SVN方面,我有:


/dev/repos/svn/project

我想能够覆盖我的SVN工作副本,/dev/repos/svn/project, 和我的,工作副本的内容,说/dev/repos/hg/project/master-feature-foo.

哪些Mercurial和SVN命令有助于? 我正在查看,log和TortoiseSVN的文档,现在我还没有找到解决方案,但我还没有找到解决方案。

时间: 原作者:

你有几个选项可以将提示传送到svn目录:

hg差异&补丁:


cd/svn/working/copy
hg -R/hg/working/copy -r svn.15500:tip | patch -p1`

复制已经更改的文件


#!/bin/bash
REV=$1
HG=/hg/working/copy

cd/svn/working/copy

# copy changed files, tar is used instead of cp to preserve file paths
hg -R $HG st --rev $REV:tip -man0 | xargs -0 tar -cC $HG | tar x

# add new files, cuses warnings if there are no new files
hg -R $HG st --rev $REV:tip -an0 | xargs -0 svn add

# remove deleted files, will cause warnings if there are no deleted files
hg -R $HG st --rev $REV:tip -rn0 | xargs svn rm

另一种方法是使用 tortoisehg,其中可以使用rebase扩展克隆。 这将是以下工作流:


hgimportsvn http://svn.server/repo/trunk
cd trunk
hgpullsvn
cd.. 
hg clone trunk work
cd work
#Hack Hack Hack

cd.. /trunk
hgpullsvn
# if there are new revisions rebase.. /work before pull
hg pull.. /work
hgpushsvn

#rebase
cd work
hg pull --rebase

原作者:

我最后做的是相当蹩脚的( 我觉得) 。 我的目标是获取我的Mercurial存储库的内容,并用( 以后我可以把它们提交给 SVN ) 覆盖我的SVN工作拷贝。 我不太关心来自Mercurial的变更的详细历史- 提交将在 SVN repo 中是"卷起"。

非工作方法,A1: 删除SVN工作拷贝内容,然后复制到Mercurial工作副本。

会不起作用因为。 svn 文件夹被破坏。

Working: 使用查找命令从SVN工作拷贝中删除除. SVN 文件夹以外的所有内容。 然后只复制Mercurial工作拷贝。 SVN将检测到更改并允许我提交。

方法 A2: 1. 如果目录为空,Mercurial将不会跟踪这些目录,但它们将位于SVN知识库中。 3 。在SVN端丢失Mercurial历史。 因为SVN元数据并不像。那样丰富,所以你可以能不能做到这一点。 4.只有当一个开发人员在in中提交时才有好处。 如果有多个开发人员正在提交,那么你必须与所有的更改同步,包括同步所有的变更。

方法A2的优点:

1 ) 很容易。

在svn工作拷贝 root 中,运行以下命令:


# delete all files in an SVN working copy, except those
# in the. svn folders; directories are not deleted
find. -path"*.svn" -prune -o -type f -exec rm -v {} +

使用文件管理器将Mercurial工作拷贝内容拖到SVN工作拷贝( 你可以为此使用脚本) 中。

使用TortoiseSVN提交( 你可以通过以下方式轻松验证所有更改) 。

这样的话,我将接受以前的答案,因为它可能是正确的方法。

原作者:
...