Mit ‘git’ Tagged einträge

localen git Server via ssh forwarden

Mittwoch, Dezember 13th, 2017


Folgendes Problem: auf eine ententen Server möchten wir auf ein Git Repository zugreifen auf dies der Server eigentlich keinen Zugriff hat, da der Git Server in einem Lokalen Netz steht. Der Rechner von dem ich dieser Operation ausführen möchte, kann all Server erreichen.

Somit habe ich mich per SSH mit Port Fortging auf den Server verbunden:

ssh -A -R 2222:git.local:22 server.tld

Hier wird mit der Option -R der Port 2222 auf dem entfernten Server bereit gestellt und auf den „git.local“ Server mit dem Port 22 weitergeleitet. Mit der Option -A habe ich zusätzlich SSH Agent Forwading eingegeben. Somit wird nicht einmal ein SSH Key auf dem Server benötigt.

Als nächstes habe ich in der .git/config die URL des Repositories angepasst.

...
url = git@[localhost:2222]:gitreponame
...

Eigentlich sollte die IP oder der DNS Name des Git Servers stehen. Dies habe ich durch localhost ersetzt. Leider ist der Port 22 natürlich belegt, somit habe ich diesen ebenfalls umgebogen. Dies geht nur mit den Eckige Klammern [localhost:2222].

gitolite mit git hooks

Dienstag, März 31st, 2015

Da es mir nicht möglich war, mit den in Debian Wheezy oder Ubuntu Trusty enthaltenen gitolite Paketen den gitserver so anzupassen, dass man hooks ausführen kann, habe ich die Methode gewählt wie sie auf der Gitolite Webseite beschreiben ist.

Client:
Zunächst benötigt man einen Key für den Administrator.
ssh-keygen -b 4096
scp .ssh/id_rsa.pub server:/tmp/chr.pub

Server:
Dann beginnt man auf dem Server die eigentliche Installation.
apt-get install git
adduser git --disabled-password
su - git
cd /home/git
mkdir bin
git clone git://github.com/sitaramc/gitolite
gitolite/install -ln ~/bin
gitolite setup -pk /tmp/chr.pub

Dann müssen noch zwei Konfigurationseinstellungen vorgenommen werden.
vim .gitolite.rc
GIT_CONFIG_KEYS => '.*',
LOCAL_CODE => "$ENV{HOME}/.gitolite/local-code/",

Client:
Die restliche Konfiguration kann dann vom Administrator Konto aus erledigt werden.
apt-get install git
git clone git@server:gitolite-admin
cd gitolite-admin
mkdir -p /local-code/hooks/common/hooks.d/

cat > local-code/hooks/common/hooks.d/runhook.sh <<\EOF
#!/bin/bash

echo "TEST" > /tmp/runhook.log
EOF
chmod -v +x local-code/hooks/common/hooks.d/runhook.sh
cat > local-code/hooks/common/post-receive <<\EOF
#!/bin/bash
run_hook () {
  echo -en "\e[1;33m$4..\e[00m "
  echo $1 $2 $3 | $GIT_DIR/hooks/hooks.d/$4
}

echo -en "\e[1;33mRunning hooks..\e[00m "

while read oldrev newrev refname; do
  if [ "$refname" =  "refs/heads/master" ]; then
    hooks=$(git cat-file blob $newrev:.hooks 2>/dev/null)
    if [ -n "$hooks" ]; then
      # Repo-local hooks defined in .hooks.
      for hook in $hooks; do
        run_hook $oldrev $newrev $refname $hook
      done
    fi

    # Global hooks for this repo (ie. set in Gitolite config).
    hooks=$(git config --get hooks.run)
    [ -z "$hooks" ] && continue

    for hook in $hooks; do
      run_hook $oldrev $newrev $refname $hook
    done
  fi
done

echo -e "\e[1;32mDone.\e[00m"
EOF
chmod -v +x local-code/hooks/common/post-receive

Zum Testen habe ich hier ein einfaches Gitrepository mit dem hook Script eingerichtet.
vim conf/gitolite.conf
repo hooktest
RW+ = chr
config hooks.run = runhook.sh

Dieses muss man einchecken.
git add local-code conf/gitolite.conf
git commit -m "add new repo hooktest, add runhoock.sh"
git push
cd ..

Um entsprechend dies einmal zum Testen zu nutzen.

git clone git@server:hooktest
cd hooktest
echo "TEST1" > test
git add test
git commit -m "add test: TEST1"
git push

Quelle:gist.github.com