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

我想同时在几个分支上工作,而不是来回切换git签出。

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


当前回答

下面是已接受答案的可伸缩版本(已被认可),按顺序命名分支(app1..app10)。

注意,我们应该尽量避免重复签出(这里:通过签出主分支,git工作树add不会覆盖):

$ git checkout master && for NUM in {1..10}; do git worktree add ~/git/<repo-name>/app$NUM app$NUM; done

其他回答

我建议使用我的小脚本http://www.redhotchilipython.com/en_posts/2013-02-01-clone-per-feature.html

它将做git克隆和替换配置(“查看”原始的回购,所以拉/推将进入“主”回购),但它足够简单,可以从实际的引导中抽象出来。

Git 2.5+ (Q2 2015)支持这个特性!

如果你有一个git repo cool-app, cd到root (cd cool-app),运行git worktree add ../ / cool-app-feature-A特性。这会在它自己的新专用目录cool-app-feature-A中检出分支feature/A。

它取代了旧的脚本contrib/workdir/git-new-workdir,使用更健壮的机制,其中那些“链接”的工作树实际上被记录在主repo new $GIT_DIR/worktrees文件夹中(因此可以在任何操作系统上工作,包括Windows)。

同样,一旦你克隆了一个repo(在/path/to/myrepo这样的文件夹中),你可以在不同的独立路径(/path/to/br1, /path/to/br2)中为不同的分支添加工作树,同时让这些工作树链接到主repo历史(不再需要使用——git-dir选项)

详见“Git的多个工作目录?”。

一旦你创建了一个工作树,你就可以移动或删除它(Git 2.17+, 2018年第二季度)。

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

根据存储库某个端口的提交日志:

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

不完全是,因为Git只支持在存储库目录中有一个存储库数据的工作副本。

如果您希望使用两个不同的工作副本提交/提取到同一个存储库,您可以创建一个裸存储库并将其克隆到两个工作副本。

当您完成一些事情时,您只需将其推到“主”裸存储库。

一些提示:

男人git clone

甘孜

下面是已接受答案的可伸缩版本(已被认可),按顺序命名分支(app1..app10)。

注意,我们应该尽量避免重复签出(这里:通过签出主分支,git工作树add不会覆盖):

$ git checkout master && for NUM in {1..10}; do git worktree add ~/git/<repo-name>/app$NUM app$NUM; done