Archiv der Kategorie: svn

SVN – Branch aktuell halten

Branch aktuell halten.

Wenn wir in einem Entwicklungsbranch arbeiten sollte regelmäßig (oft) der Trunk-Head in den Entwicklungsbranch gemerged werden. Damit sich die Zweige nicht zu weit von einander entfernen.

In unserem Fall nehmen wir immer die letzte Tag version. Also die letzte released Version des Trunks. So lange wir also in einem Entwicklungsbranch parallel zum Trunk arbeiten sollten nach einem Release alle Changes in den Entwicklungsbranch einfließen.

All changes that are going to be committed to Trunk, must be applied to all changes already committed to Trunk, before those changes are merged into Trunk.

Quelle:https://designbygravity.wordpress.com/2009/10/19/what-mother-never-told-you-about-svn-branching-and-merging/

Vorausetzung am Bsp. Entwicklungsbranch GUI

Der Entwicklungsbrunch ist ausgecheckt und upgedatet und liegt als “saubere” working copy im Eclipse Workspace.

Das heißt keine Datei hat ein Change welcher nicht eingecheckt ist. (Kein Sternchen)

Schritt-für-Schritt-Anleitung

  1. bei allen pom.xml´s die Version von 8.x.0-GUI-SNAPSHOT auf die neue Version 8.x.0 ändern (bspsw. 8.4.0-GUI-SNAPSHOT auf 8.5.0)
    Damit wir nicht soviele Mergekonflikte in den pom.xml´s bekommen die sich nur auf die Versionsnummer beziehen.
  2. nicht commiten
  3. Rechtsklick auf dem Projektordner in Eclipse -> Team -> Merge
    image2015-7-7-14-40-38
  4. In dem folgenden Screen das Diff auswählen was gemerged werden soll. Also die letzte Version wo der Trunk gemerged wurde (hier Tag 8.0.0) bis zu der Version die released wurde (Tag 8.1.0)
    Ziel ist unsere Working Copy!
    image2015-7-7-14-48-46
  5. Nun alle Konflikte manuell aufheben.
  6. nicht commiten.
  7. in allen poms die Version wieder ändern auf 8.x.0-GUI-SNAPSHOT
    image2015-7-7-14-56-12
  8. Dann einchecken und commit mit merged version 8.x.0 beschreiben.
    Nun haben wir im Branch den selben Entwicklungsstand wie die letzte release Version. Alle Änderungen aus der Trunkentwicklung sind vorhanden.
  9. Projekt (GUI) in Jenkins bauen.

Expected FS format ‘2’; found format ‘4’

Wie ich schon in einem früheren Blog beschrieb, sind hier die Versionen vom Server und Client unterschiedlich.

Gute Artikel hierzu:

http://www.coderanch.com/t/106547/vc/Difference-between-subversion-subclipse

http://subversion.apache.org/docs/release-notes/1.6.html

Nach dem ich alle meine Clients (Tortoise und Subclipse) per Update auf den neuesten Stand gebracht habe, erhielt ich immernoch dieselbe Fehlermeldung.

Offensichtlich sind die Clients (noch) nicht mit dem erstellten Repository kompatible.
Nach einigen recherchen fand ich heraus das dem create Befehle einen Parameter für Abwärtskompatibilität mitgeben kann.

svnadmin create --pre-1.5-compatible d:/SVN/(projekt)

SVN in der Konsole (Shell)

Repositories müssen nicht auf einen Server liegen. Sie können auch local auf dem Entwicklungsrechner liegen.
Achtung hier muß das Repository dann über file:/// angesprochen werden.

List

Um mit dem Komandozeilen – Client ein Repository untersuchen steht der Befehl svn list zur Verfügung.

svn list file:///Users/ingoreschke/Repositories/Entwicklung/Webprojekte

Für eine detailiertere Ansicht gibt es den Parameter -v (–verbose)
Um eine Ebene tiefer zu gelangen muß man den Pfad den entsprechenden Ordner erweitern.

svn -v list file:///Users/ingoreschke/Repositories/Entwicklung/Webprojekte/hebamme-nike

Import

Mit dem svn import-Befehl kann ein unversionierter Verzeichnisbaum schnell in ein Projektarchiv kopiert werden, wobei benötigte Zwischenverzeichnisse nach Bedarf angelegt werden. svn import erfordert keine Arbeitskopie und pflegt Ihre Dateien sofort in das Projektarchiv ein. Typischerweise verwenden Sie diesen Befehl, wenn bereits ein Verzeichnisbaum besteht, den Sie aber in einem Subversion-Projektarchiv pflegen möchten.

