Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:git_server

Distributed version control mit Git

Git ist ein open source distributed version control system ⇒ http://git-scm.com

Als erstes sollte man sich Gedanken darüber machen wie die Struktur der Versionierung aufgebaut werden soll.

Siehe dazu diesen Vorschlag: ⇒ http://nvie.com/posts/a-successful-git-branching-model/

Sind MS tools im Einsatz und es soll migriert werden ⇒ https://www.visualstudio.com/learn/centralized-to-git/ und https://accu.org/index.php/journals/1828.

Wo zu kann Git noch eingesetzt werden ⇒ Archivierung von Projektplänen mit Werkzeugen der Software Entwicklung

Spielerisch Git erlernen

Git Client Installieren

Installation und Upgrade Git 2.5 auf Oracle Linux 7

User root

Wird per „yum install git“ (Oracle Linux Server release 7.1) das Package „git“ installiert, ist die Version eine „1.8.3.1“:

#Install
yum install git
 
#Show version
git version
git version 1.8.3.1

Soll die aktuellste Version eingesetzt werden, kann nun per git Kommando der letzte Stand geladen und git neu übersetzt werden.

Vorbereitung: Die notwendigen Basis Pakete installieren bzw. selbst übersetzen falls nicht für OEL 7 verfügbar:

#Make utils
yum install autoconf
 
#Perl libraries
yum install perl-CPAN
 
 
#install base packages
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
 
########################
#install package for the document feature usage
 
yum install xmlto 
 
 
#install docbook2x
 
# search a rpm over http://rpm.pbone.net/index.php3 
#wget ftp://ftp.muug.mb.ca/mirror/fedora/epel/7/x86_64/d/docbook2X-0.8.8-17.el7.x86_64.rpm
#yum install docbook2X-0.8.8-17.el7.x86_64.rpm
 
#besser Source Code von http://sourceforge.net/projects/docbook2x/ herunterladen und neu übersetzen
#Zuvor Datei configure.ac von http://sourceforge.net/p/docbook2x/bugs/20 austauschen
 
tar xvfz docbook2X-0.8.8.tar.gz
cd docbook2X-0.8.8/
 
wget -O configure.ac  http://docbook2x.cvs.sourceforge.net/viewvc/docbook2x/docbook2X/configure.ac 
 
./configure
make
make install
 
 
#install asciidoc 
# see http://www.methods.co.nz/asciidoc/INSTALL.html
# Download the zip file with a browser
# not working wget -O asciidoc-8.6.9.zip http://sourceforge.net/projects/asciidoc/files/latest/download
 
unzip asciidoc-8.6.9.zip
cd asciidoc-8.6.9/
./configure
make install

Git Source laden und neu übersetzen:

cd /srv
 
#git source repository laden
git clone https://github.com/git/git
 
 
 
cd /srv/git
 
#########################
#Create configure script
 
make configure
 
./configure --prefix=/usr
 
#########################
#Compile git core and install
make all 
make install 
 
 
 
#test the version 
git --version
git version 2.5.0.342.g44e0223
 
 
 
#########################
# Create the git documentation
make doc 
make install-doc install-html 
 
make info
# Problems with /bin/sh: line 1: docbook2x-texi: command not found
# docbook2x-texi not availible for my platform ... hmmmm
 
ln -s /srv/docbook2X-0.8.8/perl/docbook2texi /usr/bin/docbook2x-texi
 
#better but
make info
 
#make[2]: Leaving directory `/srv/git'
#    DB2TEXI user-manual.texi
#I/O error : Attempt to load network entity http://docbook2x.sf.net/latest/xslt/texi/docbook.xsl
# not realy working ...
# may be this bug http://sourceforge.net/p/docbook2x/bugs/20/
# load the configure.ac from http://docbook2x.cvs.sourceforge.net/viewvc/docbook2x/docbook2X/configure.ac
# copy file to the source directory and recompile/reinstall the docbook2x 
 
make install-info

Leider ist mir das Übersetzen der Dokumentation am Anfang nur in Teilen gelungen, das Programm docbook2x-texi fehlt zu Beginn, ein Links auf das richtige Programm hilft dann zwar etwas, für den Folgefehler muss noch ein Patch für docbook2x eingespielt werden, dann funktioniert es.

Quellen

Git 2.5 unter Windows 10

