Git: Unterschied zwischen den Versionen

Aus Ethersex_Wiki
Wechseln zu: Navigation, Suche
K (Was bedeutet dezentrales System?: typo)
(Git Schnippsel)
Zeile 20: Zeile 20:
  
 
* Was muss man machen damit man z.b. das aktuelle EtherSex in sein eigenes Projekt mergen kann:
 
* Was muss man machen damit man z.b. das aktuelle EtherSex in sein eigenes Projekt mergen kann:
# Das remote Repository ( EtherSex ) hinzufügen mit:
+
# Das remote Repository ( EtherSex ) hinzufügen mit (nur wenn man bei github angemeldet ist):
git remote add ethersex ssh://git.brokenpipe.de/gitroot/ethersex
+
git remote add ethersex git@github.com:ethersex/ethersex.git
 
# Die Änderungen von ethersex in Repository holen:
 
# Die Änderungen von ethersex in Repository holen:
 
git pull ethersex master
 
git pull ethersex master

Version vom 8. August 2009, 10:39 Uhr

Was ist Git?

Git ist ein Versionsverwaltungssystem für Quellcode, es speichert also die Zwischenstände bei der Entwicklung einer Software und bietet Zugriff auf diese Sogenannte History. Dies ist zum Beispiel wichtig, wenn man herausfinden will in welcher Version ein Bug eingeschleppt wurde oder man auf eine frühere Version zugreifen muss. Außerdem sollte ein Versionsverwaltung es erleichern mit andern Entwicklern zusammenzuarbeiten.

Ein anderes solches Versionsverwaltungssystem ist zum Beispiel CVS oder Subversion. Jedoch besteht ein gravierender Unterschied zwischen diesen und Git: CVS und Subversion haben eine zentrale Struktur. Also die gesamte History ist auf einem Server gespeichert und die Nutzer haben nur eine Arbeitskopie. Dies ist natürlich ein Problem, wenn der Server wegstirbt, dann können a) die Nutzer keine weitere Versionen der Software in die History einbringen oder b) noch schlimmer könnte die gesamte History verloren gehen, wenn der Betreiber des CVS Dienstes keine Sicherungskopie der Daten hat. Git dagegen verwendet ein dezentrales System.

Was bedeutet dezentrales System?

Dezentral heißt, dass jeder Benutzer eine Kopie aller Daten lokal auf seiner Festplatte gespeichert. Er ist also sozusagen sein eigener Betreiber. Er kann ohne Netzzugang neue Versionen zur History hinzufügen und auf die bisherige History zugreifen. Doch man gelangt so unweigerlich zur Frage, wie Git es mehreren Entwicklern ermöglicht gemeinsam an einem Projekt zu arbeiten? Nunja dies ist eigentlich ganz einfach, er "pulled" die Teile der History die er noch nicht hat von dem Benutzer der diesen Teil beigetragen oder von jemandem der diesen schon selbst gepulled hat. Git kümmert sich dann in den meisten Fällen automatisch darum, dass die Daten zu einem sinnvollen Ergebnis zusammengefasst werden.

Jedoch muss man Git nicht unbedingt rein Dezentral benutzen. Man kann auch ein gemeinsam genutztes Depot verwenden, dass dann auf einem Server abgelegt wird. Das vorgehen dabei ist es dann seine Änderungen zu pushen, also quasi auf den Server zu drücken. Von dort können dann andere den Stand wiederum in ihr eigenes Verzeichnis pullen. Dies bietet dann Vorteile beider Welten, der zentralen und der dezentralen: die Daten sind nicht nur an einen Server gebunden, und können damit nicht verloren gehen, bzw. unereichbar sein, sondern auch die globalere Verfügbarkeit des aktuellen Codes (sollte der Server ausnahmsweise mal erreichbar sein XD ) wird gewährleistet.

Ein weiterer Vorteil des Speichern des gesamten Depots auf der eigenen Festplatte ist, dass der Zugriff darauf immer schneller ist, als wenn die Daten erst durch das Netz geschickt werden. Dies führt dazu, dass man öfters mal eine Version zur History hinzufügt, und man damit die Entwicklung in kleineren Schritten nachvollziehen kann.

Links:

Git Schnippsel

  • Was muss man machen damit man z.b. das aktuelle EtherSex in sein eigenes Projekt mergen kann:
  1. Das remote Repository ( EtherSex ) hinzufügen mit (nur wenn man bei github angemeldet ist):

git remote add ethersex git@github.com:ethersex/ethersex.git

  1. Die Änderungen von ethersex in Repository holen:

git pull ethersex master

  1. Eventuell auftretende Konflikte, die GIT meldet, beseitigen:

$editor $konfliktdatei.c

  1. Nach der Konfliktbeseitigung noch committen:

git commit -m 'merge branch ethersex/master'