如何在git上建立一系列相关项目

时间:2014-07-11 23:35:52

标签: git

我是git的新手,正在为我参与开发的数字运算应用程序设置一个存储库。

基本思想是最终拥有类似

的文件夹结构
|-- Code for application A
  |-- header
  |-- src
  |-- objdir

我希望能够支持Windows,Linux和Mac版本的应用程序。核心代码在平台上做同样的事情,但是现在我必须重新组织项目:

Application A
|-- Windows
  |-- Code for application A
      |-- header
      |-- src
      |-- objdir
  |-- Windows specific code
|-- Mac
  |-- Code for application A
      |-- header
      |-- src
      |-- objdir
  |-- Mac specific code
|-- Linux
  |-- Code for application A
      |-- header
      |-- src
      |-- objdir
  |-- Linux specific code

我的设置的工作流程是每个人都使用不同的操作系统,所以我们经常会在Windows文件夹中说出材料,然后在“Code for application A”文件夹中试验这些内容,但至少最初会喜欢独立于其他文件夹中的内容。如果因使用Windows版本而导致的“应用程序代码A”中的更改似乎可行,那么我们将该解决方案移植到其他文件夹(例如,“Linux / Code for application A”)。

我想知道使用git在单个存储库中设置所有这些内容的最自然方式是什么。

我认为为每个版本保留单独的存储库会变得难以处理,并且保持某种迹象表明这些只是同一应用程序A的不同版本会很好。

我们曾经使用subversion和滥用分支来实现这一点(允许我们为每个版本提供不同的工作目录),但现在已经决定迁移到git,将不同版本视为分支似乎是错误的。

我读过子模块是一个坏主意,我想知道人们是否有这样的经历/想法?

1 个答案:

答案 0 :(得分:1)

Git 在分支和合并方面比 SVN 更好(并且更容易(和更快)),git-flow建议使用分支处理每个新功能然后在功能完成时合并(如果分支不工作或放弃,则丢弃分支)

因此,假设您的应用程序代码A 是跨平台的,并且可以在平台之间共享:

应用程序A 项目

创建一个git repo

应用程序代码A 创建第二个git repo,并在主要的每个OS项目中将其用作子模块(或子树)回购,以避免重复。

然后,无论何时进行Windows测试,您都可以在主中创建测试分支(例如: win-test-refactoring )应用程序A repo,它将Windows文件夹中的代码应用程序A 子模块指向他自己的测试分支。

这样,如果测试不起作用,你可以摆脱测试分支,一切都会恢复正常。或者,如果它正在按预期运行,并且需要与其他平台共享,则可以将测试分支与开发分支合并(在两个存储库中)以包含主线中的新功能,并将其分享到引用libray的任何文件夹

Application A (main git repo in its 'testFOO' branch)
|-- Windows
    |-- Code for application A (submodule in its own 'testFOO' branch)
      |-- header
      |-- src
      |-- objdir
  |-- Windows specific code
|-- Mac
  |-- Code for application A (same submodule in its own 'develop' branch)
      |-- header
      |-- src
      |-- objdir
  |-- Mac specific code
|-- Linux
  |-- Code for application A (same submodule in its own 'develop' branch)
    |-- header
    |-- src
    |-- objdir
  |-- Linux specific code