git同时在两个分支上工作


167

我有一个有很多分支机构的项目。

我想同时在几个分支上工作而不必与来回切换git checkout

除了将整个存储库复制到其他地方,我还有什么办法可以做到这一点?


可能与Git
meagar

1
Git 2.5+(2015年第二季度)将通过新命令正式支持此功能git checkout --to=<path>。请参阅下面的答案
VonC 2015年

2
实际上,命令将是git worktree add <path> [<branch>](Git 2.5 rc2)
VonC

Answers:


156

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年第二季度)。


2
这应该是新的接受的答案,因为2.5.X现在是推荐的版本,即使对于Windows i.imgur.com/oQvUhVl.png git-scm.com/download/win
RAnders00 2015年

40

看一下$ GIT_SRC_DIR / contrib / workdir / git-new-workdir

一个简单的脚本来创建一个工作目录,该目录使用符号链接指向现有的存储库。这允许在不同的工作目录中有不同的分支,但所有分支都来自同一存储库。



2
我知道这已经很老了,但是请您提供一些解释。
dav_i 2013年

@dav_i:这样吗?
StefanNäwe13年

@StefanNäwe啊,我很困惑-太早了...用链接更新了您的答案。
dav_i 2013年




-2

并非如此,因为Git仅支持在存储库目录中拥有一个存储库数据的工作副本。

如果要使用两个不同的工作副本提交/拉到同一存储库,则可以创建一个存储库并将其克隆到两个工作副本

每当完成某件事时,您只需推送到“主要”裸仓库。

一些提示:

man git-clone

git clone --bare


3
“ Git仅支持拥有一个存储库数据的工作副本” -1不正确,请参阅的答案git-new-workdir
sleske,2012年

好主意。只需克隆两次即可。
Serge Vinogradoff 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.