如何分行SVN单个文件?(How do I branch an individual file in

2019-07-30 17:24发布

分支的颠覆概念似乎着力打造整个存储库上做开发的(联合国)稳定叉。 有用于创建单个文件的分支机制?

对于一个用例,认为有多个平台特定的源(* .c)中实现一个共同的报头(* .h)文件中的。 这种类型的分支是永久性的。 所有这些分支会看到偶尔跨部门合并的持续发展。 与此形成鲜明对比,所述通常具有有限的寿命不稳定的发展/稳定释放分支。

不想分支整个库(便宜与否),因为它会造成维护的不合理量躯干和各分支机构之间不断融合。 目前我使用ClearCase的,它具有分支,使得这个简单的不同的概念。 我一直要求考虑过渡到SVN,但这种模式的区别是非常重要的。 我很了解能够轻松地创建备选版本比这样的事情切割的稳定版本分支单个文件更加关注。

Answer 1:

可悲的是,我认为这里的真正的答案是,ClearCase的处理这种情况有很多颠覆比好。 颠覆,你有分支的一切 ,但ClearCase的允许一种“懒分支”的想法,这意味着只有一组特定的文件都支,剩下的人仍然遵循(指定或任何分支)的主干。

这里提供的其他解决方案都没有真正的工作,你打算,他们只是将文件复制到不同的路径。 现在,你需要做奇怪的事情实际使用该文件。

呃,抱歉。 这是不是一个真正的很好的答案。 但是,没有一个很好的解决这个与颠覆。 它的型号是分支和合并。

编辑:好了,什么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圣你会看到:

svn st
    S  file.h

有点吵一点。 而当你不希望向大源存储库中的几个文件或模块就会开始变得非常混乱。

实际上,有可能是一个不错的项目在这里模拟类似的ClearCase的分支的文件与SVN性质和交换,写周围的沼泽标准svn客户端的包装处理所有的烂摊子。



Answer 2:

您没有分支整个库。 你可以让你的项目文件夹的分支(如包括文件夹)。 正如其他人所指出的那样,你也可以做一个单一的文件中“复制”。 一旦你有一个文件或文件夹的副本,你的“开关”的分支文件或文件夹的分支版本。

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

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

然后,你可以切换该文件使用branches_files库路径



Answer 3:

这里是我理解您的问题。 您有以下三种:

time.h
time.c

你需要,从而拒绝对多种架构:

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

另外,在当前的VCS,您可以根据需要创建从time.c许多分支做到这一点,当你从VCS检出文件,您自动检查从普通主干上的最新time.h中和最新time.c从分支您正在使用的。

您所关心的问题是,如果你检查出一个分支时,使用SVN,你将不得不合并从主干经常或风险上的旧文件工作(相对于主干)开销的量是不能接受的time.h中给你。

根据您的源代码的结构,有可能是一个解决方案,但。 假设你有

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

然后,你可以分支/,并使用SVN:外部组件功能将标题链接到躯干的头。 它仅适用于目录,并承担一定的局限性关于承诺回到test.h(你必须在标题目录中去,它的工作),但它可以工作。



Answer 4:

一个Subversion“分支”只是在你的档案库里的东西拷贝。 所以,如果你想分支你只是做一个文件:

svn copy myfile.c myfile_branch.c


Answer 5:

我不认为这是在分支单个文件多点? 有没有办法与主干代码来测试它?

如果你想取消变动,稍后应用它们,你可以采取一个补丁来代替。



Answer 6:

你确定你真的需要在您的VCS这个功能吗?

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

就像是:

// foo.h:
void Foo();

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

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

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



Answer 7:

在SVN分支仅仅是一个副本。 我认为,要做到这一点你希望,你必须拥有该文件的每个版本在仓库的一个单独的目录的方式,并检查它到你的源文件夹。 IE像对待一个单独的项目文件。



Answer 8:

在Subversion,分支正是你在说什么。 所有的文件都是躯干的精确副本,你改变的人除外。 这是“山寨”的方法谈到SVN书的。 唯一需要注意的是,从时间合并到主干分支时间,以确保所做的更改也将反映在分支机构的需要。 当然,如果这些变化不理想,没有trunk->分支合并需要发生。

一个简单的方法,以允许主干更改为自动(它模拟透明外壳范例)合并的将是使用pre-commit钩子脚本合并在之前提交。(其实,这始终是一个主干变化好的策略,以防止码漂移)。



文章来源: How do I branch an individual file in SVN?