Wie hält man sein eigenes lokales git repo aktuell?



  • Frage:

    Man holt sich vom Hauptserver das aktuelle git repo runter auf die eigene Festplatte.
    Nun nimmt man an dieser lokalen Kopie Änderungen vor, aber wenn man nun die lokale Kopie weiterhin aktuell halten will, wie updated man dann diese ohne dabei die selbst gemachten Änderungen wieder zu überschreiben?

    Oder anders gesagt, wie merged man den eigenen Code mit der offiziellen Version?



  • Ich habe zwar keine Ahnung von git, aber mal so in's Blaue geraten:

    git pull
    


  • Interessante Frage. Du meinst du holst dir die Entwicklungsversion von irgendeiner Software von einem dieser typischen read-only-repositories und hast gar nicht vor, eigene Änderungen raufzupushen.

    Mit "git clone" ist natürlich alles Selbstgeschriebene weg.

    Was macht git von selbst, wenn du mit "git pull" die neue Version holst? Ist ja gar nicht gesagt, dass da lokale Änderungen überschrieben werden. Da wird üblicherweise ein 3-Wege-Merge gemacht, ausgehend vom letzten gemeinsamen Punkt.
    Es ist allerdings auch nicht gesagt, dass das von selbst immer ohne Fehler geht.

    Wenn das automatisch nicht funktioniert, dann würd ich mich mal mit den branches beschäftigen, immer mehrere parallel (upstream und eigene) und bei Bedarf manuell mergen.



  • ichbinsisyphos hat schon Recht. Ein normaler Pull wird deine Änderungen idR. (außer bei Konflikten) nicht zerstören. Mittel- bis langfristig interessieren dich auf alle Fälle Branches.



  • Kannst auch noch deine Änderungen vorher "stashen"
    http://git-scm.com/book/de/Git-Tools-Stashing



  • stashit schrieb:

    Kannst auch noch deine Änderungen vorher "stashen"
    http://git-scm.com/book/de/Git-Tools-Stashing

    Ja, nur musst du dann eben bei git stash pop statt git pull mergen.

    Ich würde eher vor dem Pullen committen, so kann man im schlimmsten Fall einfach mit git reset --hard die Änderungen rückgängig machen.



  • Zwingt git einen nicht eh dazu vor'm merge zu committen?



  • CLI: "git pull --rebase"

    TortoiseGit - Kontextmenü: "git fetch" mit Option "Launch rebase after fetch".
    http://i.imgur.com/KxRdiUj.png

    Wenn Änderungen am Upstream festgestellt wurden, die nun gezogen werden sollen,
    dann wird zunächst mal geschaut, ob Du lokal Änderungen hast.
    Wenn das der Fall ist, dann werden die kurz mal zwischengespeichert - "gestashed".
    Nach dem Verschieben der Änderungen in den Stash, ist das Repo damit auf einem alten Stand des Upstream-Repos. Dir fehlen nun die neuen Commits von dort.
    Diese werden nun oben auf den Commitstapel deines Repos gelegt.
    Damit ist dein Repo auf dem Stand vom Upstream Repo. Es ist aktualisiert.
    Nun werden Deine Änderungen aus dem Stash oben auf den Commitstapel gelegt.
    Beim draufpacken vom Stash müssen evtl. Konflikte aufgelöst werden, die durch die Neuerungen im upstream-Repo verursacht wurden.
    Im Grunde ist das ein Kartenspiel 🙂

    Hoffe das hilft etwas...

    Gruß Jens



  • git pull macht nix anderes als ein git fetch (änderungen vom remote laden) und dann git merge.

    ich würde mir einfach einen branch anlegen und die eigenen änderungen dort commiten. wenn du das projekt mit dem remote synchronisieren willst, musst du dann nur auf den master wechseln und dort pullen. danach wechselst du auf deinen branch und mergest den master lokal mit git merge master. auf diese weise hast du immer beide versionen lokal verfügbar.


Log in to reply