HOWTO:Git: Unterschied zwischen den Versionen

Aus Fachschaft_Informatik
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Hier wird erklärt, wie man in seinem Uni-Home ein Git-Repo einrichtet, in das auch andere Studenten pushen/pullen können. Man sollte dabei beachten, dass bei…“)
 
(Überarbeitung des Skriptes)
 
(4 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Hier wird erklärt, wie man in seinem Uni-Home ein Git-Repo einrichtet, in das auch andere Studenten pushen/pullen können. Man sollte dabei beachten, dass bei dieser Methode '''jeder''' der die URL zum Repo kennt, pushen/pullen kann. Wenn man das Verschmerzen kann, hat man sehr zügig ein Repo und kann anfangen zu arbeiten.
Hier wird erklärt, wie man in seinem Uni-Home ein Git-Repo einrichtet, in das auch andere Studenten pushen/pullen können. Man sollte dabei beachten, dass bei dieser Methode '''jeder''' der die URL zum Repo kennt, pushen/pullen kann. Wenn man das verschmerzen kann, hat man sehr zügig ein Repo und kann anfangen kollaborativ zu arbeiten.
 
== Workaround bei Zugriffsbeschränktem Homeverzeichnis ==
 
Wenn alle Teilnehmer im gleichen Jahrgang sind, kann dieser Workaround ignoriert werden.
Da die studentischen Homeverzeichnisse nicht homogen organisiert sind, sondern einer gewachsenen Struktur entspringen, muss als erstes überpüft werden, ob alle Teilnehmer Zugriff auf den übergeordneten Ordner haben.
Also einmal in dem Home-Verzeichnis, wo das Repo später liegen soll folgendes prüfen:
cd ~/..
pwd
 
erzeugt z.B. folgende Ausgabe:
/informatik2/students/home
 
Nun müssen alle Teilnehmer, die Zugriff auf das Repo erhalten sollen prüfen, ob sie Zugriff auf den Ordner haben.
Falls das nicht der Fall sein sollte, muss ein anderer Teilnehmer das Repo bei sich einrichten.
 
== Grundstruktur Einrichten ==
 
Diese Schritte müssen nur einmalig gemacht werden.


Um anderen das Navigieren in das eigene Homeverzeichnis zu erlauben, muss das Execute-Bit gesetzt werden.
Um anderen das Navigieren in das eigene Homeverzeichnis zu erlauben, muss das Execute-Bit gesetzt werden.
Damit ist es für andere nicht möglich den Inhalt des Ordners einzusehen.
Damit ist es für andere nicht möglich den Inhalt des Ordners einzusehen.
In diesem Fall wird allen Mitgliedern der der gesetzten Gruppe das Navigieren erlaubt.
(Ich hoffe mal alle Studenten sind in der selben Gruppe)


  chmod g+x ~
  chmod a+x ~
 
Ein Ordner für alle Repos macht sich wahrscheinlich gut.
 
mkdir ~/gitrepos
 
Dieser muss für alle navigierbar sein. Also muss das Execution-Bit gesetzt werden.
 
chmod a+x ~/gitrepos
 
== Repo Einrichten ==


Nun muss noch die Ordnerstruktur angelegt werden. Um etwas "Sicherheit" zu gewähren macht sich eine zufällige Buchstabenkombination am Ende ganz gut. Die zwei Ebenen und die etwas sonderbare Benennung sind gewollt und sind so recht praktikabel.
Nun muss noch die Ordnerstruktur angelegt werden. Um etwas "Sicherheit" zu gewähren macht sich eine zufällige Buchstabenkombination am Ende ganz gut. Die zwei Ebenen und die etwas sonderbare Benennung sind gewollt und sind so recht praktikabel.


  mkdir -p ~/gitrepos/fgi3-sem-3hoghdf8gu908erg/fgi3-sem.git
  mkdir -p ~/gitrepos/fgi3-sem-hhoghdf8gu908erg/fgi3-sem.git


Ein zweites Repo würde man dann z.B. anlegen unter
Ein zweites Repo würde man dann z.B. anlegen unter
Zeile 21: Zeile 48:
* Durch den Präfix "fgi3-sem-" auf erster Ebene sieht man bei einem ls im Ordner gitrepos direkt um welche Repos es sich handelt
* Durch den Präfix "fgi3-sem-" auf erster Ebene sieht man bei einem ls im Ordner gitrepos direkt um welche Repos es sich handelt
* Man hat die Gewissheit, dass niemand die Repo-Url einfach erraten kann und somit Zugriff aufs Repo erlangt
* Man hat die Gewissheit, dass niemand die Repo-Url einfach erraten kann und somit Zugriff aufs Repo erlangt
Die Verzeichnisse müssen für alle navigierbar gemacht werden.
chmod -R a+x ~/gitrepos/fgi3-sem-hhoghdf8gu908erg


Nun muss man in das Verzeichnis *.git wechseln
Nun muss man in das Verzeichnis *.git wechseln
Zeile 26: Zeile 57:
  cd ~/gitrepos/fgi3-sem-3hoghdf8gu908erg/fgi3-sem.git
  cd ~/gitrepos/fgi3-sem-3hoghdf8gu908erg/fgi3-sem.git


und initialisiert ein neues Repo. Die shared=0660 Option gibt dem Besitzer und der Gruppe Schreib- und Leserechte.
und initialisiert ein neues Repo ohne Working-Directory (bare). Die shared=0666 Option gibt '''allen''' Schreib- und Leserechte.


  git init --bare --shared=0660
  git init --bare --shared=0666


Jetzt muss nur noch der Pfad zum clonen ermittelt werde.
Jetzt muss nur noch der <Pfad> zum clonen ermittelt werde.


  pwd
  pwd
Wer diese einzelnen Schritte nicht jedes Mal wiederholen möchte kann auch einfach das folgende Bash-Skript nutzen.
#!/bin/bash
if [ $# == 0 ]; then
    read -p "Name des Git-Repositorys: " folder
else
    folder=$1
fi
{
currfolder=$PWD
rnd_string=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)
mkdir -p $HOME/gitrepos/$folder-$rnd_string/$folder.git
chmod -R a+x $HOME/gitrepos/$folder-$rnd_string
cd $HOME/gitrepos/$folder-$rnd_string/$folder.git
git init --bare --shared=0666
path_to_gitfolder=$PWD
cd $currfolder
} >&-
echo $path_to_gitfolder


Nun kann jeder andere mit einem ssh-Zugang wie folgt clonen.
Nun kann jeder andere mit einem ssh-Zugang wie folgt clonen.
Zeile 38: Zeile 96:
  git clone <Kennung-des-Zugreifenden>@rzssh1.informatik.uni-hamburg.de:<Pfad>
  git clone <Kennung-des-Zugreifenden>@rzssh1.informatik.uni-hamburg.de:<Pfad>


Angenommen 5kumpe hat das Repo angelegt und 11sieli will drauf zugreifen, sähe der Befehl folgendermaßen aus.
Angenommen 11sieli hat das Repo angelegt und 5kumpe will drauf zugreifen, sähe der Befehl folgendermaßen aus.


  git clone 11sieli@rzssh1.informatik.uni-hamburg.de:/informatik2/students/home/5kumpe/gitrepos/fgi3-sem-3hoghdf8gu908erg/fgi3-sem.git
  git clone 5kumpe@rzssh1.informatik.uni-hamburg.de:/informatik2/students/home/11sieli/gitrepos/fgi3-sem-3hoghdf8gu908erg/fgi3-sem.git


Wundere dich nicht, wenn der Pfad zu deinem Home davon abweicht. Bei verschiedenen Jahrgängen kann das durchaus der Fall sein.
Wundere dich nicht, wenn der Pfad zu deinem Home davon abweicht. Bei verschiedenen Jahrgängen kann das durchaus der Fall sein.


[[Kategorie:HOWTO]]
[[Kategorie:HOWTO]]

Aktuelle Version vom 16. Dezember 2014, 14:22 Uhr

Hier wird erklärt, wie man in seinem Uni-Home ein Git-Repo einrichtet, in das auch andere Studenten pushen/pullen können. Man sollte dabei beachten, dass bei dieser Methode jeder der die URL zum Repo kennt, pushen/pullen kann. Wenn man das verschmerzen kann, hat man sehr zügig ein Repo und kann anfangen kollaborativ zu arbeiten.

Workaround bei Zugriffsbeschränktem Homeverzeichnis[Bearbeiten]

Wenn alle Teilnehmer im gleichen Jahrgang sind, kann dieser Workaround ignoriert werden. Da die studentischen Homeverzeichnisse nicht homogen organisiert sind, sondern einer gewachsenen Struktur entspringen, muss als erstes überpüft werden, ob alle Teilnehmer Zugriff auf den übergeordneten Ordner haben. Also einmal in dem Home-Verzeichnis, wo das Repo später liegen soll folgendes prüfen:

cd ~/..
pwd

erzeugt z.B. folgende Ausgabe: /informatik2/students/home

Nun müssen alle Teilnehmer, die Zugriff auf das Repo erhalten sollen prüfen, ob sie Zugriff auf den Ordner haben. Falls das nicht der Fall sein sollte, muss ein anderer Teilnehmer das Repo bei sich einrichten.

Grundstruktur Einrichten[Bearbeiten]

Diese Schritte müssen nur einmalig gemacht werden.

Um anderen das Navigieren in das eigene Homeverzeichnis zu erlauben, muss das Execute-Bit gesetzt werden. Damit ist es für andere nicht möglich den Inhalt des Ordners einzusehen.

chmod a+x ~

Ein Ordner für alle Repos macht sich wahrscheinlich gut.

mkdir ~/gitrepos

Dieser muss für alle navigierbar sein. Also muss das Execution-Bit gesetzt werden.

chmod a+x ~/gitrepos

Repo Einrichten[Bearbeiten]

Nun muss noch die Ordnerstruktur angelegt werden. Um etwas "Sicherheit" zu gewähren macht sich eine zufällige Buchstabenkombination am Ende ganz gut. Die zwei Ebenen und die etwas sonderbare Benennung sind gewollt und sind so recht praktikabel.

mkdir -p ~/gitrepos/fgi3-sem-hhoghdf8gu908erg/fgi3-sem.git

Ein zweites Repo würde man dann z.B. anlegen unter

mkdir -p ~/gitrepos/vis-fjouh2o4tuh234nof/vis.git

Diese Art der Bennung hat folgende Vorteile:

  • Beim clonen wird der Ordner fgi3-sem ohne die kryptische Buchstabenkombination benannt
  • Durch den Präfix "fgi3-sem-" auf erster Ebene sieht man bei einem ls im Ordner gitrepos direkt um welche Repos es sich handelt
  • Man hat die Gewissheit, dass niemand die Repo-Url einfach erraten kann und somit Zugriff aufs Repo erlangt

Die Verzeichnisse müssen für alle navigierbar gemacht werden.

chmod -R a+x ~/gitrepos/fgi3-sem-hhoghdf8gu908erg

Nun muss man in das Verzeichnis *.git wechseln

cd ~/gitrepos/fgi3-sem-3hoghdf8gu908erg/fgi3-sem.git

und initialisiert ein neues Repo ohne Working-Directory (bare). Die shared=0666 Option gibt allen Schreib- und Leserechte.

git init --bare --shared=0666

Jetzt muss nur noch der <Pfad> zum clonen ermittelt werde.

pwd

Wer diese einzelnen Schritte nicht jedes Mal wiederholen möchte kann auch einfach das folgende Bash-Skript nutzen.

#!/bin/bash

if [ $# == 0 ]; then
    read -p "Name des Git-Repositorys: " folder
else
    folder=$1
fi


{
currfolder=$PWD

rnd_string=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)

mkdir -p $HOME/gitrepos/$folder-$rnd_string/$folder.git
chmod -R a+x $HOME/gitrepos/$folder-$rnd_string
cd $HOME/gitrepos/$folder-$rnd_string/$folder.git
git init --bare --shared=0666

path_to_gitfolder=$PWD
cd $currfolder
} >&-

echo $path_to_gitfolder

Nun kann jeder andere mit einem ssh-Zugang wie folgt clonen.

git clone <Kennung-des-Zugreifenden>@rzssh1.informatik.uni-hamburg.de:<Pfad>

Angenommen 11sieli hat das Repo angelegt und 5kumpe will drauf zugreifen, sähe der Befehl folgendermaßen aus.

git clone 5kumpe@rzssh1.informatik.uni-hamburg.de:/informatik2/students/home/11sieli/gitrepos/fgi3-sem-3hoghdf8gu908erg/fgi3-sem.git

Wundere dich nicht, wenn der Pfad zu deinem Home davon abweicht. Bei verschiedenen Jahrgängen kann das durchaus der Fall sein.