我想将一个subversion项目(/ signature_paper)复制到另一个subversion项目(/ thesis)的子目录中。我将在/ thesis / signature_paper中进行更改,这些更改不会再回到原始签名文件中。同时,我希望/ thesis / signature_paper能够获取/ signature_paper中所做的大部分或全部更改。
理想情况下,我希望将其作为单个颠覆项目进行检查,即svn co http://blah/thesis论文为我提供了全部内容,包括/ thesis / signature_paper。
我不确定分支和定期合并来自/ signature_paper是否可以为我做到这一点,也不知道如何做到这一点。几年前我在Clearcase中使用过分支,但从未建立过我自己的分支。我最初没有使用/ trunk设计就设置了我们的svn存储库。我通常使用命令行客户端,但如果有帮助,可以使用Tortoise。
有没有简单的方法来实现这一目标?我上次有这种需要时定期手动重新制作一个类似的项目(将一篇不断发展的论文提取到一个更大的文档中),这真的很痛苦。
编辑:
嗯,那么只做以下事情就可以了吗?
%cd论文
%svn co blah / signature_paper
% 找 。 -name .svn -exec rm -rf {} \;
%svn添加signature_paper
然后使用svn merge从/ signature_paper到/ thesis / signature_paper?
答案 0 :(得分:2)
确保对要合并的更改进行“单个”提交。 How to merge only specific revisions解释了如何“同步”您的文档。将文本拆分为几个子文档可能会有所帮助。 Subversion强制没有目录布局,您可以自由地创建最适合您的目录布局。
最简单的方法是将常用文本部分隔离到单独的文件中,放在公共文件夹中。这些段落包含在您的论文或论文的\ input {name}中。
如果您不能或不想维护公共文件,则需要合并论文和论文以交换内容。我有两个大文件。由于您可能没有同步所有内容,因此要合并的更改将进入“修订版”。换句话说,您的工作副本是最新的。您应用更改并进行提交。接下来,将此精确修订与其他文档合并。
-trunk
--thesis
--paper1
--paper2
- 普通
答案 1 :(得分:2)
您可以使用svn:externals
进行设置,如果您不修订修订号,则会使用结帐的其余部分进行更新。请确保不要从外部目录提交(与update
相反,commit
不提交svn:externals
我相信,但您可能想要测试
示例,有关详细信息,请参阅the documentation on svn:externals
:
$ svn co http://blah/thesis
$ cd thesis
$ svn ps svn:externals 'signatur_paper http://blah/signature_paper' .
$ svn up
Fetching external item into 'signature_paper'
A signature_paper/
....
Updated external to revision N.
Updated to revision N.
$ svn info .
....
URL: http://blah/thesis
....
$ svn info signature_paper
....
URL: http://blah/signature_paper
....
更新提取外部:
$ svn up
Fetching external item into 'signature_paper'
External at revision N.
At revision N.
除非您在目录中明确这样做,否则提交不会从外部提交:
$ touch signature_paper/test
$ svn add signature_paper/test
A signature_paper/test
$ svn ci -m'test'
//nothing happens.......
$ svn ci -m'test' signature_paper/
Adding test
Transmitting file data .
Committed revision N.