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

kba*_*man 31 git version-control github

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

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

我尝试将其设置为分支,因此我有一个master分支,implementation_1并且implementation_2.

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

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

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

Von*_*onC 26

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

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

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

但要真正理解分支,您可以阅读" DVCS中不同分支模型的优缺点 ".


或者,自从Git 2.5(2015年7月,OP问题发布4年后),我在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)
Run Code Online (Sandbox Code Playgroud)

  • @ lysergic-acid主要的专业是你可以同时并行处理每个分支,因为每个分支都克隆在自己的目录中. (4认同)

kni*_*ttl 6

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

git merge ../master
git pull ../imp_2
Run Code Online (Sandbox Code Playgroud)

当克隆本地git将硬链接您的对象,甚至节省磁盘空间


Cim*_*ali 5

您可以使用2015年7月左右Git 2.5引入的git worktree来执行此操作。

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
Run Code Online (Sandbox Code Playgroud)

和瞧!你完成了。

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