{"id":642,"date":"2020-05-28T12:44:16","date_gmt":"2020-05-28T11:44:16","guid":{"rendered":"http:\/\/hslomka.de\/techno\/?p=642"},"modified":"2021-05-21T11:28:35","modified_gmt":"2021-05-21T11:28:35","slug":"alternative-zu-git-stash","status":"publish","type":"post","link":"https:\/\/techno.slomka.biz\/?p=642","title":{"rendered":"Alternative zu git stash"},"content":{"rendered":"<p>Bei der Arbeit in einem Feature Branch kann es passieren, dass aus verschiedenen Gr\u00fcnden ein anderer Branch kurz ausgescheckt und bearbeitet werden muss.<\/p>\n<p>Normalerweise verwendet man <code>git stash<\/code> daf\u00fcr.<br \/>\nIch m\u00f6chte kurz eine Alternative erl\u00e4utern.<\/p>\n<p>Die Idee ist, einen zweiten worktree anzulegen und zu nutzen. Der bereits ausgescheckte Feature Branch ist in einem lokalen worktree auf der Festplatte abgelegt. Normalerweise hat man f\u00fcr jedes Projekt nur einen worktree. Daher muss man bei einem Wechsel der Branches die \u00c4nderungen committen oder zur\u00fcckstellen\/stashen.<\/p>\n<p>Der git Client bietet allerdings die wenig bekannte Option, einen zweiten worktree basierend auf einem Branch anzulegen. Der folgende Befehl legt in einem neuen Verzeichnis einen worktree des master Branches an:<\/p>\n<p class=\"kasten\"><code>cd &lt;HomeDirOfProject&gt;<br \/>\ngit worktree add ..\/worktree_master master<br \/>\n<\/code><\/p>\n<p>Mit einfachen Verzeichniswechseln (<code>cd<\/code>)<\/p>\n<p class=\"kasten\"><code>cd ..\/worktree_master<\/code><br \/>\n<code>cd ..\/&lt;HomeDirOfProject$gt;<\/code><\/p>\n<p>kann man jetzt zwischen den Branches wechseln.<\/p>\n<p>Hinweis: Einen zweiten worktree des bereits aktiven, ausgecheckten Branches quittiert git mit einem<br \/>\n\u2757 <code><span style=\"color:red\">fatal: 'master' is already checked out at ...<\/span><\/code><\/p>\n<p>Mit<\/p>\n<p class=\"kasten\"><code>cd &lt;HomeDirOfProject&gt;<br \/>\ngit worktree remove ..\/worktree_master<br \/>\n<\/code><\/p>\n<p>wird man den worktree wieder los.<\/p>\n<p>Die offizielle Dokumentation findet man <a href=\"https:\/\/git-scm.com\/docs\/git-worktree\">hier<\/a>. Bitte f\u00fcr den produktiven Einsatz die Warnung am Ende der Dokumentation beachten:<br \/>\n<i><span style=\"color:red\">Multiple checkout in general is still experimental, and the support for submodules is incomplete. It is NOT recommended to make multiple checkouts of a superproject.<\/span><\/i><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bei der Arbeit in einem Feature Branch kann es passieren, dass aus verschiedenen Gr\u00fcnden ein anderer Branch kurz ausgescheckt und bearbeitet werden muss. Normalerweise verwendet man git stash daf\u00fcr. Ich m\u00f6chte kurz eine Alternative erl\u00e4utern. Die Idee ist, einen zweiten worktree anzulegen und zu nutzen. Der bereits ausgescheckte Feature Branch ist in einem lokalen worktree auf der Festplatte abgelegt. Normalerweise hat man f\u00fcr jedes Projekt nur einen worktree. Daher muss man bei einem Wechsel der Branches die \u00c4nderungen committen oder zur\u00fcckstellen\/stashen. Der git Client bietet allerdings die wenig bekannte Option, einen zweiten worktree basierend auf einem Branch anzulegen. Der folgende Befehl legt in einem neuen Verzeichnis einen worktree des master Branches an: cd &lt;HomeDirOfProject&gt; git worktree add ..\/worktree_master master Mit einfachen Verzeichniswechseln (cd) cd ..\/worktree_master cd ..\/&lt;HomeDirOfProject$gt; kann man jetzt zwischen den Branches wechseln. Hinweis: Einen zweiten worktree des bereits aktiven, ausgecheckten Branches quittiert git mit einem \u2757 fatal: &#8216;master&#8217; is already checked out at &#8230; Mit cd &lt;HomeDirOfProject&gt; git worktree remove ..\/worktree_master wird man den worktree wieder los. Die offizielle Dokumentation findet man hier. Bitte f\u00fcr den produktiven Einsatz die Warnung am Ende der Dokumentation beachten: Multiple checkout in general is still experimental, and the support for submodules is incomplete. It is NOT recommended to make multiple checkouts of a superproject.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31,3,5],"tags":[62],"class_list":["post-642","post","type-post","status-publish","format-standard","hentry","category-branching-merging","category-devops","category-git","tag-git"],"_links":{"self":[{"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=\/wp\/v2\/posts\/642","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=642"}],"version-history":[{"count":1,"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=\/wp\/v2\/posts\/642\/revisions"}],"predecessor-version":[{"id":878,"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=\/wp\/v2\/posts\/642\/revisions\/878"}],"wp:attachment":[{"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=642"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=642"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techno.slomka.biz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}