Git - 将分支存储在单独的本地目录中

问题描述:

我对git比较陌生,并且试图以正确的方式设置我的存储库。Git - 将分支存储在单独的本地目录中

基本上我的应用程序是一个平台,所以这个平台的实现基于master分支,但对这些文件以及一些额外的文件有一些小的修改。

我试着将它设置为分支,所以我有一个master分支,implementation_1implementation_2

但据我所知,这意味着在本地所有的分支都存储在一个目录中,他们的分离只是通过git。

我想要的是有3个本地目录master,imp_1imp_2。如果我对imp_1目录中的某个核心文件进行了更改,我希望能够将该更改合并到master分支中,然后从那里进入imp_2

我开始认为这些需要是3个不同的存储库(实现是分支的核心)。这是要走的路吗?在那种情况下,我将如何处理上述情况?

+1

'git-new-workdir'可能会诀窍(请参阅http://thejspr.com/blog/work-on-multiple-branches-with-git-workdir/) – user456584 2014-06-05 21:48:19

分公司在Git的头等公民,这意味着有没有“模拟”作为老年VCS(SVN,CVS,...)

如果你真的需要三个不同的目录中,因为要像树枝有三个不同的开发环境,使3个克隆:

  • 一个在一个叫master
  • 一个在一个名为imp_1
  • 处于一个目录目录目录称为imp_2

但要真正理解分支,你可以阅读“Pros and cons of different branching models in DVCS”。


或者,因为Git的2.5(2015年7月,任择议定书的问题,后4年),我在Multiple working directories with Git?的相关详细,使用git worktree

这将是一个克隆,多个文件夹(每个分支一个)。
使用Git 2.7+,您可以然后列出这些文件夹:

$ git worktree list 
/path/to/bare-source   (bare) 
/path/to/linked-worktree  abcd1234 [master] 
/path/to/other-linked-worktree 1234abc (detached HEAD) 
+0

有没有任何优点和缺点3不同的目录与保持3个分支在同一个本地回购? – 2012-09-23 16:22:35

+3

@ lysergic-acid主要的专业是你可以同时在每个分支上并行工作,因为每个分支都被克隆在自己的目录中。 – VonC 2012-09-23 16:42:45

+0

是的,但是使用单个目录有问题吗?例如,假设我制作了一个实验分支来测试某些东西,并且在工作树中有一些未提交的文件,我是否可以*签出另一个分支以继续主线工作? (也许这不是最好的例子,但我想看看是否有些东西可能会限制使用单个目录)。 – 2012-09-24 04:11:19

,您可以创建存储库的三个克隆和那些之间的合并。 git中的叉子和它们合并的方式没有什么不同。你可以很容易做到:

git merge ../master 
git pull ../imp_2 

本地克隆时,git会硬连接的对象,甚至节省磁盘空间

你可以做到这一点使用git worktree这是introduced in Git 2.5, circa July 2015

git clone -b master <repo> master 
cd master 

# checking out implementation_1 in ../imp_1 
git worktree add ../imp_1 implementation_1 

# creating branch implementation_2 at master~2 as you check it out in ../imp2: 
git worktree add -b implementation_2 ../imp_2 master~2 

而且瞧!你完成了。

使用此设置,您将只有一个.git文件夹(在master/.git中)。请注意,任何分支都可以一次检出一个工作树。