我的系统中有4个与我们项目相同的存储库的克隆。
这样做的原因是我们在过去两年中已经在技术堆栈方面进化,并且这种演变的4个版本中的每一个都需要不同的文件夹结构和eclipse工作区设置。每个版本都存在于自己的分支上。为了继续为客户支持旧版本,我需要使用不同的克隆来简化我的工作,这样我就不必切换分支并相应地更改设置。
我主要是离线工作。因此,每当我连接到网络时,我都会逐个执行在每个克隆上运行git fetch
的脚本。我想要的是在这个过程中节省一些网络带宽。我只想在git fetch
存储库上运行prime
一次,其他存储库必须从prime
下载代码。
我尝试将prime
设置为远程其他存储库,但它只获取辅助存储库中prime
的本地检出分支。有没有办法实现我想要实现的目标?
答案 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…