标签: externals

svn externals ...是或否?

我在这里读了几个答案,谴责使用svn:externals.我确实看到它们如何被滥用,它确实让我们更加依赖Subversion,但我真的没有看到我们的团队很快就会离开它.

无论如何,这是我的困境.我们的解决方案引用了多个项目,这些项目位于存储库的各自部分.其中许多项目在多个解决方案之间共享,我们也不希望阻止共享我们的项目.我们还在我们的存储库(单元测试框架,库等)中检查了几个固定版本依赖项.

我想配置一些只使用外部的"工作空间"(就Subversion而言,它们只是空目录,或者可能只包含一个解决方案文件)来为我们的开发人员配置解决方案.单独检出大多数项目将不足以构建它们,但是检查它的工作区将足以构建它,因为它的所有依赖项都将随附它.有没有其他人实现过类似的解决方案,并且svn:externals是一个很好的方法来解决这个问题?如果我们走这条路,你对我有什么谨慎的话?

基本上结构看起来像这样(为了简洁省略了trunk/branches/tags):

/projects
   /project1
   /project2
/dependencies
   /xUnit
      /1.5
      /1.4
   /NHibernate
      /2.1.0
      /2.0.1
/workspaces
   /project1
      /project1 (external to ^/projects/project1)
      /xUnit (external to ^/dependencies/xUnit/1.5)
      /NHibernate (external to ^/dependencies/NHibernate/2.0.1)
   /project2
      /project2 (external to ^/projects/project2)
      /xUnit (external to ^/dependencies/xUnit/1.4)
      /NHibernate (external to ^/dependencies/NHibernate/2.1.0)
Run Code Online (Sandbox Code Playgroud)

svn version-control externals

5
推荐指数
1
解决办法
1092
查看次数

调整svn:externals用法以移动到Mercurial

我们在企业环境中有一个svn存储库结构,如下所示:

root
  libs
    shared_lib1
    shared_lib2
    private_lib
  public_code
  private_code
Run Code Online (Sandbox Code Playgroud)

其中public_code是一个外部存储库,它是开源的,公司外部的人员具有读写访问权限.shared_lib1和shared_lib2也是与另一家公司的不同程序员组共享的外部存储库.我是维护者,基本上可以做任何技术上最好的,外部用户必须适应.

我现在想知道从这个结构转移到mercurial存储库的最佳方法是什么.

1)我可以使用mercurial子存储库来密切模拟旧的设置.或者
2)我可以为我们制作一个大型仓库,为外部合作伙伴创建三个新的小型独立存储库(基本上是分支项目),并在大型和独立的交换机之间交换变更集.

使用svn中的setup 1),分支是一场噩梦,因为当我分支root时,策略总是必须分支public_code,shared_lib1和shared_lib2.为此,我必须调用svn分支四次并手动修改svn:externals属性三次.我可以轻松地将主仓库分支到mercurial并自动获取所有子仓库的新分支吗?

当我设置2)时,repos之间的文件系统会有所不同.例如,我将在repo"root"中使用public_code/Makefile,但该文件将只是repo"public_code"中的"Makefile".Mercurial仍然能够同步回购之间的变化吗?工作流程怎么样?

svn mercurial branch externals subrepos

4
推荐指数
1
解决办法
1212
查看次数

"svn:externals"有什么好处?

如果我没有碰到这个页面,我就不会知道svn:externals .所以,我设置了我的工作文件夹.然后

mkdir lib/vendor
svn add --parents lib/vendor
svn ps svn:externals 'symfony http://svn.symfony-project.com/branches/1.4/' lib/vendor/
svn ci -m "add externals"
svn update
Run Code Online (Sandbox Code Playgroud)

"svn update"列出了整个symfony文件夹并且非常慢.我以为这会是一次性的痛苦.但是,每次输入"svn up"时,SVN都会检查外部存储库.我必须使用--ignore-externals来使"svn update"足够快.

我想知道svn:externals有什么好处,如果它太慢了.我宁愿将symfony复制到我自己的存储库,这肯定是一个更快的解决方案.

svn externals svn-externals

3
推荐指数
1
解决办法
1820
查看次数

奇怪的TCL怪癖

因此,我对TCL编程的方式非常新,缺乏经验.我写了一个脚本,调用别人写的proc,首先删除输出文件.然后我做了一些我写的额外逻辑.

我将逻辑移动到第二个过程中,并立即将其中的一堆(即rm命令)打破.

据我所知,中央执行中的第一个程序(proc定义后面的文本)在没有"exec"命令的情况下正常执行.但是,如果你在proc中移动它,它现在需要一个"exec"命令.

任何人都可以向我解释为什么TCL这样做?

例如

proc helloworld {} {
  puts "hi"
}
#works
rm my_file 
helloworld
Run Code Online (Sandbox Code Playgroud)

..

proc helloworld {} {
  #doesn't work
  rm my_file 
  puts "hi"
}
helloworld
Run Code Online (Sandbox Code Playgroud)

..

proc helloworld {} {
  #works
  eval rm my_file 
  puts "hi"
}
helloworld
Run Code Online (Sandbox Code Playgroud)

..

proc helloworld {} {
  #works
  file delete my_file 
  puts "hi"
}
helloworld
Run Code Online (Sandbox Code Playgroud)

*请注意,这种奇怪的行为可能是特定于我将脚本提供给vmd的程序,后者具有自己内置的TCL行为.也许在您的回复中,您可以指出这是否也是其他口译员的标准?

interpreter procedure tcl externals

1
推荐指数
1
解决办法
213
查看次数