在单台机器上管理多个git克隆

时间:2017-07-31 12:06:06

标签: git

我的系统中有4个与我们项目相同的存储库的克隆。

这样做的原因是我们在过去两年中已经在技术堆栈方面进化,并且这种演变的4个版本中的每一个都需要不同的文件夹结构和eclipse工作区设置。每个版本都存在于自己的分支上。为了继续为客户支持旧版本,我需要使用不同的克隆来简化我的工作,这样我就不必切换分支并相应地更改设置。

我主要是离线工作。因此,每当我连接到网络时,我都会逐个执行在每个克隆上运行git fetch的脚本。我想要的是在这个过程中节省一些网络带宽。我只想在git fetch存储库上运行prime一次,其他存储库必须从prime下载代码。

我尝试将prime设置为远程其他存储库,但它只获取辅助存储库中prime的本地检出分支。有没有办法实现我想要实现的目标?

2 个答案:

答案 0 :(得分:1)

如果每个存储库的唯一目的是存在,那么您有一个特定(和固定)分支的工作目录,那么更好的工作流将是使用具有多个工作树的单个存储库。

所以你只需要一个存储库就可以获取。而不是默认的一个工作目录,您将拥有总共四个工作目录,所有目录都使用与其基础相同的存储库。

幸运的是,Git使用git worktree命令开箱即用,支持这种情况:假设您在“主要”本地存储库中,您可以只调用git worktree add三次以创建另外三个使用特定分支的工作目录:

git worktree add ../legacy-1 legacy-branch-1
git worktree add ../legacy-2 legacy-branch-2
git worktree add ../legacy-3 legacy-branch-3

因此,每个文件夹(包括主文件夹)都将是一个完整且独立的工作目录,其中包含单独的索引和所有内容。只是底层存储库将是相同的,并且将共享所有内容,包括远程及其分支。因此,您可以获取任何存储库,并且所有存储库都将更新(因为它只是一个存储库)。

使用多个工作树时,您需要了解一些事项。最重要的一点是,您无法查看在工作树中签出的分支。因此,每个文件夹应保持固定为它初始化的分支 - 但我相信无论如何已经非常适合您的工作流程。

答案 1 :(得分:0)

你已经做好了事情(我使用与长期工作树相同的设置来避免切换分支)。

更新当前签出的分支

git pull prime $BRANCH

更新其他分支运行

git fetch prime $B1:$B1 $B2:$B2…