Seitenanfang

git und github für SVN-Umsteiger

Dieser Post wurde aus meiner alten WordPress-Installation importiert. Sollte es Darstellungsprobleme, falsche Links oder fehlende Bilder geben, bitte einfach hier einen Kommentar hinterlassen. Danke.


Ich bin svn-User und alle meine Begegnungen mit github endeten in Frust, denn die Useability ist mies, auch wenn sich in den letzten Jahren einiges getan hat. Git ist das gleiche wie github, oder? Dennoch, ich möchte ein OpenSource-Projekt unterstützen und dieses nutzt nunmal github, also bleibt mir keine andere Wahl.Als Erstes: Das Tool "git" hat ansich nichts mit der Webseite "github" zu tun, trotz der Namensgleichheit. "git" ist ein Tool zur Versionskontrolle genau wie "svn". Wer "svn checkout" gewohnt ist, bekommt bei git Probleme, denn hier heißt es "git clone". Ein bisschen mehr Kompatibilität würde den Umstieg für svn-User mit Sicherheit einfacher machen, aber UI ist Glückssache - ein weiterer Minuspunkt für git, denn das Tool ist lange nach svn entstanden, es wäre nicht schwer gewesen sich an etablierten (svn-)Standards zu orientieren.
sewi@thinkpad-sw:~/tmp$ git clone https://github.com/gearman/perl-Gearman-Client.git Gearman-Client/Cloning into 'Gearman-Client'...remote: Counting objects: 870, done.remote: Compressing objects: 100% (241/241), done.remote: Total 870 (delta 533), reused 869 (delta 532)Receiving objects: 100% (870/870), 143.82 KiB | 155 KiB/s, done.Resolving deltas: 100% (533/533), done.sewi@thinkpad-sw:~/tmp$ ls Gearman-Client/CHANGES debian Gearman-Client.spec HACKING lib Makefile.PL MANIFEST MANIFEST.SKIP t TODO
So weit, so gut, meine lokale Kopie ist fertig. Eine kleine Änderung an einer Datei und ich bin bereit für den ersten Commit:
sewi@thinkpad-sw:~/tmp/Gearman-Client$ git commit -m 'Test commit' HACKING[master 012e04e] Test commit 1 file changed, 2 insertions(+)
Der Commit dauerte nur einen Wimpernschlag und ich konnte ganz einfach ohne Zugangsdaten committen. Wie bitte? Nein, so einfach ist es natürlich nicht: Ein "git commit" arbeitet immer nur lokal, die Änderungen sind noch längst nicht auf dem Server angekommen. Immerhin: Die Standard-Befehle "git commit -m ''" und "git log" funktionieren wie von svn gewohnt, "git status" allerdings nicht so ganz.

Meine Änderungen sind fertig, committen, tschuldigung, hochladen kann ich sie jetzt allerdings nicht.

Zunächst ist eine Anmeldung bei github notwendig. Github ist kostenpflichtig, OpenSource-Projekte werden derzeit allerdings kostenlos aufgenommen und so gibt es auch eine kostenlose Anmeldung, die allerdings mit einer Negativ-Überraschung aufwartet: github hat seine eigenen Vorstellungen von sicheren Passwörtern und setzt diese auch gnadenlos durch: Mindestens 7 Zeichen und eines davon eine Ziffer. Na gut, wofür gibt es schließlich pwgen.

Um an einem Projekt teilzunehmen, muss man (nach der Anmeldung bei github) das Projekt im Web aufrufen und oben rechts auf "Fork" klicken. Damit wird eine eigene Kopie des Repositories erstellt und diese muss gecloned werden.

# Erstmal meine Änderungen in Sicherheit bringen:sewi@thinkpad-sw:~/tmp$ mv Gearman-Client/ Gearman-Client.github_orig# Mein neues Repository herunterladen:sewi@thinkpad-sw:~/tmp$ git clone https://github.com/sewi-cpan/perl-Gearman-Client.git Gearman-Client/Cloning into 'Gearman-Client'...remote: Counting objects: 870, done.remote: Compressing objects: 100% (241/241), done.remote: Total 870 (delta 533), reused 869 (delta 532)Receiving objects: 100% (870/870), 143.82 KiB | 185 KiB/s, done.Resolving deltas: 100% (533/533), done.# Meine Änderungen rüberkopieren:sewi@thinkpad-sw:~/tmp$ cp -v Gearman-Client.gitclone/lib/Gearman/Client.pm Gearman-Client.gitclone/lib/Gearman/Worker.pm Gearman-Client/lib/Gearman/»Gearman-Client.gitclone/lib/Gearman/Client.pm“ -> »Gearman-Client/lib/Gearman/Client.pm“»Gearman-Client.gitclone/lib/Gearman/Worker.pm“ -> »Gearman-Client/lib/Gearman/Worker.pm“sewi@thinkpad-sw:~/tmp$ cp -v Gearman-Client.gitclone/CHANGES Gearman-Client/»Gearman-Client.gitclone/CHANGES“ -> »Gearman-Client/CHANGES“# Die Änderungen in die lokale Kopie des Repository committen:sewi@thinkpad-sw:~/tmp$ cd Gearman-Clientsewi@thinkpad-sw:~/tmp/Gearman-Client$ git commit CHANGES lib/Gearman/Worker.pm -m 'Update documentation of Gearman::Worker'[master 56f6dae] Update documentation of Gearman::Worker 2 files changed, 77 insertions(+), 9 deletions(-)
Jetzt muss ich die Änderungen nur noch irgendwie auf den github-Server bekommen. Das Hochladen erledigt "git push":
sewi@thinkpad-sw:~/tmp/Gearman-Client$ git pushUsername for 'https://github.com': sewi-cpanPassword for 'https://sewi-cpan@github.com':To https://github.com/sewi-cpan/perl-Gearman-Client.git   f0e7b5c..56f6dae  master -> master
Serverseitige Änderungen lassen sich jetzt mit "git pull" herunterladen.

Die wichtigsten svn-Befehle in git-Übersetzung:

AktionSVNGit
Server-Stand herunterladensvn checkout http://svn.domain.com/repogit clone http://git.domain.com/repo.git
Änderungen hochladensvn commit file1 file2 -m 'commit message'git commit file1 file2 -m 'commit message'git push
Geänderte Dateiensvn statusgit status(Gewöhnungsbedürftige Anzeige)
Änderungsprotokollsvn log file1.txtgit log file1.txt
Ungesicherte Änderungensvn diff file1.txtgit diff file1.txt
Eine etwas ausführlichere Anleitung zum forken von fremden Repositories findet sich bei Github.

Mein Fazit:

Git und svn haben wenig gemeinsam, auch wenn git ein paar nette Features wie den "lokalen commit" hat, ist es doch an einigen Stellen unnötig kompliziert und bei einem lokalen Datenverlust kann die fehlende serverseitige Kopie ziemlich schmerzhaft werden.

 

Noch keine Kommentare. Schreib was dazu

Schreib was dazu

Die folgenden HTML-Tags sind erlaubt:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>