我们正在考虑从SVN迁移到Mercurial,并遇到了绊脚石.
我们目前使用svn:externals自动将一组通用库拉入工作目录.我在Mercurial找不到这样的支持.
有没有办法用Mercurial自动执行此操作,还是我需要在构建过程中伪造它?
这是我目前用于我的svn项目的工作流程(我从不使用svn分支,有些项目也被其他人积极处理):
git svn fetch可能需要数小时的初始值.还要创建一个"构建"分支.git clone srv://project.git, git checkout build然后git update-refs ..., git svn fetch恢复到svn存储库的链接git push build服务器并在Hudson中为该分支触发构建git checkout master, git merge build, git svn dcommit, git push, git checkout build, git rebase master, git push build输入svn externals.我已经在这里尝试了每个脚本,但所有脚本都失败了.我的外部设置如下:
/path/to/x x
/path/to/y/z y/z
/path/to/a/b.file a/b.file
Run Code Online (Sandbox Code Playgroud)
并且脚本执行诸如尝试/path/to/x在文件系统的根目录中创建的内容git svn fetch /path/to/x.单个文件似乎也会导致更多问题.(子问题1:这些脚本的svn:externals格式是为什么编写的?)
它似乎很难修改其中一个脚本来处理我的情况并复制我正确的目录结构,但后来我遇到了一个主要问题:如果我更改了x和y/z中的文件目录,我没有看到将其加入单个svn提交的方法,这是我开始首先使用git的原因之一.
因此,问题是:有没有办法可以复制上述工作流程,只使用某个svn存储库的某些部分,这样我就能在root中执行svn dcommit?我更喜欢一个可以在linux和windows上运行的现成解决方案.
编辑我很快就通过我找到的一个脚本入侵了它,并使它复制了svn externals的目录结构.我不能克隆单个文件,这里是输出:
git svn clone -r HEAD …Run Code Online (Sandbox Code Playgroud) 这对tortoiseSVN有可能吗?:
始终冻结svn:externals标签
方案是我们的主干将始终使用'HEAD'修订版的外部,但是当我们创建'标签'时,我们希望他们有一个外部版本设置,以便在特定时间点正确"冻结"它们.
更新
感谢大家的反馈/信息.
因为我无法找到任何东西,将完全满足我们的需求(尝试smartsvn和svncopy.pl)我做了,到目前为止已经通过了所有我们的测试情况下,一个控制台应用程序.
高级概述:应用程序获取存储库URL然后查找所有外部因素并为它们添加最后一次提交修订 - 我执行svn info并获取"提交修订".
该应用程序适用于文件夹和单个文件外部.
以下是源代码和完整的安装文件:http: //svnxf.codeplex.com/
我有一个干净的分支结账(没有修改),但是我无法将主干重新集成到我的分支中,因为SVN认为我有一个混合版本的工作副本:
c:\myproject> svnversion
2045:2047
Run Code Online (Sandbox Code Playgroud)
问题似乎是由我的一个外部因素造成的:
c:\myproject> svn propget svn:externals tools
-r1448 ^/tools/external/trunk/gandalf/bin gandalf/bin
-r1508 ^/tools/external/trunk/gandalf/include gandalf/include
-r1508 ^/tools/external/trunk/gandalf/lib gandalf/lib
-r1428 ^/tools/external/trunk/jsdb jsdb
-r2045 ^/tools/external/trunk/java/lib/jing.jar jing.jar
Run Code Online (Sandbox Code Playgroud)
您会注意到它们都是目录外部而不是单文件外部,除了jing.jar,这与"svnversion"认为是我工作副本的最低范围的版本相同,这应该是干净的结帐r2047.
我该如何解决这个问题(除了不使用单文件外部)?
我已经尝试过更新,新的签出和svn清理,它仍然有这个问题.我正在使用TortoiseSVN 1.6.12
基本上我必须在同一台服务器上回购:
svn://repo/foo
-> checked out to d:\foo
svn://repo/bar
-> d:\foo has an svn:external property set to check this out into d:\foo\bar
Run Code Online (Sandbox Code Playgroud)
当"svn:update"或新的"svn:checkout"时,这是错误的要点:
Command - Update
Updated - D:\foo
External - D:\foo\bar
External failed - D:\foo\bar
Error - d:\foo\bar is already locked via d:\foo
Run Code Online (Sandbox Code Playgroud)
在我"清理"或手动释放锁定后,问题仍然存在.
任何见解将不胜感激.谢谢!
更新:
阿提拉在评论中钉了它.我在存储库中存在"foo/bar".
供将来参考 - 当使用SVN:外部属性时,SVN 将为外部参考创建目标文件夹.
当你签出一个包含svn externals的git存储库时,它会忽略它们.人们所做的是创建许多脚本,其中许多脚本在这个问题中提到我如何使用git-svn保持svn:external是最新的?.问题是虽然许多脚本都浮在互联网上,但我还没有找到一个实际上很强大的脚本.通过健壮,我的意思是:
因为这些是我的存储库的2个问题,似乎会导致大多数脚本失效.我没兴趣使用smartgit.
有这样的剧本吗?有没有人有一个"几乎存在"的脚本可以很快适应这两件事?
我的情况:我有几个组件,有时会对它们进行更改,并在很多不同的项目中共享.每个项目都将这些文件放在名为/ depends的子文件夹中.依赖包含所有常见组件的一堆svn外部.
svn:externals给我带来了很多时间和痛苦.
请记住,我有几个项目(让我们说这个讨论每个使用相同的外部代码10),因此为每个项目保留正常的已提交目录将花费我很多合并时间.
对我的情况有更好的选择吗?
我想在我的项目中使用SVN外部包含许多第三方插件.我发现这篇博客文章建议将svn:externals值保存在一个带有目标/源对的文件(名为svn.externals)中,如下所示:
akismet http://svn.wp-plugins.org/akismet/trunk
all-in-one-seo-pack http://svn.wp-plugins.org/all-in-one-seo-pack/trunk
Run Code Online (Sandbox Code Playgroud)
并使用该-F标志来设置属性,如下所示:
svn propset svn:externals -F svn.externals
Run Code Online (Sandbox Code Playgroud)
我从啤酒星球上得到了上述信息.
现在来问问题.SVN是否支持评论格式,允许我评论此svn.externals文件?我想将外部存储库分组libraries, widgets等等.另外,我正在考虑添加有关如何为文件顶部的开发人员更新此文件/属性的说明.例如,假设#开始评论:
# README: When updating svn:externals
# 1. Update and save this file
# 2. Run 'svn propset svn:externals -F svn.externals
# 3. Commit 'svn ci -m "plugin XXXXXXXX added to svn:externals"'
# wp plugins
wp/content/plugins/akismet http://svn.wp-plugins.org/akismet/trunk
wp/content/plugins/all-in-one-seo-pack http://svn.wp-plugins.org/all-in-one-seo-pack/trunk
# jquery + plugins
js/jquery http://jquery-ui.googlecode.com/svn/trunk
# etc etc (this is just a random example of my idea)
Run Code Online (Sandbox Code Playgroud)
- …
svn-externals ×10
svn ×9
git ×2
tortoisesvn ×2
externals ×1
file ×1
git-svn ×1
mercurial ×1
merge ×1
workflow ×1