我有一个有很多分支机构的项目。
我想同时在几个分支上工作而不必与来回切换git checkout
。
除了将整个存储库复制到其他地方,我还有什么办法可以做到这一点?
git checkout --to=<path>
。请参阅下面的答案。
git worktree add <path> [<branch>]
(Git 2.5 rc2)
我有一个有很多分支机构的项目。
我想同时在几个分支上工作而不必与来回切换git checkout
。
除了将整个存储库复制到其他地方,我还有什么办法可以做到这一点?
git checkout --to=<path>
。请参阅下面的答案。
git worktree add <path> [<branch>]
(Git 2.5 rc2)
Answers:
Git 2.5+(2015年第二季度)支持此功能!
如果您有git repo cool-app
,请使用cd到root(cd cool-app
),运行git worktree add ../cool-app-feature-A feature/A
。这feature/A
会将分支检出到它自己的新专用目录中cool-app-feature-A
。
它用contrib/workdir/git-new-workdir
更强大的机制代替了较早的脚本,在该机制中,那些“链接”的工作树实际上记录在主repo新$GIT_DIR/worktrees
文件夹中(以便可以在包括Windows在内的任何OS上运行)。
再一次,一旦克隆了一个/path/to/myrepo
仓库,就可以在不同的独立路径(/path/to/br1
,/path/to/br2
)中为不同分支添加工作树,同时将那些工作树链接到主要仓库历史(不再需要使用--git-dir
选项)。
有关更多信息,请参见“ 使用Git的多个工作目录? ”。
创建工作树后,就可以移动或删除它(使用Git 2.17 +,2018年第二季度)。
看一下$ GIT_SRC_DIR / contrib / workdir / git-new-workdir。
一个简单的脚本来创建一个工作目录,该目录使用符号链接指向现有的存储库。这允许在不同的工作目录中有不同的分支,但所有分支都来自同一存储库。
我建议我的小脚本http://www.redhotchilipython.com/en_posts/2013-02-01-clone-per-feature.html
它将进行git clone并替换配置(以“查看”原始存储库,因此pull / push将进入“主”存储库),但是它足够简单,可以作为实际引导的抽象。
Git同时支持多个工作树。有关更多信息,请参见:
然而,很难支持具有ID的多个工作树。例如,这是JGet(eclipse ID)中的增强请求,以支持工作树。
因此,您必须手动管理存在很多问题的项目(命令行),或者在IDE中使用单个工作树。
并非如此,因为Git仅支持在存储库目录中拥有一个存储库数据的工作副本。
如果要使用两个不同的工作副本提交/拉到同一存储库,则可以创建一个裸存储库并将其克隆到两个工作副本。
每当完成某件事时,您只需推送到“主要”裸仓库。
一些提示:
man git-clone
git clone --bare
git-new-workdir
。