如何在Git中管理项目的多个版本

时间:2012-08-28 05:46:02

标签: git version-control project-management

我有一个使用git开源的项目进行版本控制。很快,我将发布该项目的高级托管版本,但是代码将专门针对高级托管版本(性能等)进行更改,这在开源版本中不应该存在。

我想避免使用两个单独的目录/项目,因为如果我修复了开源版本中的错误,那么该错误最有可能出现在高级托管版本中。我不想在两个地方做出改变。

管理此问题的最佳方法是什么?简单地在git中分支将无法正常工作,因为某些文件需要有两个版本:开源版本和高级托管版本。

感谢您的帮助。

2 个答案:

答案 0 :(得分:28)

然而,分支应该有效,并且允许你维护两个不同的版本。

如果您有适用于高级版本的错误,请在master上修复,然后将其合并到premium分支上。
Git只会合并自您在masterpremium之间分支后更改的内容,即您的错误修复。
另一种在masterpremium中发布修补程序的方法是从共同的祖先那样做:请参阅“Git merging hotfix to multiple branches”。


2015年更新:git 2。5(2015年7月)已使用新命令git worktree add <path> [<branch>]替换了下面显示的git-new-workdir

有关详情,请参阅“Multiple working directories with Git?”。


2012年原始答案:

me-andthe comments命令 git-new-workdir 中提及。
参见:

  

对此的一个解决方案是简单地创建存储库的另一个本地克隆。当你在本地克隆时,Git会自动使用硬链接,因此克隆速度非常快   但是这有一个问题:你现在需要另一个独立的存储库来保持最新状态。

     

这是git-new-workdir的来源。
  它不是对存储库进行完整的克隆,而是为您设置一个新的工作目录(带有自己的索引)。
  实际存储库本身在原始工作目录和新工作目录之间共享。这意味着:

     
      
  • 如果更新一个存储库,则新提交也会立即显示在所有其他工作目录中。
  •   
  • 在您的某个工作目录中创建一个新的提交或分支,它们立即可用于所有工作目录。
  •   
     

注意:即使提交是自动进行的,如果您检出了相同的分支,Git也不会更新工作副本。你必须自己这样做。

答案 1 :(得分:3)

使用worktree最适合此目的。

在我的情况下,我有两个版本的相同软件,基本相同,但每个版本都有一些不同的功能。

所以我创建了两个worktree,这意味着在主人旁边创建两个相关的长期分支。

$git worktree add -b version-silver ..\version-silver master
$git worktree add -b version-gold ..\version-gold master

然后我有:

$git branch
master  # base stuff here
version-silver # some normal features
version-gold # some better features

有一个存储库,但我上面的每个分支都有3个单独的文件夹。并在master中做出共同的改变。然后将其与其他两个版本合并。

cd master
vim basic.cpp
git add .
git commit -m "my common edit on basic.cpp"
cd ..\version-silver
vim silver.cpp
git add .
git commit -m "my specific edit on silver.cpp"
git merge master # here i get the basic.cpp latest changes for silver project
cd ..\version-gold
git merge master # here i get the basic.cpp latest changes for gold project

每个版本的具体更改也将放在相应的文件夹中,并且每个项目的工作都是隔离的,IDE不会混淆。

希望有所帮助。