Download der Git Software über https://git-scm.com/downloads, die Website erkennt die richtige Version und startet den Download.

Die Datei (Stand 08.2015) Git-2.5.0-64-bit.exe für die Installation starten:

  • Welcome to the Git Setup Wizard - Next
  • Legal information - Next
  • Verzeichnis auswählen- wie C:\Program Files\Git -Next
  • Componenten auswählen - alles Default
    • Git Components - Next
  • Selct Start Menu Folder - alles Default - git - Next
  • Adjust your PATH enviroment - alles Default
    • Git Path settings - Next
  • SSH executable auswählen - Option 1 „Use OpenSSH“ auswählen -Next
  • Configure line ending conversion - Da mein persönlicher Default Linux ist, Option 2 gewählt, für mehr Windows lastige Projekte ist Option 1 wohl besser -
    • Git Line ending - Next
  • Terminal emulator - Default - Use MinTTY - Next
  • Performance Tweaks - Nichts angewählt - Default - Next
  • Installation läuft
  • Finsh

Die Installation benötigt am Ende ~367 MB da auch ein kompletter kleiner minGW64 - Ein runtime environment for gcc dabei ist.

Nach der Installation kann im gewünschten Verzeichnis eine Bash Shell über das Kontext Menü im Explorer gestartet werden. Git unter Windows 10 - Kommando Shell starten In der Bash Shell kann wie unter Linux gewohnt gearbeitet werden.

Alternative Git Oberflächen unter MS Windows

Oberflächen für das Arbeiten mit Git unter Windows

SoucreTree

Git-Client Tower

Git Hub for Windows


Scripten unter MS Windows

Alles einchecken

cd <LAUFWERK>
cd <PROJKET_DIR>
 
set GIT_HOME=C:\Program Files\Git
 
"%GIT_HOME%\cmd\git.exe" add .
"%GIT_HOME%\cmd\git.exe" commit -m "Commit done by %USERNAME% at %DATE% %TIME%"
"%GIT_HOME%\cmd\git.exe" push
 

Bzw. in der Powershell

set-item -path env:GIT_HOME -value "C:\Program Files\Git"
$datum = Get-Date
 
 
& "$ENV:GIT_HOME\cmd\git.exe" add .
& "$ENV:GIT_HOME\cmd\git.exe" commit -m "Commit done by $env:UserName at $datum"
& "$ENV:GIT_HOME\cmd\git.exe" push

Alles auschecken:

cd <LAUFWERK>
cd <PROJKET_DIR>
 
set GIT_HOME=C:\Program Files\Git
 
"%GIT_HOME%\cmd\git.exe" pull

Git Client Konfiguration

Nach der Installation (unabhängig ob Linux oder Windows) muss git konfiguriert werden.

Unter Linux:

Globale Einstellungen lassen sich unter „/etc/gitconfig“ (alternativ „/usr/git/config“) hinterlegen, persönliche Einstellungen unter „~/.gitconfig“ (alternativ „~/.config/git/config“)

Unter Windows:

Die Bash Emulatoin verwendt als User Home den Windows Pfad (C:\Users\<username>) und legt dort die .gitconfig an.

Globale Konfiguration erfolgt mit „git –system“, hier zum Beispiel um den Editor zu setzen und Farben zu verwenden:

git config --system core.editor vi
git config --system color.ui true

User Konfiguration:

git config --global user.name "Gunther Pippèrr"
git config --global user.email "info @ pipperr.de"

Konfiguration (ließt über alle Konfigurationsdateien, letzter gefundener Wert wird verwendet) anzeigen:

#All
git config --list
 
#One Parameter 
git config core.editor
 
#kein CRLF auf Windows !
 
git config --global core.autocrlf false

Die wichtigsten git Kommandos

Neben den einzelnen Kommandos kann auch der Interactive Modus genützt werden mit zum Beispiel „git commit –interactive -m „My Git Test““

Neues Repository

Das git Repository liegt im Unterordner „.git“ des Projekt Verzeichnisses. Mit „git init“ wird das Repository angelegt.

# In das neue Projektverzeichnis wechseln
git init
Initialized empty Git repository in /srv/projectplan/.git/

Soll das Repository später verteilt werden besser gleich so anlegen:

git init --bare --shared

Datei Handling

Die Daten zum nächsten Commit hinzufügen und dann ein Commit mit Kommentar absetzen:

