Entfernen/ausblenden git-Zweige löschen, ohne commit-Historien
Situation:
Ich habe ein Haupt-repo mit einem Haupt-dev-Zweig und viele "experiment" Zweige sprießen aus der it (z.B., exp1
und exp2
). Der Zweck dieses experiment Zweige dienen als Platzhalter für Experimente, erzeugen numerische Ergebnisse. Ich notieren Sie die branch-name (und die commit-ID der experiment-Filialen, so dass ich zurückkehren kann, der begeht genau sehen, den code und die Geschichte hinter den Ergebnissen.
Aber, nun, es gibt so viele experiment Zweigen, daß es schwer zu finden Sie die wichtigsten Baum. Also, ich bin ein überdenken meiner Strategie für das halten Platzhalter, um den code hinter jeden Satz von Ergebnissen (d.h., jedes experiment). Natürlich könnte ich auch einfach sparen, die arbeiten dir in jeder Filiale, aber es wäre schön, halten Sie die commit-Historie auch.
Mögliche Lösung:
Einer Möglichkeit, damit umzugehen, ist, sich zu bewegen, das experiment Filialen in Ihrer eigenen repos, jedes Wesen verwurzelt in der Kind-Knoten den entsprechenden Knoten in der commit-Historie der dev-branch. Hier ist eine illustration, was ich meine:
Klicken Sie auf hier für größere version des Bildes (auf imgur.com).
So, zum Beispiel, für die Filiale exp1
würde ich gerne exportieren, verpflichtet A->B->C
zu einem separaten repo verwurzelt zu Begehen A
. Dann kann ich nur Datensatz den hash des commit P1
so, dass ich weiß, wo die exp1
Zweig herab.
Frage:
Wie kann ich das tun?
Bessere Frage:
Auf der anderen Seite, ich vermute stark es ist eine viel bessere Strategie, zu tun, was ich tun will---nämlich, entrümpeln Sie den Baum, der visuellen Inspektion aber halten Sie Platzhalter, um vor der äste, so kann ich zu Ihnen zurückkehren, wenn nötig. Also, kann jemand empfehlen, eine Strategie für das?
- Ich habe gerade halten Sie ein separates "Archiv" remote-repo, dass ich push die alten Zweige auf, dann löschen Sie aus meinem lokalen repository.
- Das klingt wie eine ziemlich gute Idee. Wie könnte ich ausschließen, dass ein remote-repo von meinem git log-Befehle? Zum Beispiel, ich in der Regel laufen
git log --oneline --graph --decorate --all
. Wie könnte ich das ändern das git-log-Befehl nicht angezeigt, eine bestimmte remote? - Gute Frage. Jetzt mache ich das nicht mich so ich bin mir nicht wirklich sicher. Wenn Sie herausfinden, achten Sie darauf, lassen Sie es mich wissen. 😉
- Auch für deine vorgeschlagene Lösung, möchten Sie vielleicht zu schauen in das
git replace
- Nur eine Frage: Es klingt so, als wenn du immer die exp-Filialen um nur für den Fall, dass Sie brauchen, um zu finden die commit-später. Warum gehst du nicht einfach taggen, anstatt zu halten die Zweige?
- Vielleicht ist das, was ich tun sollte, eigentlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist eine alternative: die Verwendung von nicht-branch-Referenzen zu speichern, die Zweig-Tipps, die Sie vor dem löschen den Zweig Namen.
Da diese nicht-Filiale Verweise, Sie nicht zeigen, bis in
git branch
Ausgabe, noch in Sachen gezeigtgit log --branches
undgitk --branches
zum Beispiel. Aber, Sie zeigen sich in--all
Inserate, und behalten repository-Objekte.Erstellen oder aktualisieren einer nicht-Filiale verweisen, verwenden Sie
git update-ref
. Wählen Sie eine name-space innerhalbrefs/
, dass Sie denken, nicht kollidieren mit einigen zukünftigen Nutzung (Strom verwendet werdenrefs/heads/
für Zweige, dierefs/tags/
für tagsrefs/remotes/
für remote-Niederlassungen,refs/notes/
für Notizen undrefs/stash
für den Vorrat).heads
,tags
,remotes
,notes
, undstash
sind wirklich nur namespaces für Verweise, die dem standard anerkannte Bedeutung in git. Richtig?origin/run/diss-001
, ich kann laufengit update-ref archive/run/diss-001 origin/run/diss-001
. Es erzeugt dann die Datei.git/archive/run/diss-001
enthält den SHA1-Hash des remote-branch. Ist es ein problem, dass meine Niederlassung name und neue ref name haben/
Zeichen in Ihnen?refs/
, so dass es zeigt sich in--all
. Beachten Sie, dass auch ganz normale Zweige können Schrägstriche in Ihren Namen, z.B.git checkout -b bugs/bug1234
arbeiten auf bug # 1234.git update-ref refs/archive/run/diss-001 origin/run/diss-001
refs/archive/
- name-space. 🙂 (Es scheint unwahrscheinlich,, aber dann, vor 5 Jahren, wer hätte gewusst, dassrefs/notes/
wurde verwendet?)refs/archive/foo
auch weist auf einige bestimmte commit-ID, können Sie einfach tungit checkout -b restored refs/archive/foo
zum erstellen neuer Zweigrestored
(refs/heads/restored
) zeigt auf, dass verpflichten. Was macht es ein Zweig ist, dass Ihr name inrefs/heads/
. Git wird auto-update, wenn es das aktuell Zweig.refs/archive/
verwendengit for-each-ref refs/archive
zeigen Sie, (beachten Sie, dassgit for-each-ref
hat viele Argumente, inklusive einer Formatierung Richtlinie zur Steuerung der Ausgabe). Wenn Sie wählte einen anderen Namen Platz(s) müssen Sie etwas mindestens etwas unterschiedlich. Ich bin mir nicht sicher, die Antwort hier braucht zusätzliche Ausarbeitung; die Leute Lesen können die Kommentare auch. 🙂ref/archive/heads
(so, dass andere Sachen, die archiviert werden können sowie) bedeutet, dass die Güte der Werkzeuge wie show-Filialen verloren gehen. Oder gibt es eine Möglichkeit, etwas zu tun, wiegit show-branches
und haben es gelten die union derrefs/heads
undrefs/archive/heads
? Umgekehrt, gibt es eine Möglichkeit, z.B. einen Klumpen, übergeben werden kann, um zu zeigen,-Zweige, die sagt "alles unterrefs/heads
außer Zeug unterrefs/heads/archive
?git show-branches
hat den vollen Namen sowieso, also sollte es in der Theorie leicht zu ergänzen, es zu nehmen Sie einen namespace in der Bedienung.git show-branches
Ausgabe.