Ich habe auf github mein Konto für eigene Projekte, aber auch Veröffentlichungen für Beiträge zu anderen Projekten. Der übliche Ablauf für Änderungen an fremden Projekten ist, dass man diese sich erst kopiert, sie verändert und dann diesen neuen Stand veröffentlicht, wobei sehr oft der Ort der Veröffentlichung ungleich dem Ort des ursprüngliches Projekts ist – git macht's möglich.

Bei git hat man die Möglichkeit, eine andere Adresse beim Aufruf git push als beim Aufruf von git pull zu verwenden. Dies kann über den Eintrag pushRemote für einen Zweig bestimmt werden. Auf diese Weise kann man mit push vom Server des ursprünglichen Projekts ziehen und mit push die Änderungen auf seinem Server ablegen, ohne dass man darüber nachdenken muss, an welcher Stelle was zu verwenden ist.

Ein Beispiel der .git/config:

[remote "origin"]
        url = https://github.com/flosse/rust-web-framework-comparison.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[remote "push-origin"]
        url = https://github.com/jo-so/rust-web-framework-comparison.git
        fetch = +refs/heads/*:refs/remotes/push-origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
        pushRemote = push-origin

Um diese Einträge leicht anlegen zu können, habe ich folgendes Skript in einem Verzeichnis von PATH abgelegt, womit ich dann einfach git add-pushremote in dem gewünschten Repository aufrufen kann.


#!/bin/sh

set -e

po=$1

if test -z "$po"
then
    po=$(git config --get remote.origin.url)
    po=${po%/}
    po=${po%.git}
    case "$po" in
      *gitlab.com*)
        po=git@gitlab.com:jo-so/${po##*/}.git
        ;;

      *github.com*)
        # po=https://github.com/jo-so/${po##*/}
        po=git@github.com:jo-so/${po##*/}.git
        ;;

      *)
        echo 'Parameter missing: please provide a push URL' >&2
        exit 1
    esac
fi

git remote add push-origin "$po"
git config branch."$(git symbolic-ref --short HEAD)".pushRemote push-origin