#add
git add plan1.xer
 
#add all new and changed files
git add -A
 
#check the Status
git status
 
#Commit
git commit -m "Start Project"
 
#show the last commit
git show

Immer beachten dass nur die Dateien commited werden die im Status „Staged“ sich befinden, d.h. die in den git Index aufgenommen wurden. Wird eine Datei geändert, wird die geänderte Datei nicht automatisch aufgenommen, sondern muss dem git Index hinzugefügt werden. Will man das „git add“ auf jede geänderte Datei vermeiden, den commit mit der Option „-a“ absetzen.

Übersicht über den Status einer Datei in Git:

 Git File status Overview

Dateien ausschließen mit einem „.gitignore“ im Wurzel/Stammpfad des neuen Projektes (Gute Beispiele siehe unter https://github.com/github/gitignore):

cd <root path of your project
 
#Create first on windows
touch .gitignore
 
vi .gitignore
 
#Ignore all tmp files
*.tmp
 
# but add this tmp file (overwrite rule 1)
!myprojekt.tmp
 
# ignore all files in the log directory
log/
 
#Ignore all log file in directroy trace
trace/**/*.log

Dateien von Platte und aus dem Repository löschen:

git rm <myilename>
git status

Dateien nur aus dem Repository löschen (Daten bleiben auf Platten enthalten und können dann in .gitignore aufgenommen werden und nicht wieder neu eingecheckt zu werden) mit der Option „–cached“:

git rm --cached <myilename>
git status

Dateien umbennenen oder verschieben

git mv <myilename>
git status

Commit Handling

Den letzen Commit Kommentar bearbeiten:

git commit --amend

Dateien den letzen Commit hinzufügen:

git add <file_name>
git commit --amend

Letze Änderung an einer Datei wieder rückgängig machen:

git reset Head <filename>
git checkout HEAD <filename>

Alles wieder zurück setzen auf den letzten Commit im Master:

!!!! alle Dateien die auf new File stehen werden gelöscht !!!!!! Müssen zuvor unstaged werden !!!!!
git reset --hard

⇒ Falls danach ein Undo notwendig wird ⇒https://stackoverflow.com/questions/5788037/recover-from-git-reset-hard/5788069

git reflog show
git reset HEAD@{1} 
git push 

 Overview git rest

Die letzen Commits anzeigen:

#All
git log
 
#Bessere Ausgabe
git log --oneline
 
 
#Formated
git log --pretty=format:"%cd  - %an -  %s"
 
#Last 9 commits
git log --pretty=oneline -9
 
#last commit
git show

Wer hat was an einer Datei geändert mit „git blame <filename>“

git blame readme.txt

Branch Handling und stash Funktionalität

Auf welchen Branch arbeite ich geraden:

git branch

Einen neuen Branch anlegen mit „git branch <branch_name>:

git branch branch_gpi

Auf den neuen Branch umschalten

git  checkout branch_gpi
# Daten ändern/hinzufügen
git add -A
git commit -m "start new branch"
git status

Auf den alten Branch zurückschalten:

git  checkout master
git status

Unser Änderungen in den Master einarbeiten

git merge branch_gpi

Eine Branch löschen:

#wiht upper D also if not merged!
git branch -D branch_gpi

Mit „stash“ kann der Inhalt der Working Directory auf einen „Stack“ gelegt werden und damit wird zum letzten Commit Punkt zurück gesprungen

git stash

Nun können Änderungen am letzen Release durchgeführt und später können die vorherigen Änderungen wieder eingearbeitet werden

„stack“ wieder einfügen:

git stash apply

HEAD anzeigen lassen auf welchen Branche das zeigt!

git symbolic-ref HEAD

Übersicht:

 Git Branch and stash

Eine gute Übersicht siehe auch hier ⇒ http://nvie.com/posts/a-successful-git-branching-model/

Mit Remote Repositories arbeiten

Es wird immer auf einer lokalen Kopie des Remote Repository gearbeitet.

Herunterladen und damit lokales Repository anlegen:

git clone https://github.com/git/git

Prüfen wie die URL lautet:

git remote -v

Aktuelle Version landen (Fetch), aber nicht mergen! Merge muss mit „git merge“ im Anschluss erfolgen!

git fetch
#Bei Bedarf
git merge

Update from global mit „git pull [remote-name]“, Merge mit der bestehenden Stand des lokalen Working Directory, wie ein „git fetch“ und ein „git merge“ zusammen

git pull

Meine Commits hochladen mit „git push [remote-name] [branch-name]“ :

git push

Auf Neues prüfen mit „git remote show [remote-name]“:

git remote show

Übersicht: Git Remote

Ein Repository lokal klonen

Als URL wird das Filesystem angegeben:

git clone file:///srv/projectplan/ projectplan02

Ein Repository über ssh klonen

git clone root@primaeppmp151:/srv/projectplan/ projectplan03

Ein Repository umziehen

Git Repository aus orginal Quelle clonen.

URL umsetzen

git remote rm origin
git remote add origin https://gitxxxxxx.org/yyyyyy

Daten in das neue Repository übertragen:

 git push -u origin --all

Das git Repository pflegen

Manuell die Maintenance auf dem Repository anstossen:

git gc

Wieviele Objekte:

git count-objects -v

Siehe auch ⇒ Git-Internals-Maintenance-and-Data-Recovery

Einen Git Patch erstellen

Mit einem Patch über Git werden alle Änderungen in eine Branch in eine Datei übernommen, diese Änderungen können dann in den Master eingespielt werden. Damit muss der Entwickler den Master nicht direkt „commiten“ kann aber seine Änderungsvorschläge an den Maintainer des Codes einfach als eine Datei senden. Der Maintainer kann dann diese Patch in den Master einspielen und diesen commiten.

Branch mit dem Bug Fix

Eine Patch mit allen Änderungen des aktuellen Branches gegenüber dem Master anlegen:

git format-patch master --stdout > fix_gpi.patch

Auf dem Master Branch Prüfen:

git apply --stat fix_gpi.patch
git apply --check fix_gpi.patch

Einspielen:

#Apply mit Tag um später das besser nachvollziehen zu können
git am --signoff < fix_gpi.patch

Übersicht über die wichtigsten Kommandos

KommandoBedeutungKommentar
git help <befehl> Man Page zu dem Befehl anzeigen-
git init Neues Repository anlegen Im Wurzel/Stammpfad des neuen Projektes
git clone https://<url to git repository> <new name> Ein Repository clonen und mit neuen Namen anlegen
git fetch Aktuellen Stand von remote ladenAber nicht mergen!
git pul Aktuellen Stand von remote laden und mergen-
git push Commit auf den Server puschen -
git add <file> Datei hinzufügen Auch mit * wie *.xer möglich
git commit -am „Comment“ Ein Commit durchführen mit -m Kommentar hinterlegen, mit -a alle bekannten Dateien mit aufnehmen
git add -A Alle neuen Dateien im Baum zum nächsten Commit hinzufügen -
git status Status der neuen/geänderten Dateien im RepositoryKurze Übersicht mit git status -s
git diff Alle Änderungen anzeigen mit „git diff <dateiname> nur auf einer Datei
git rm <file>Eine Datei löschen mit –cached Schalte Datei auf Platte belassen!
git mv <file>Eine Datei umbenennen oder verschieben -
git log Historie anzeigen mit Schalter die letzten Änderungen wie „git log -p -1“ oder formatieren mit git log –pretty=format:“%cd - %an - %s“
git show Letzes Commit anzeigen-
git blame Wer hast zuletzt in welcher Zeile des Codes die Änderung eingecheckt wie git blame –date=format:%d.%m.%Y-%H:%M <Dateiname> mit angepassten Datumsformat
git commit –amend Den letzten Commit anpassen Wenn sich nichts anders geändert hat nur den Kommentar anpassen
git reset Head <filename> Datei aus dem Index entfernen Nicht mehr im Status „Staged“
git checkout HEAD <filename> Datei mit der letzten Version vom letzten Commit überschreiben-
git gc Git Repository „aufräumen“ -

Eine gute Zusammenfassung der git Befehle mit Beispielen ⇒ http://gitref.org/index.html

Der Git diff Befehl

Aufgabe: Alle Unterschied in einer Datei vom ersten Einchecken bis zum aktuellen Master aufzeigen un in einer Logdatei protokolleren.

git diff –outout=<dif_log_name> from..to filename :

 git diff --output=dif.log fe145a7..HEAD  /e/GPI/entwicklung/code/04-PLSQL/PKG_GPI.pkb

siehe auch ⇒https://www.git-tower.com/learn/git/ebook/en/command-line/advanced-topics/diffs/

Eine gelöschte Datei wieder herstellen

Mit „git show HEAD~<anzahl zurück>:<name der Datei>“ kann der Inhalt einer Datei aus einem der letzten Commits angezeigt werden. Damit läßt sich der Inhalt dann wieder rekonstruieren, ohne gleich den ganzen Source Code auf diesen Commit zurück setzen zu müssen.

Beispiel, vor 2 Commits war die Datei noch vorhanden, leider gelöscht und dann commited, nun wieder herstellen:

 git show HEAD~2:install_ahf.yml > install_ahf.yml

Von Mercurial nach Git migrieren

Hooks verwenden um code zu deployen

Idee: Auf dem Server ein Git Repository anlegen, bei einem erfolgreichen Pull vom Master werden die Daten gleich verteilt ( ohne das .git directory !)

Hook anlegen in .git/hook Directory:

#!/bin/sh 
GIT_WORK_TREE=/c/work/server git checkout -f

siehe auch https://mikeeverhart.net/2013/01/using-git-to-deploy-code/


Einen Git Server aufsetzen

Ziel: Einen Git Server unter Linux mit einer komfortablen Weboberfläche aufsetzen

Übersicht über Web Interfaces für Git ⇒ https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Web_Interfaces

SSH nützen

Am einfachsten kann das SSH Protokoll für eine verteilte Git Umgebung eingesetzt werden. Dies ist zum Beispiel sehr praktisch um in einer Server Umgebung Konfigurationsdateien etc. über git zu verwalten.

Spezielle Firewall Regeln sind dann nicht notwendig, die bestehenden Wartungszugänge können genützt werden.

Auf einem zentralen Server das Repository leer anlegen

mkdir sqlscripts
cd sqlscripts
git init --bare --shared

Mit Dateien füllen und entsprechend die erste Version anlegen.

Die SSH Zugänge mit Keys hinterlegen (falls möglich siehe für die Keys SSH Key's verwenden

Das Repository kann nun über ssh auf die entsprechenden Server geklont werden

git clone root@primaeppmp151:/srv/sqlscripts/ sqlscripts

gitlab

Installationsanleitung und Download über https://about.gitlab.com/downloads/ oder mit dem https://bitnami.com/stack/gitlab/installer auf einen eigenen Server.

Anbinden an das AD ⇒ https://www.caseylabs.com/setup-gitlab-ce-with-active-directory-authentication/

Test mit einer virtuellen Maschine

Für einen ersten Test kann auch hier eine Virtuelle Maschine heruntergeladen werden ⇒ https://bitnami.com/stack/gitlab , bzw. https://bitnami.com/stack/gitlab/virtual-machine

Datei herunterladen und über VMWare Workstation die bitnami-gitlab-8.14.3-0-linux-ubuntu-14.04-x86_64.ova importieren, z.b. nach „R:\vmware\GITSRV01“ und die VM Appliance starten.

Der User heißt bitnami, Password bitnami, das Password muss beim ersten Login gesetzt werden.

System vorbereiten:

# Keyboard auf Deutsch
sudo apt-get install console-common
 
#Zeitzone setzen
sudo dpkg-reconfigure tzdata
 
# Vmware Tools
apt-get install open-vm-tools

Leider liegt bei dieser Maschine nun ein Problem mit der Netzwerk Konfiguration vor, DHCP funktioniert nicht, sorgfältig VMWare Netzwerk Eigenschaften und Status der Netzwerkkarte überprüfen.

SSH einschalten:

$ sudo mv /etc/init/ssh.conf.back /etc/init/ssh.conf
$ sudo start ssh

Aufruf der Weboberfläche über <ip-Adresse-der-appliance>:80 aufrufen und mit „user@example.com“ und Password „bitnami1“ anmelden und Konfiguration durchführen.

Weiter siehe http://git-scm.com/book/en/v2/Git-on-the-Server-GitLab

Wichtig! Passwörter sorgfältig ausschreiben! Nachträglich macht das sonst keinen Spass mehr .-(

Quellen

Quellen

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
prog/git_server.txt · Zuletzt geändert: 2022/06/13 08:36 von gpipperr