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 TODOSo 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 -> masterServerseitige Änderungen lassen sich jetzt mit "git pull" herunterladen.
Die wichtigsten svn-Befehle in git-Übersetzung:
Aktion | SVN | Git |
Server-Stand herunterladen | svn checkout http://svn.domain.com/repo | git clone http://git.domain.com/repo.git |
Änderungen hochladen | svn commit file1 file2 -m 'commit message' | git commit file1 file2 -m 'commit message'git push |
Geänderte Dateien | svn status | git status(Gewöhnungsbedürftige Anzeige) |
Änderungsprotokoll | svn log file1.txt | git log file1.txt |
Ungesicherte Änderungen | svn diff file1.txt | git diff file1.txt |
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