it-swarm.com.de

Wie erstelle ich ein SVN-Tag aus dem Trunk?

Ich erstelle mein erstes Projekt in Subversion . Soweit habe ich

 branches
 tags
 trunk

Ich denke, ich muss sofort Zweige einzigartig machen und neu anfangen. Zweigstellen aktualisieren ist die Norm.

Ich habe im Trunk gearbeitet und den Inhalt wie folgt in Tags verschoben.

mkdir tags/1.0
cp -rf trunk/* tags/1.0
svn add tags/1.0
svn commit -m " create a first tagged version"

Mein Bauch sagt mir, dass dies völlig falsch ist, und ich sollte eine gewisse Beziehung zwischen den Dateien mit svn copy beibehalten. Die Dateien, die ich auf diese Weise erstellt habe, haben keine Beziehung zueinander, und ich bin mir sicher, dass ich auf die Subversion-Funktionen verzichten werde. Hab ich recht?

Soll ich svn copy für die einzelnen Dateien verwenden?

mkdir tags/1.0
svn add tags/1.0
svn copy trunk/file1 tags/1.0
svn copy trunk/file2 tags/1.0
svn copy trunk/file3 tags/1.0
svn commit -m " create a first tagged version"

Soll ich svn copy für das gesamte Verzeichnis verwenden?

svn copy cp -rf trunk tags/1.0
svn commit -m " create a first tagged version"
265
ojblass

Sie haben Recht damit, dass es nicht "richtig" ist, Dateien zum Ordner "tags" hinzuzufügen.

Sie haben richtig erraten, dass copy die zu verwendende Operation ist. Damit kann Subversion den Verlauf dieser Dateien verfolgen und sie (ich gehe davon aus) auch viel effizienter speichern.

Meiner Erfahrung nach ist es am besten, Kopien ("Schnappschüsse") von gesamten Projekten zu erstellen, d. H. Alle Dateien aus dem Stammordner. Auf diese Weise kann der Schnappschuss für sich allein stehen, als eine echte Darstellung des gesamten Projektzustands zu einem bestimmten Zeitpunkt.

Dieser Teil von "the book" zeigt, wie der Befehl normalerweise verwendet wird.

181
unwind

Benutzen:

svn copy http://svn.example.com/project/trunk \
      http://svn.example.com/project/tags/1.0 -m "Release 1.0"

Stenografie:

cd /path/to/project
svn copy ^/trunk ^/tags/1.0 -m "Release 1.0"
408
victor hugo

Wie von @victor hugo angemerkt, ist die "richtige" Methode die Verwendung von svn copy . Es gibt jedoch eine Einschränkung. Das auf diese Weise erstellte "Tag" ist kein echtes Tag Es handelt sich um eine exakte Kopie der angegebenen Version, es wird jedoch eine andere Version selbst sein. Wenn also in Ihrem Build-System die svn-Revision irgendwie verwendet wird (Z. B. die mit 'svn info' erhaltene Nummer in die Version von Des von Ihnen erstellten Produkts einbindet), können Sie nicht genau das gleiche bauen product eines Tags (das Ergebnis enthält die Revision des Tags anstelle der des ursprünglichen Codes ).

Es sieht so aus, als ob es in svn keine Möglichkeit gibt, ein wirklich korrektes Meta-Tag zu erstellen.

13

Verwenden Sie einfach dieses:

svn  copy  http://svn.example.com/project/trunk  
           http://svn.example.com/project/branches/release-1
           -m  "branch for release 1.0"

(natürlich alle in einer Zeile.) Sie sollten immer einen Zweig des gesamten Stammordners und des gesamten Inhalts erstellen. Es ist natürlich möglich, Teile des Rumpfes zu verzweigen, aber dies ist fast nie eine gute Praxis. Sie möchten, dass sich der Zweig genau wie der Stamm jetzt verhält. Dazu müssen Sie den gesamten Stamm verzweigen.

Eine bessere Zusammenfassung der SVN-Nutzung finden Sie in meinem Blog: SVN Essentials und SVN Essentials 2

12
AgilePro
11
Gromer

@ Victor Hugo und @ Unwind sind korrekt, und Victor's Lösung ist bei weitem die einfachste. VORSICHT vor Externen in Ihrem SVN-Projekt. Wenn Sie auf externe Bibliotheken verweisen, bleibt die Revisionsreferenz der externen Datenbank (ob ein Tag, ein HEAD oder eine Nummer) unverändert, wenn Sie Verzeichnisse mit externen Referenzen kennzeichnen.

Es ist möglich, ein Skript zu erstellen, das diesen Aspekt des Tagging behandelt. Weitere Informationen zu diesem Thema finden Sie in diesem Artikel SO: SVN-Checkout mit Externals kennzeichnen

7
MOK9

Eine weitere Option zum Markieren eines Subversion-Repositorys ist das Hinzufügen des Tags zur svn: log -Eigenschaft wie folgt:

   echo "TAG: your_tag_text" > newlog
   svn propget $REPO --revprop -r $tagged_revision >> newlog
   svn propset $REPO --revprop -r $tagged_revision -F newlog
   rm newlog

Ich habe kürzlich angefangen zu denken, dass dies der "richtige" Weg zum Markieren ist. Auf diese Weise erstellen Sie keine zusätzlichen Revisionen (wie bei "svn cp") und können trotzdem alle Tags leicht extrahieren, indem Sie grep für die Ausgabe von "svn log" verwenden:

   svn log | awk '/----/ {
                      expect_rev=1;
                      expect_tag=0;
                  }
                  /^r[[:digit:]]+/ {
                      if(expect_rev) {
                          rev=$1;
                          expect_tag=1;
                          expect_rev=0;
                      }
                  }
                  /^TAG:/ {
                      if(expect_tag) {
                          print "Revision "rev", Tag: "$2;
                      }
                      expect_tag=0;
                  }'

Auf diese Weise können Sie bei Bedarf nahtlos löschen tags. So werden die Tags zu einer vollständigen Metainformation, und ich mag sie.

4
svn copy http://URL/svn/trukSource http://URL/svn/tagDestination -m "Test tag code" 
  $error[0].Exception | Select-object Data

Sie müssen lediglich den URL-Pfad ändern. Dieser Befehl erstellt ein neues Verzeichnis "tagDestination". In der zweiten Zeile erfahren Sie die vollständigen Fehlerdetails, falls irgendwelche auftreten. Erstellen Sie die Variable svn env ​​, falls nicht erstellt. Kann prüfen (Cmd: - set, Powershell: - Get-ChildItem Env:) Der Standardpfad lautet "C:\Programme\TortoiseSVN\bin\TortoiseProc.exe".

0
Ashu