颠复概念的支出将重点放在创建一个[联合国]稳定叉的整个储存库对其要做发展。是否有一个机制,用于建立分支机构为单独的文件?

对于使用的情况下,认为的一个共同的标题(*.h)的文件,具有多种特定平台源(*.c)实现的。这种类型的分支是一个永久性的一个。所有这些分支机构会见持续发展与偶然的跨部门合并。这是在与不稳定的发展/稳定释放其分支机构一般都具有有限的使用寿命。

不不 想要支整个储存库(便宜或不是),因为它会造成不合理的数量维持不断合并之间的中继线和所有分支机构。现在我用,其中有一个不同的概念的分支,使得这个容易的。我已经要求考虑过渡到SVN但这种模式的差异是重要的。我更关心的是能够很容易地建立备用版本为单独的文件比关于的事情就像切一个稳定释放的分支。

有帮助吗?

解决方案

可悲的是,我认为这里真正的答案是ClearCase比Subversion更好地处理这种情况。使用subversion,你必须分支所有,但ClearCase允许一种“懒惰分支”。这意味着只有一组文件被分支,其余的仍然跟随主干(或你指定的任何一个分支)。

此处提供的其他解决方案并不像您想要的那样真正起作用,它们只是将文件复制到不同的路径。现在你必须做一些奇怪的事情来实际使用该文件。

呃,对不起。那不是一个非常好的答案。但Subversion没有一个很好的解决方案。它的模型是分支和合并。

编辑:好的,所以扩展了crashmstr所说的内容。你可以这样做:

svn cp $REP/trunk/file.h $REP/branched_files/file.h
svn co $REP/trunk
svn switch $REP/branched_files/file.h file.h

但是哇!是容易出错的。每当你做一个svn st,你会看到:

svn st
    S  file.h

有点吵。当你想在一个大型源代码库中分支一些文件或模块时,它将开始变得非常混乱。

实际上,这里可能有一个不错的项目用于模拟ClearCase的分支文件,包括svn属性和切换,在bog标准svn客户端周围编写一个包装器来处理所有混乱。

其他提示

您不必分支整个存储库。您可以在项目中创建文件夹分支(例如包含文件夹)。正如其他人所说,你也可以做一个“复制”。只有一个文件。获得文件或文件夹的副本后,即可“切换”文件或文件夹。到分支文件或文件夹以处理分支版本。

如果在存储库中创建单独的分支文件夹,则可以通过服务器端命令复制分支文件:

svn copy svn://server/project/header.h svn://server/branched_files/header.h

然后您可以切换该文件以使用 branches_files 存储库路径

这里是我明白你的问题。你有以下树:

time.h
time.c

和你需要的下降,它对多个架构:

time.h is comon
time.c (for x386), time.c (for ia64), time.c (for alpha),...

还在你目前的风险可以通过创造许多分支机构从时间。c根据需要及时结账的文件版本控制系统自动检查最新的时间。h从普通干线和最新的时间。c从分支。

该问题感到关切的是,如果使用SVN检查出来的时候一个分支将需要合并的时间。h从树干经常的或危险的工作在一个较早的文件(作为比较干线)这一数额的开销是不可接受的。

根据该结构的源代码,可能有一个解决方案。想象一下,你有

 
/
/headers/
/headers/test.h
/source/
/source/test.c

然后你可以分,并使用 svn:外部 功能的链接头的躯干。它只是工作上的目录,并承担一定的局限性方面的承诺回来检验。h(你必须去的头目录它的工作),但它可以工作。

Subversion“分支”只是存储库中某些内容的副本。因此,如果您想要分支文件,您只需执行以下操作:

svn copy myfile.c myfile_branch.c

我不认为分支单个文件有多大意义?没有办法用中继代码测试它?

如果您想退出更改并稍后应用更改,则可以修改补丁。

您确定在VCS中确实需要此功能 吗?

为什么不使用C预处理器和#ifdef远离你不需要的代码?或任何类似的工具。

类似的东西:

// foo.h:
void Foo();

// foo_win32.c
#ifdef _WIN32
void Foo()
{
   ...
}
#endif

// foo_linux.c
#ifdef _GNUC
void Foo()
{
   ...
}
#endif

有时如果它不合适,那么这不是正确的解决方案。

SVN中的分支只是一个副本。我相信,按照您希望的方式执行此操作,您必须将文件的每个版本放在存储库中的单独目录中,并将其签出到源文件夹中。 I.E.将该文件视为一个单独的项目。

Subversion中的一个分支正是你所说的。所有文件都是主干的精确副本,但您更改的文件除外。这是“便宜的副本”。在SVN书中谈到的方法论。唯一需要注意的是需要不时将主干合并到分支中,以确保在那里进行的更改反映在分支中。当然,如果不希望这些更改,则不需要发生trunk->分支合并。

允许自动合并主干更改(模拟Clear Case范例)的一种简单方法是使用预提交钩子脚本在提交之前合并主干更改。(事实上,这始终是防止代码漂移的好策略。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top