RailsConf 2009: Smacking Git Around - Advanced Git Tricks
Einer der bisher besten Vorträge wurde am heutigen Nachmittag von Scott Chacon zum Thema "Advanced Git Tricks" gehalten (Foliensatz, Cheat-Sheet). Bemerkenswert war insbesondere seine Lösung in Bezug auf Submodule, bei denen in Git normalerweise kein push auf den Remote-Host möglich ist. Tatsächlich verwendet Scott kein richtiges Submodul, sondern umgeht das Problem in der nachfolgend beschriebenen Vorgehensweise:
- Ausgehend von einem Projekt mit Git-Repository soll ein weiteres Repository als Subprojekt eingebunden werden. Als Beispiel verwendet Scott einen Fork des Rack-Projektes, welches er dem eigentlichen Projekt als zusätzliche Quelle hinzufügt:
$ git remote add rack_remote git@github.com:schacon/rack.git $ git fetch rack_remote
Anschließend wird ein lokaler Branch erzeugt$ git checkout -b rack_branch rack_remote/master
und dann wieder auf master zurück gewechselt:$ git checkout master
- Der Branch wird nun in die Arbeitskopie als Unterverzeichnis
rackeingehängt:$ git read-tree --prefix=rack/ -u rack_branch
Auf diese Art und Weise lässt sich Rack als Unterverzeichnis in das eigentliche Projekt einchecken:$ git add rack $ git commit -m 'added rack code'
- Angenommen, der lokale Benutzer führt nun Änderungen in Rack durch:
$ vim rack/lib/rack.rb $ git commit -am 'added awesome to rack'
Um diese Änderungen in das ursprüngliche Repository zu schieben, muss im Anschluss auf den Branch gewechselt werden:$ git checkout rack_branch $ git merge -s subtree --no-commit --squash master
Die Merge-Strategie subtree erlaubt es, den master von Rack in den Branch im Unterverzeichnis zu mergen. Außerdem werden durch die Option *--squash* mehrere Commits im Branch zu einem einzigem Commit zusammengefasst, so dass die lokale Historie keinen Übergang in das möglicherweise fremde Projekt findet.
Für weitere Tipps zu Git lohnt sich auf jeden Fall ein Blick in das Cheat-Sheet.
Schlüsselwörter: git, railsconf
Schlüsselwörter
- berlin (2)
- blog (5)
- browser (2)
- cocoaheads (5)
- dropbox (1)
- git (7)
- idisk (1)
- iphone (27)
- javascript (2)
- kurztip (4)
- linktips (17)
- mac (9)
- macruby (1)
- objective-c (7)
- ortung (1)
- programmierung (21)
- rails (1)
- railsconf (7)
- ruby (6)
- ruby on rails (7)
- schnipsel (13)
- server (2)
- spiele (1)
- statistiken (3)
- stuttgart (3)
- testen (4)
- tidy (1)
- versionskontrolle (5)
- wwdc (1)
- xcode (9)
- xml (1)
Kommentare
Von Thomas Dohmke vor 308 Tagen hinzugefügt
Nachtrag: Wer Rails und Rake verwendet, kann statt der händischen Eingabe der Schritte auch vier Rake-Tasks definieren.