~ ingoreschke$ svn  list file:///Users/ingoreschke/Repositories/Entwicklung/Webprojekte/pingold
branch/
tag/
trunk/

Da die empfohlene Projektarchiv-struktur aus /trunk, /branch, /tag besteht, ich aber in meiner lokalen Entwicklungsumgeben eben nicht diese Struktur haben will, sondern nur die Struktur unter trunk bediene ich mich dem folgenden workaround.

1. erstelle ein lokal neues Verzeichnis mit dem Projektnamen bspw. ingo-reschke
2. darin erstelle ich 3 weitere neue Verzeichnisse trunk, branch, tag
3. diese “Projekt” wird in das root vom Projektarchiv Webprojekte importiert.
4. lösche das locale (temporäre) Verzeichnis ingo-reschke
5. improtiere meine bisherigen Daten die unter Projekte/ingo-reschke/ liegen nach Webprojekte/ingo-reschke/trunk/
6. checkout des Projektes.
7. Jetzt hab ich mein Projekt dem Repository hinzugefügt und verbunden.

mkdir ingo-reschke
cd ingo-reschke/
mkdir branch
mkdir trunk
mkdir tag
cd ..
svn import ingo-reschke file:///Users/ingoreschke/Repositories/Entwicklung/Webprojekte/ingo-reschke
cd Documents/xPrivat/Projects/ingo-reschke
svn import file:///Users/ingoreschke/Repositories/Entwicklung/Webprojekte/ingo-reschke/trunk -m "initial import"
svn ls file:///Users/ingoreschke/Repositories/Entwicklung/Webprojekte/ingo-reschke/trunk
svn cp file:///Users/ingoreschke/Repositories/Entwicklung/Webprojekte/ingo-reschke/trunk/ .

Auflistung einfacher (üblicher) Anwendungsfälle

Es wird vorausgesetzt das wir uns im working copy befinden

alle Änderungen einchecken

svn commit .

fäschlicher Weise eine Datei geändert aber noch nicht eingecheckt? Kein Problem

svn revert dateiname

Quellen:http://svnbook.red-bean.com/nightly/de/svn-book.html

SVN Nachträglich im Repository die Verzeichnisse trunk,branch, tag einpflegen

Nachträglich im Repository die Verzeichnisse trunk,branch,tag nachpflegen und das working copy auf den trunk Ordner verlinken.

  1. erstellt eine frische Arbeitskopie auf einen beliebigen Rechner.
  2. In dieser Arbeitskopie erstellt ihr die drei Verzeichnisse: Tag, Branch und Trunk.
  3. Diese drei Verzeichnisse müsst Ihr nun einchecken.
  4. Dann in dieser Arbeitskopie alle Dateien und Ordner (nicht die gerade erstellten) in das Trunk Verzeichnis verschieben und wieder einchecken.
  5. Dann auf den Entwicklungsrechner ein SWITCH ausführen und dabei das Trunk Verzeichnis angeben.

Expected FS format ‘2’; found format ‘3’

Wenn man diese Meldung beim Zugriff auf ein Repository erhält, so bedeutet dies, dass die Version mit der das Repository erstellt wurde sich von der Version des zugreifenden Clients unterscheidet.

Abhilfe hat bei mir das Upgrade des Cients und seine Tools auf die neueste Version gebracht.

Ermitteln der aktuellen Version:

svn --version

Wo finde ich die neueste Version? (binary Packages)
http://subversion.apache.org/features.html

Für mac OSX 10.5
http://www.open.collab.net/downloads/community/

  1. dmg ausführen
  2. im Terminal Umgebungsvariablen anpassen
    export PATH=/opt/subversion/bin:$PATH
  3. fertig.
svn --version

macbook:~ ingoreschke$ svn –version
svn, version 1.6.11 (r934486)
compiled Apr 20 2010, 17:01:38

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository access (RA) modules are available:

* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
– handles ‘http’ scheme
– handles ‘https’ scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
– with Cyrus SASL authentication
– handles ‘svn’ scheme
* ra_local : Module for accessing a repository on local disk.
– handles ‘file’ scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
– handles ‘http’ scheme
– handles ‘https’ scheme

macbook:~ ingoreschke$

Quellen und Resourcen:
http://svnbook.red-bean.com/
http://www.open.collab.net/downloads/community/
http://subversion.apache.org/features.html
http://www.opensource.apple.com/source/subversion/subversion-33/subversion/notes/repos_upgrade_HOWTO

http://bytes.com/topic/unix/answers/868523-svn-expected-fs-format-2-found-format-3-a