存储有效的git克隆

Ben*_*oît 0 git object repository

我有一个远程存储库的克隆.当我需要该存储库的另一个副本时,如果我克隆该本地克隆,则origin指向第一个克隆.所以相反,我只是cp -a first second,但这是浪费空间,因为它制作了完整的副本.git/objects.

那么,我该如何进行第二次克隆并将其保存在具有存储效率的完全相同的配置中(不,我没有运行可以使用的fs cp -a --reflink)

Cod*_*ard 6

您可以使用git worktree此任务.

Git worktree使用单个repo,允许您检出不同文件夹上的任何所需分支.

自2007年以来,Git拥有这种能力.在cotrib文件夹下,这是一个名为'new-workdir'的隐藏命令,后来被添加到gin inversion 2.5并被重命名为git worktree.

git worktree

git worktree将创建一个新的工作文件夹,允许我们同时在多个分支上工作.每个副本都将指向原始存储库,而3-states新副本是新的副本.这节省了我们使用git stash甚至克隆新存储库的需要,因为这些工作树共享相同的仓库,我们可以检查任何工作树上的任何分支,我们可以做一个樱桃挑选或合并,所有这些都将在我们的机器上本地完成.

用法:

git worktree add <second path>
Run Code Online (Sandbox Code Playgroud)

将在您的计算机上创建另一个文件夹,允许您同时在不同的分支上工作.

这将允许您对新工作树上的任何实验进行操作,而不会对存储库本身产生任何影响.在附加图像中,您可以看到有2个单独的工作文件夹,但它们都使用单个存储库并共享内容.

在此输入图像描述


现在,由于2 worktree 共享相同的.git文件夹,您可以使用它git cherry-pick来获取特定提交的任何提交或文件,并将其添加到worktree您创建的任何现有文件中.

在此输入图像描述