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