Jus*_*tin 31 git version-control project-management
我有一个开源的项目git用于修订控制.很快,我将发布该项目的高级托管版本,但是对于高级托管版本(性能等)的代码将进行更改,这在开源版本中不应该存在.
我想避免使用两个单独的目录/项目,因为如果我修复了开源版本中的错误,那么该错误最有可能出现在高级托管版本中.我不想在两个地方做出改变.
管理这个的最佳方法是什么?简单分支git将无法正常工作,因为某些文件需要有两个版本:开源版本和高级托管版本.
谢谢您的帮助.
Von*_*onC 29
然而,分支应该工作,并允许您维护两个单独的版本.
如果您有一个适用于高级版本的错误,请将其修复master,然后将其合并到premium分支上.
Git会只合并,因为你们之间分支发生了什么变化master和premium,即你的bug修复.
另一种方法是发布一个修补程序,master并且premium将从共同的祖先执行它:请参阅" Git将修补程序合并到多个分支 ".
2015年更新:git 2.5(2015年7月)已被git-new-workdir新命令替换为以下内容git worktree add <path> [<branch>].
有关更多信息,请参阅" 使用Git多个工作目录? ".
原答案2012:
我 - 并在评论中提到命令 git-new-workdir.
看到:
对此的一个解决方案是简单地创建存储库的另一个本地克隆.当您在本地克隆时,Git会自动使用硬链接,因此克隆速度非常快.
但是这有一个问题:你现在需要另一个独立的存储库来保持最新状态.这就是它的
git-new-workdir用武之地.它
不是为你的存储库做一个完整的克隆,而是为你设置一个新的工作目录(有自己的索引).
实际存储库本身在原始工作目录和新工作目录之间共享.这意味着:
- 如果更新一个存储库,则新提交也会立即显示在所有其他工作目录中.
- 在您的一个工作目录中创建一个新的提交或分支,它们立即可用于所有工作目录.
注意:即使提交是自动进行的,如果您检出了相同的分支,Git也不会更新工作副本.你必须为自己做这件事.
worktree为此目的最好使用。
就我而言,我有两个版本的同一软件,其基本知识是相同的,但是每个版本都有一些不同的功能。
因此,我创建了两个worktree,这意味着在主数据库旁边创建两个相关的长期运行分支。
$git worktree add -b version-silver ..\version-silver master
$git worktree add -b version-gold ..\version-gold master
Run Code Online (Sandbox Code Playgroud)
然后我有:
$git branch
master # base stuff here
version-silver # some normal features
version-gold # some better features
Run Code Online (Sandbox Code Playgroud)
有一个存储库,但是对于上面的每个分支,我都有3个单独的文件夹。并进行主人的共同变更。然后将其与其他两个版本合并。
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
Run Code Online (Sandbox Code Playgroud)
每个版本的特定更改也将放在相应的文件夹中,并且每个项目的工作都被隔离,并且IDE不会引起混淆。
希望能有所帮助。