Re: Is it possible to resume download on single file.
Git's design does not allow for resumable clones at this time.
There are a few more or less hacky ways I can think of to address this problem:
1) Prime the clone with a local "reference" repository
If one of your colleagues already has cloned the repository in question successfully (and _not_ partially), and if both of you can access a local network drive, then this colleague could initialize a bare repository on said network drive that can then be used to accelerate future clones.
The reference repository would be initialized somewhat like this:
cd /path/to/repository
git clone --mirror --bare . /path/to/network/drive/repository
The clone operation would look somewhat like this:
git clone --reference /path/to/network/drive/repository \
--dissociate https://github.com/the/repository
2) Using bundle URIs
This assumes that your workplace has _some_ server that has both good connection to GitHub as well as can be accessed reliably from your workstation.
The idea is to maintain a set of static bundle files (for details, see https://git-scm.com/docs/bundle-uri) that can not only be distributed via Content Delivery Networks ("CDN") but also via servers that allow resumable downloads. These bundles would take the role of the "reference repository" in the previous bullet point.
One tool to make such a setup relatively easy to initialize and maintain is this: https://github.com/git-ecosystem/git-bundle-server#readme
This does require a server that has reliable network connections to GitHub (to update the bundles) and also to your workstation, and it requires a bit of work to maintain.
3) HACK! Downloading the raw blob objects' contents
Since the problem seems to come from the blob objects, you could download the raw file contents and feed them to `git hash-object -w --stdin` to populate the local repository. That way, your partial clone would not need to fetch them via the (non-resumable) `git fetch` protocol.
One way to download those raw contents is via the "Raw" URLs like https://github.com/git/git/raw/v2.46.0/README.md. You can ensure that the corresponding Git object is present in your local repository (and will therefore not need to be fetched again) via something like this:
curl -Lfs https://github.com/git/git/raw/v2.46.0/README.md |
git hash-object -w --stdin
That can get a bit tedious if there are many blob objects that need to be imported into the local repository; To counter that, you could download a tar archive via something like https://github.com/git/git/tarball/v2.46.0 and then import it via something like `import-tars.perl` (see https://github.com/git/git/blob/v2.46.0/contrib/fast-import/import-tars.perl). According to this public information, the tar archives are cached and therefore the download should be resumable: https://docs.github.com/en/repositories/working-with-files/using-files/downloading-source-code-archives#stability-of-source-code-archives
I hope this information is useful to you. If you manage to improve your situation, I would be curious to learn what worked for you.
Ciao, Johannes