我对git很新,我正试图以正确的方式设置我的存储库。
基本上我的应用程序是各种平台,因此该平台的实现基于主分支,但对这些文件以及一些其他文件进行了一些小的修改。
我尝试将其设置为分支,因此我有一个master
分支,implementation_1
和implementation_2
。
但据我所知,这意味着本地所有分支都存储在一个目录中,它们的分离只能通过git。
我想要的是拥有3个本地目录,master
,imp_1
和imp_2
。如果我对imp_1
目录中的一个核心文件进行了更改,我希望能够将该更改合并到master
分支,并从那里合并到imp_2
。
我开始认为这些需要是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 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中)。请注意,任何分支都可以一次在一个工作树中签出。