Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 版本控制:多版本地狱,文件同步_C++_Git_Version Control - Fatal编程技术网

C++ 版本控制:多版本地狱,文件同步

C++ 版本控制:多版本地狱,文件同步,c++,git,version-control,C++,Git,Version Control,我想知道您通常如何处理这种情况: 我有一套实用函数。比如说..5..10个文件。从技术上讲,它们是静态库、跨平台的SConscript/SConstruct加上VisualStudio项目(不是解决方案) 这些实用功能用于多个小型项目(15+,数量随时间增加)。每个项目都有几个文件或整个库的副本,而不是指向一个中心位置的链接。有时项目使用一个文件,两个文件,有些使用所有文件。通常,实用程序函数包含在每个文件和SConscript/SConstruct或VisualStudio项目的副本中(取决于

我想知道您通常如何处理这种情况:

我有一套实用函数。比如说..5..10个文件。从技术上讲,它们是静态库、跨平台的SConscript/SConstruct加上VisualStudio项目(不是解决方案)

这些实用功能用于多个小型项目(15+,数量随时间增加)。每个项目都有几个文件或整个库的副本,而不是指向一个中心位置的链接。有时项目使用一个文件,两个文件,有些使用所有文件。通常,实用程序函数包含在每个文件和SConscript/SConstruct或VisualStudio项目的副本中(取决于具体情况)。每个项目都有一个单独的git存储库。有时一个项目是从另一个项目派生出来的,有时不是。 你对每一个都进行随机排序。没有其他人(使事情更简单)

在处理一个项目时,修改这些实用程序功能文件时会出现问题。
由于每个项目都有一个文件副本,因此会引入新版本,这会导致以后(例如,一周后)尝试猜测哪个版本具有最完整的功能时出现混乱(即,您在一个项目中向a.cpp添加了一个函数,在另一个项目中向a.cpp添加了另一个函数,从而创建了一个版本分叉)

你将如何处理这种情况以避免“版本地狱”? 我能想到的一种方法是使用符号链接/硬链接,但这并不完美——如果你删除一个中央存储,它将全部消失。硬链接在双引导系统上不起作用(尽管符号链接会起作用)。 看起来我需要的是类似AdvancedGitRepository的东西,其中项目的代码存储在一个本地存储库中,但与多个外部存储库同步。但是我不知道如何做,或者是否可以用git来做


那么,您认为呢?

通常的简单方法是将库作为项目放在您的版本控制中,如果有修改,则只编辑此项目


然后,其他需要库的项目可以从库项目中获得所需的文件。

在Subversion中,您可以使用externals(我知道这不是GIT,但这些提示可能仍然有用)。这就是它的工作原理:

  • 将特定于应用程序的代码(\MYAPP)从通用代码(\common)中拆分
  • 从应用程序中删除所有副本;他们应该只使用通用代码
  • 通过在\MYAPP中将\common添加为外部,在应用程序中引入公共代码
您还可能拥有应用程序的版本。还将介绍通用代码中的版本。因此,您的应用程序将在存储库中包含以下文件夹:

  • \MYAPP\TRUNK
  • \MYAPP\V1
  • \MYAPP\V2
类似地,使用版本号向公共代码添加版本,如下所示:

  • \公共\主干
  • \通用\V1
  • \公共\V2
或者使用日期,如下所示:

  • \公共\主干
  • \普通\2010年1月1日
  • \普通\2010MAR28
显然,\MYAPP\TRUNK的外部应该指向\COMMON\TRUNK

尝试将公共代码的版本与应用程序的版本同步,以便每次应用程序版本固定时,公共代码也固定,并且应用程序版本将指向相关的外部公共代码

例如,\MYAPP\V1的外部可能指向\COMMON\2010JAN01

这种方法的优点是每个开发人员现在都可以扩展、改进和调试公共代码。缺点是应用程序的编译时间会随着通用代码的增加而增加

替代方案(在版本系统中放置库)的缺点是,公共代码的管理(扩展、改进、调试)总是与应用程序的管理分开进行,这可能会阻止开发人员编写通用的公共代码(每个人都开始编写自己版本的“泛型”类)。
另一方面,如果您有一个明确而灵活的团队专门负责公共代码,那么在最后一个备选方案中,公共代码将受到更好的控制。

我并不完全清楚您想要什么,但git子模块可能会有所帮助:

在配置(一般)术语中,解决方案是拥有多个中继(分支机构):

  • 发布
  • 集成
  • 发展
发布
此主干/分支包含已通过质量保证且可发布给客户的软件。发布后,所有文件都标记为“只读”。将为这些文件提供一个标签,以识别带有发布号的文件

测试专家将定期或按需从集成主干中获取最新(tip)版本,并提交给严格的质量测试。这就是集成版本升级为发布版本的方式

集成
此主干包含最新的工作代码。它包含错误修复和新功能。文件应在每个错误修复或新功能后进行标记

在bug通过质量测试或新功能完全开发(并测试)后,代码被移入集成分支。这里的一个好主意是在集成开发人员的代码之前用临时标签标记集成版本

发展 这些是开发人员为修复bug或开发新功能而创建的分支。这些分支可以是移动到本地计算机上的所有文件的副本,也可以是需要修改的文件的副本(带有指向所有其他文件的集成主干的链接)

在中继之间移动时,代码必须通过资格测试,并且必须有移动到中继的权限。例如,unwarr