有没有办法将一个Git回迁拆分为多个较小的回迁?
我需要将VPN接入我们的Git服务器以获取更改,VPN连接速度非常慢(~200kbps)。我正试图进行几个月的更改,但它的文件容量为3GB,VPN连接在完成所有更改之前一直处于断开状态有没有办法将一个Git回迁拆分为多个较小的回迁?,git,Git,我需要将VPN接入我们的Git服务器以获取更改,VPN连接速度非常慢(~200kbps)。我正试图进行几个月的更改,但它的文件容量为3GB,VPN连接在完成所有更改之前一直处于断开状态 我想知道是否有一种方法可以一次只提取一半的更改,这样我就可以将其分为两个批次?分割一个大的获取的关键是获取带来提交。一个获取操作要么成功,要么完全失败,如果网络连接在中间抛出。但是,如果您的git fetch想要引入(比如)16384个提交,这将带来价值3 GB的数据,而这些数据不会一次全部完成,您可以将其分解:
我想知道是否有一种方法可以一次只提取一半的更改,这样我就可以将其分为两个批次?分割一个大的获取的关键是获取带来提交。一个获取操作要么成功,要么完全失败,如果网络连接在中间抛出。但是,如果您的
git fetch
想要引入(比如)16384个提交,这将带来价值3 GB的数据,而这些数据不会一次全部完成,您可以将其分解:
- 首先,引入8192个提交,带来1.5GB的数据李>
- 然后引入其余的8192个提交,这些提交将引入其他1.5 GB的数据
git fetch
。二!这项计划有两大缺陷
说真的,如果您拥有正确的访问权限,您可以让某人针对各种提交放置分支名称或标记名称,并以这种方式分解大量提交。这让你陷入了一个可能的主要缺陷
Edit:您也可以从相反的方向进行操作:使用--depth
选项运行git fetch
(--depth=1
尝试只获取每个分支名称的最后一次提交,--depth=2
尝试获取最后两次提交,以此类推)。然后,您可以使用--decept
运行额外的获取操作,并且一旦有足够的操作,就可以使用git fetch--unshall
获取所有其他操作。这可能是最简单的工作,从你的目的单独
或者,让某人运行git bundle
并创建一个bundle文件。然后,使用一些可重启的传输协议发送文件。获得整个文件后,对bundle文件运行git fetch
。捆绑文件只需将git fetch
拆分为不同的部分:
- 聚合传输所需的对象(
完成此部分)李>git bundle
- 传输捆绑文件(这部分由您自己完成);及
- 将捆绑包文件提取到提交中(
知道如何做)git fetch
在StackOverflow上有许多关于
git bundle
的问题和答案;请参阅,例如,我认为它会自动恢复到中断时离开的位置。@mkrieger1:不幸的是,不会。相关XKCD:噢,git捆绑包听起来非常适合未来(每次我们添加新的团队成员时,这整件事都很痛苦,他们必须从头开始提取文件)。但对于第一个解决方案,我愿意冒险,因为在超时之前我确实非常接近(比如80-90%)。。。那么我该如何像你提到的那样拆分它呢?@AdamL.:好吧,棘手的部分是弄清楚提交的git fetch
是什么,然后在另一个git中放置一个分支或标记名,这样你就可以git fetch origin
来获取“前半部分”或“前10%”或其他内容。没有完美的方法可以做到这一点;最好的办法是记下Git中远程跟踪名称的散列ID,登录到另一台机器(或以其他方式获得对它的访问权),然后在Git存储库中运行Git log
,查看它们有哪些提交,你不知道。@torek我可以通过散列ID进行获取吗?你可以尝试--depth=1
获取和重复--deeph=
获取。。。