Software nicht nur anwenden, sondern selber schreiben. Das Forum für die Software-Entwickler ist selbstverständlich weder auf ein bestimmtes Betriebssystem noch auf eine spezielle Programmiersprache festgelegt. Stellen Sie Fragen zu den richtigen Werkzeugen und diskutieren Sie Algorithmen.
Morgen zusammen,
ich arbeite gerade mit Leuten zusammen, die hauptsächlich unter Linux
oder Mac OS X unterwegs sind und ihre Projekte mit git versionieren.
Sie arbeiten teilweise mit Eclipse, bisher aber keiner mit egit,
sondern nur von der Kommandozeile aus, und verwenden innerhalb ihrer
Projekte symbolische Links des Dateisystem auf einen Ordner mit
gemeinsamen Ressourcen, wobei dieser Link in git auch versioniert
ist.
Unter Windows nach einem clone des Repository per egit wird mir der
symbolische Link einfach als Textdatei angelegt, die das Linkziel als
Inhalt hat. Soweit OK, ich brauche den tatsächlichen Link auf den
Ordner aber auch unter Windows, um die Projekte in Eclipse bauen zu
können, die auf die Ressourcen im verlinkten Ziel angewiesen sind.
Ich habe die Textdatei für den Link also einfach umbenannt und
Junctions so erstellt, wie unter den anderen Betriebssystemenn die
Links erzeugt würden.
Das funktioniert auch problemlos, bis ich ein git pull mache. Sobald
ich das mache und irgendwas vom master repository geholt wird, kriege
ich in egit eine merge Exception in genau den Verzeichnnissen, in
denen ich meine Junctions erstellt habe. Der Witz an der Sache ist
aber, dass an den symbolischen Links, den Inhalten in seinem Ziel
oder so überhaupt nichts geändert wurde. Eigentlich müsste git die
entsprechende Datei einfach nur ignorieren oder so. Nur habe ich aber
schon core.symlinks=false in der globalen Konfiguration und in der
des lokalen Repository gesetzt und egit sagt auch, dass dieser
Parameter in der "eefektiven" Konfiguration genutzt wird, ändert aber
am Problem nichts, die Exception kommt trotzdem. Sie kommt nur dann
nicht, wenn ich meinen Junction lösche und mit der normalen Textdatei
pulle.
.gitignore bringt nichts, weil das ja nur mein Problem ist und nicht
andere Mitarbeiter beeinflussen soll, .git/info/exclude ändert auch
nichts, weil der Ordner/Link ja ohnehin schon verwaltet wird und
exclude und .gitignore ja anscheinend nur nicht versionierte Dateien
berücksichtigen.
Die Exception:
Exception caught during execution of merge command.
org.eclipse.jgit.errors.CheckoutConflictException: Checkout conflict
with files:
TgCommonApp/assets/fonts
TgCommonApp/assets/fonts/Digital7Mono.ttf
TgCommonApp/assets/fonts/Scrip.ttf
TgCommonApp/assets/fonts/TGroteskFet.ttf
TgCommonApp/assets/fonts/TGroteskHal.ttf
TgCommonApp/assets/fonts/TGroteskNor.ttf
Exception caught during execution of merge command.
org.eclipse.jgit.errors.CheckoutConflictException: Checkout conflict
with files:
TgCommonApp/assets/fonts
TgCommonApp/assets/fonts/Digital7Mono.ttf
TgCommonApp/assets/fonts/Scrip.ttf
TgCommonApp/assets/fonts/TGroteskFet.ttf
TgCommonApp/assets/fonts/TGroteskHal.ttf
TgCommonApp/assets/fonts/TGroteskNor.ttf
Wie gesagt gibt es in diesen Dateien oder Ordnern aber gar keine
Änderung und der Ordner assets selbst ist normalerweise der
versionierte symbolische Link bzw. in meinem Fall die Junction und
zeigt auf einen anderen Ordner.
Die einzige Lösung, die ich derzeit habe, ist, das sich vor und nach
dem Pull ein kleines Script aufrufe, dass mir die Junctions entfernt
und neu setzt. Anscheinend gibt es aber auch keinen lokalen Hook für
vor und nach dem Pull, so dass wenigstens das automatisiert werden
könnte.
Also letztendlich zwei Fragen:
1. Wer hat eine Idee, warum die Exception kommt und der Junction
nicht einfach unangetastet bleibt?
2. Welche Möglichkeiten seht ihr? Gibt es doch noch irendwelche
lokalen pre/postPull-Hooks, die ich nur nicht gefunden habe?
Danke für eure Ideen.