利用 Git 仓库是自包含的并且可以直接复制的事实,我们只需要一些方法来复制并将 bare 仓库转换为非 bare 仓库,在我们的前几次尝试中。
如果可能,克隆仍然是最好的初始复制形式(参见解决方法1和2)。如果不行,如果有访问权限,我们可以直接从服务器上复制,然后手动转换它(请参见#3)。如果失败了,也许复制/克隆仓库的较小部分会奏效?
解决方法1-从服务器克隆到 USB
登录服务器(如果您有访问权限),将其克隆到 USB 驱动器文件夹中(作为非 bare 仓库),将 USB 插入目标机器,然后将其移动/复制到希望放置仓库的最终位置。Git 命令应该是:
git clone /path/to/bare/repo /local/repo/folder
我认为这不会复制任何孤立的提交(那些最终将被垃圾回收的提交)。
解决方法2-克隆到另一台电脑,然后复制
将repo克隆到另一台计算机上,以某种方式将文件夹复制/移动到目标计算机(USB,网络连接等),类似于#1。
解决方法3-从服务器复制,从bare转换
假设可以访问服务器,可能是通过网络共享而不是直接访问(否则使用#1)。将裸库本地复制,然后执行类似于这样的操作将其转换为非裸库。
解决方法4a-一次只克隆一个分支
看起来你只能一次克隆一个单独的分支, 这可能适合在限制内引起内存问题:
git clone [url/folder] -b master --single-branch [local repo folder]
请注意,您可以在服务器上创建一些稍微滞后的新分支,以便一次拉取较少的内容,但是根据上面链接中的答案,您可能需要跳过一些障碍来删除您的新存储库的“单分支性”。
解决方法4b-浅层存储库:
使用
--depth <depth>
和/或其他浅层标签创建具有有限提交历史深度的本地存储库。从
git clone --help
手册页面中获取:
--depth
创建一个浅克隆,其历史记录被截断为指定数量的提交。除非给出--no-single-branch以获取所有分支末端附近的历史记录,否则意味着--single-branch。如果要浅地克隆子模块,请还传递--shallow-submodules。
--shallow-since=
创建一个浅层克隆,其历史记录在指定时间之后。
--shallow-exclude=
创建一个浅层克隆,其历史记录不包括可从指定远程分支或标记到达的提交。此选项可以多次指定。
--[no-]single-branch
仅克隆导致单个分支尖端的历史记录,由--branch选项或主分支远程的HEAD指向指定。进一步获取到生成的存储库中的内容只会为用于初始克隆的分支更新远程跟踪分支。如果--single-branch clone时远程的HEAD没有指向任何分支,则不会创建远程跟踪分支。
解决方法4c-一次克隆/检出部分文件。
参见这个答案及其链接以获取有关如何一次仅拉取存储库的一部分的说明。虽然不太美观,但可以将其分成几部分克隆。