Config «insteadOf»

Многие, даже начинающие, пользователи git знают про его возможность настраивать алиасы на команды. Но почему-то не все, даже более-менее продвинутые, не знают или забывают про «алиасы» на удалённые репозитории в .gitconfig.

Подобная конфигурация может помочь вам при использовании длинных URL к вашим репозиториям, например такой конфиг:

vi .gitconfig
…
[url "git@my-enterprize-github-install.example.ru:"]
insteadOf = "ght:"
…

Позволит оперировать вашим удалённым репозиторием гораздо проще, например:

git clone ght:gurugray/talks.git
…
git remote add ght:partner/talks.git
…

Однако и это не всё. Если ваш удалённый сервер позволяет стягивать с себя код анонимно, например только для чтения, вы можете ускорить процесс получение новых изменений не используя ssh протокол для этого, тем самым немного «разгрузив» сервер, освобождая его от дополнительной работы.

Расширим наш предыдущий конфиг таким образом:

vi .gitconfig
…
[url "git@my-enterprize-github-install.example.ru:"]
pushInsteadOf = "ght:"
pushInsteadOf = "git://my-enterprize-github-install.example.ru/"

[url "git://my-enterprize-github-install.example.ru/"]
insteadOf = "ght:"
…

Теперь оперируя с удалёнными репозиториями через ght: мы можем на самом деле работать с разными протоколами:

git clone ght:gurugray/talks.git
…
git remote -v

origin git://my-enterprize-github-install.example.ru/gurugray/talks.git (fetch)
origin git@my-enterprize-github-install.example.ru:gurugray/talks.git (push)
…

Дальше всё зависит от вашей фантазии, например можно настроить подобный «алиас» таким образом, что бы забирать изменения из одного репозитория, а выливать в другой, при этом оперируя одним и тем же URL.

14 январь 2013