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

时间:2011-02-24 06:40:03

标签: git github version-control

我对git很新,我正试图以正确的方式设置我的存储库。

基本上我的应用程序是各种平台,因此该平台的实现基于主分支,但对这些文件以及一些其他文件进行了一些小的修改。

我尝试将其设置为分支,因此我有一个master分支,implementation_1implementation_2

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

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

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

3 个答案:

答案 0 :(得分:23)

Branch是Git中的一等公民,意思是没有“仿效”像旧版VCS(SVN,CVS,...)中的分支

如果您确实需要三个不同的目录,因为您希望拥有三个不同的开发环境,请创建3个克隆:

  • 名为master
  • 的目录中的一个
  • 名为imp_1
  • 的目录中的一个
  • 名为imp_2
  • 的目录中的一个

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


或者,自从Git 2。5(2015年7月,OP问题发布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)

答案 1 :(得分:6)

您可以创建存储库的三个克隆并在这些克隆之间进行合并。 git中的forks与它们合并的方式没有什么不同。你可以很容易地做到:

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

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

答案 2 :(得分:3)

您可以使用git worktreeintroduced 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中)。请注意,任何分支都可以一次在一个工作树中签出。