2014-07-11 41 views
1

一系列相关的项目我是新来的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文件夹中说出材料并尝试使用“应用程序A代码”文件夹中的内容,但至少最初希望独立于其他文件夹中的内容。如果由于与Windows版本混淆而导致的“应用程序代码A”的更改似乎可行,那么我们会将该解决方案移植到其他文件夹(例如,“Linux /应用程序A的代码”)。

我不知道什么是对去使用Git设置这一切在单一存储库中最自然的方式。

我想保持独立的存储库,每个版本将得到笨拙,这将是很好的保持某种指示,这些都是

我们以前用的颠覆相同的应用程序A的只是不同版本滥用分支机构来让这个工作(让我们为每个版本有不同的工作目录),但现在决定迁移到git,将不同版本视为分支似乎是错误的。

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

回答

1

的Git是分支与合并比SVN这样更好(更容易,速度更快),它是由git-flow建议使用分支机构对每一个新功能的工作那么当该功能完成合并(或放弃分支,如果它不能正常工作或abandonned)

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

创建为一个混帐回购协议应用程序A项目,

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

然后工作时,让我们说,一个Windows的测试,你可以创建一个测试分支:在主应用程序A回购(如双赢的测试重构),这将指向代码在Windows文件夹中为应用程序A子模块以测试自己的分支。

这样,如果测试不起作用,您可以摆脱测试分支,一切都将恢复正常。或者如果它按照Windows的预期工作,并且需要与其他平台共享,则可以合并测试分支和开发一个(在两个回购中)以将新功能包括在主线中,并共享它到任何参考文件夹的文件夹

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