Setting repo remotes with the “track” command

This is useful if you want to avoid sending a lot of objects when performing git push and want to copy those objects from another local repository first.

Subcommand Summary
set your-repo-path orig-repo-path remote-name [--tags] Runs git remote add [--tags]
fetch your-repo-path remote-name Perform git fetch --prune
rm your-repo-path remote-name Perform git remote remove
list** your-repo-path List remotes configured in your repository

Note

It is almost never useful to track torvalds/linux.git, as our use of git alternates will already make sure that you don’t have to push objects already present in torvalds/linux.git. This command is useful for objects that have not yet found their way into Linus’s repo (e.g. those from linux-next).

Examples

All examples are for linux-next, since that’s likely to be what most people want.

Setting

Set up linux-next as a remote for your own repository:

ssh git@gitolite.kernel.org track set \
    pub/scm/linux/kernel/git/mricon/linux \    # <-- Your repository path
    pub/scm/linux/kernel/git/next/linux-next \ # <-- The repository you want
    linux-next [--tags]                        # <-- remote name (pass --tags if you want tags)

This will do the following:

cd $REPOS/pub/scm/linux/kernel/git/mricon/linux.git
git remote add --no-tags linux-next $REPOS/pub/scm/linux/kernel/git/next/linux-next.git
git fetch linux-next --prune

If you passed --tags at the end of the command, then --no-tags will be omitted and you’ll get all the tags from the remote repository as well.

Fetching

Right before you do git push, run the following command to fetch the latest objects from linux-next and thus avoid pushing them over your ssh connection during your own git push:

ssh git@gitolite.kernel.org track fetch \
    pub/scm/linux/kernel/git/mricon/linux \ # <-- Your repository path
    linux-next                              # <-- Remote name you want to fetch

This will do the following:

cd $REPOS/pub/scm/linux/kernel/git/mricon/linux.git
git fetch linux-next --prune

Listing

Forgot which remotes you already set up?

ssh git@gitolite.kernel.org track list \
    pub/scm/linux/kernel/git/mricon/linux # <-- Your repository path

Removing

Done with a remote? You can just leave it there, or remove it entirely:

ssh git@gitolite.kernel.org track rm \
    pub/scm/linux/kernel/git/mricon/linux \ # <-- Your repository path
    linux-next                              # <-- Remote name you want to remove

This will do the following:

cd $REPOS/pub/scm/linux/kernel/git/mricon/linux.git
git remote remove linux-next