Cloning large software repositories over I2P can be difficult, and using git can sometimes make this harder. Fortunately, it can also sometimes make it easier. Git has a git bundle command which can be used to turn a git repository into a file which git can then clone, fetch, or import from a location on your local disk. By combining this capability with bittorrent downloads, we can solve our remaining problems with git clone.
Before you Start
If you intend to generate a git bundle, you must already possess a full copy of the git repository, not the mtn repository. You can get it from github or from git.idk.i2p, but a shallow clone (a clone done to –depth=1) will not work. It will fail silently, creating what looks like a bundle, but when you try to clone it it will fail. If you are just retrieving a pre-generated git bundle, then this section does not apply to you.
Fetching I2P Source via Bittorrent
Someone will need to supply you with a torrent file or a magnet link corresponding to an existing git bundle that they have already generated for you. Once you have a bundle from bittorrent, you will need to use git to create a working repository from it.
Using git clone
Cloning from a git bundle is easy, just:
git clone $HOME/.i2p/i2psnark/i2p.i2p.bundle
If you get the following error, try using git init and git fetch manually instead:
fatal: multiple updates for ref 'refs/remotes/origin/master' not allowed
Using git init and git fetch
First, create an i2p.i2p directory to turn into a git repository:
mkdir i2p.i2p && cd i2p.i2p
Next, initialize an empty git repository to fetch changes back into:
git init
Finally, fetch the repository from the bundle:
git fetch $HOME/.i2p/i2psnark/i2p.i2p.bundle
Replace the bundle remote with the upstream remote
Now that you have a bundle, you can keep up with changes by setting the remote to the upstream repository source:
git remote set-url origin git@127.0.0.1:i2p-hackers/i2p.i2p
Generating a Bundle
First, follow the Git guide for Users until you have a successfully --unshallowed clone of the i2p.i2p repository. If you already have a clone, make sure you run git fetch --unshallow before you generate a torrent bundle.
Once you have that, simply run the corresponding ant target:
ant bundle
and copy the resulting bundle into your I2PSnark downloads directory. For instance:
cp i2p.i2p.bundle* $HOME/.i2p/i2psnark/
In a minute or two, I2PSnark will pick up on the torrent. Click on the “Start” button to begin seeding the torrent.