2008-08-12 5 views
51

Ich bin von TFS zu SVN (TortoiseSVN) mit meiner aktuellen Firma umgezogen. Ich vermisse wirklich die "Shelve" -Funktion von TFS. Ich habe verschiedene Artikel darüber gelesen, wie man mit SVN "shelve", aber ich habe nichts gelesen, das eine sehr einfache Erfahrung gibt, um Arbeit "aufzuräumen".Regal in TortoiseSVN?

Idealerweise hätte ich gerne zusätzliche Elemente im TortoiseSVN-Kontextmenü hinzugefügt - "Shelve" & "Unshelve". "Shelve" würde das aktuelle Shelve-Set entfernen und das Arbeitsverzeichnis unter einem geeigneten Pfad hochladen, der durch Benutzeroptionen definiert ist. "Unshelve" würde das Set mit der Arbeitskopie zusammenführen.

Gibt es so etwas? Kann jemand vorschlagen, diese Funktion in der GUI zu "hacken"?

Anmerkung: Die folgenden Link, um die User Experience nicht wirklich erreiche ich suchte:

Shelving Subversion

Eines der größten Dinge über TFS Shelve ist, wie einfach es zu bedienen ist ...

Antwort

29

Ich glaube nicht, dass SVN diese Funktion in das Serverprodukt eingebaut hat. Ich glaube auch nicht, dass so etwas in irgendwelchen Clients nachempfunden ist, die ich benutzt habe, einschließlich TortoiseSVN.

Um dieses Problem zu umgehen, habe ich einen DVCS wie git oder mercurial verwendet, um mich zu erlauben, lokal zu verzweigen/zusammenführen/zurückstellen, bevor Sie den Inhalt zurück zu SVN schieben. Es ist wohl ein bisschen ein Klümpchen, aber es funktioniert wirklich gut.

Ich hoffe, dass hilft. Viel Glück!

+3

Ich glaube nicht, dass es ein Klümpchen ist L-) Ich habe seit Jahren ein separates persönliches VCS verwendet, wenn wir mit Teams arbeiten, in denen wir strenge Kontrolle über Checkins hatten (und insbesondere mit Locking-basierten VCS wie SourceSafe). –

+3

Sie haben Recht, es ist kein Kludscher. Um ehrlich zu sein, ich weiß nicht, warum ich es gesagt habe, wahrscheinlich ein bisschen wie ein Disclaimer, um zu vermeiden, dass ich belästigt werde :) Ich bin sehr glücklich DVCS für lokale Regale zu verwenden, bevor ich zu einem Standard CVCS dränge. –

+3

Siehe: Wie man mercurial und svn zusammen benutzt http://stackoverflow.com/questions/4605668/how-to-use-mercurial-and-svn-together – AndyM

2

Sie können eine DVCS verwenden, aber in gewisser Weise ist dies ein Klud. 'Shelving' in einem DVCS speichert Ihre Änderungen nur lokal. Es ist nur dann nützlich, wenn Sie Ihre Arbeit rückgängig machen möchten, wenn Sie sie bei der weiteren Arbeit unterbrechen, aber am besten möchten Sie Ihre Arbeit auf dem Server speichern.

Eine Möglichkeit, dies in SVN ohne einen expliziten Befehl zum Zurücksetzen zu tun, besteht darin, Ihre Arbeitskopie an eine andere SVN-Stelle zu verschieben und dort statt auf Ihrem Hauptrepo festzuschreiben. Dies ist im Grunde so, als würde man einen temporären Zweig erstellen und für die Dauer der Arbeit daran arbeiten. Ich glaube nicht, dass Sie sogar zusammenführen müssen, da SVN das für Sie tun wird, wenn Sie umschalten, da Ihre lokalen Änderungen beibehalten werden.

Leider können Sie nicht zu einem nicht vorhandenen Speicherort wechseln. Wenn Sie das also zum ersten Mal tun, müssen Sie den 'Zweig' erstellen, um ihn zu speichern. Ich denke, das Ganze könnte automatisiert werden.

15

Wenn Sie verstehen, wie SVN Zweige arbeiten, ist Shelve in SVN emuliert ein Kinderspiel:

  1. erstellen Zweig im Repository (auf dem Server)
  2. Schalten Sie Ihre lokale Kopie es
  3. Commit Ihre Änderungen an der neuen Niederlassung
  4. Ihre lokale Kopie an den Stamm wechseln Sie zurück

Wenn Sie bereit sind, zurück zu bekommen Wenn Sie Ihre Änderungen nicht speichern ("unshelve"), führen Sie den Regalzweig einfach wieder in Ihre lokale Kopie ein.

Wenn Sie keine Befehlszeile SVN noch Tortoise SVN gut genug kennen die oben genannten zu tun, hier ist eine super detaillierte Schritt-für-Schritt-Anleitung, wie man es in Tortoise SVN zu tun:

  1. Do "SVN Update", um Ihre Arbeitskopie auf die neueste Version des Trunks zu aktualisieren. Auf diese Weise unterscheiden sich Ihre lokalen Kopie und der Stamm nur Ihre Änderungen.
  2. Wählen Sie aus dem Kontextmenü "Branch/Tag"
  3. Option "HEAD-Version im Repository" ist standardmäßig ausgewählt. Behalte das.
  4. Ändern Sie die "An URL", um den Zweignamen anzugeben, z. http://server/repository/project1/branches/shelf1
  5. prüfen, die „Arbeitskopie wechseln Niederlassung/tag“ -Box
  6. Klicken Sie auf OK um den Zweig zu erstellen und wechseln Sie es
  7. Sie „SVN Commit ...“ und sich verpflichten, die Änderungen an der neu geschaffenen Filiale
  8. Wählen Sie im Kontextmenü "Switch ..."
  9. Ändern Sie die "To URL" zur Stamm-URL z http://server/repository/project1/trunk
  10. Klicken Sie auf OK, um den Stamm zu wechseln

Siehe diesen Link für noch mehr Details und die Kommandozeilen-Äquivalent der oben:
Shelves in Subversion

+8

In großen Repositories ist dies ein schmerzhaft langsam (und fehleranfällig, wenn hier und da gelöscht wird) Prozess – Samaursa

+1

@Samaursa, welcher Schritt ist langsam? Löschen war auch nie ein Problem für mich, es sei denn, es gibt nicht versionierte Elemente in der Arbeitskopie (die Sie vor dem Wechsel reinigen sollten, lesen Sie dies: (http://subversion.apache.org/faq.html#switch-problems) – zvolkov

+0

Der Wechsel zu einem neuen Zweig oder sogar dem Stamm, sehr sehr langsam auf dem Repository, wo ich arbeite (es ist ziemlich groß) und sogar auf einigen meiner Projekte, die an Komplexität zunahmen (ich wechselte auf Quecksilber für persönliche Projekte) Ja, das Problem mit den nicht versionierten Artikeln: Als ich zum mercurial wechselte, konnte ich nicht glauben, wie einfach alles auf einmal war. Schade, dass sie es nicht bei der Arbeit verwenden. Eine Regaloption wäre in SVN großartig gewesen. – Samaursa

8

Eine weitere Option ist die ‚zu verwenden, erstellen Patch-Funktion in TortoiseSvn, um eine Patch-Datei zu erstellen und Änderungen rückgängig zu machen. Die Patch-Datei kann später erneut angewendet werden, um dorthin zurückzukehren, wo Sie waren.

Sie können immer noch mit einigen klebrigen Zusammenführungen enden, wenn Sie die Revision der Arbeitskopie aktualisieren müssen.