Von Subversion zu Git umziehen: Unterschied zwischen den Versionen
(40 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{note|Noch in Bearbeitung}} | {{note|Noch in Bearbeitung}} | ||
== Voraussetzungen == | == Voraussetzungen == | ||
Zeile 21: | Zeile 22: | ||
== Installation benötigter Tools == | == Installation benötigter Tools == | ||
=== Java (OpenJDK 9) === | |||
<pre> | |||
sudo apt-get install openjdk-9-jdk openjdk-9-demo openjdk-9-doc openjdk-9-jre-headless openjdk-9-source | |||
</pre> | |||
=== Git === | |||
==== PPA-Repository ==== | |||
<pre> | |||
sudo add-apt-repository ppa:git-core/ppa | |||
</pre> | |||
==== Pakete installieren ==== | |||
<pre> | |||
sudo apt-get update && sudo apt-get install git git-svn | |||
</pre> | |||
=== Subversion === | |||
<pre> | |||
sudo apt-get install subversion | |||
</pre> | |||
=== svn-migration-scripts === | |||
==== Download ==== | |||
[https://bitbucket.org/atlassian/svn-migration-scripts/downloads/ https://bitbucket.org/atlassian/svn-migration-scripts/downloads/] | [https://bitbucket.org/atlassian/svn-migration-scripts/downloads/ https://bitbucket.org/atlassian/svn-migration-scripts/downloads/] | ||
=== Links | ==== Validation ==== | ||
Damit ''Subversion'' richtig erkannt wurde, war noch eine Änderung in <code>~/.bashrc</code> notwendig: | |||
<pre> | |||
vi ~/.bashrc | |||
</pre> | |||
Und am Ende der Datei dann folgende Zeile hinzufügen: | |||
<pre> | |||
export LANG=C | |||
</pre> | |||
Danach sollte der Aufruf des folgenden Befehles | |||
<pre> | |||
java -jar ~/GitMigration/svn-migration-scripts.jar verify | |||
</pre> | |||
eine Ausgabe wie | |||
<pre> | |||
svn-migration-scripts: using version 0.1.56bbc7f | |||
Git: using version 2.16.2 | |||
Subversion: using version 1.9.7 | |||
git-svn: using version 2.16.2 | |||
</pre> | |||
erzeugen. | |||
== Autorendatei erstellen == | |||
<pre> | |||
java -jar ~/svn-migration-scripts.jar authors https://<svn-repo>/<project> <user> <password> > authors.txt | |||
</pre> | |||
== SVN Repository klonen == | |||
=== Möglichkeit 1 über ''clone'' === | |||
==== Standard Layout ==== | |||
<pre> | |||
git svn clone --username <svn user> --stdlayout --authors-file=../authors.txt https://<svn-repo>/<project> <git-repo-name> | |||
</pre> | |||
==== Non Standard Layout ==== | |||
<pre> | |||
git svn clone --username <svn user> \ | |||
--trunk=/trunk \ | |||
--branches=/release/*/* \ | |||
--branches=/refactoring/* \ | |||
--tags=/tags \ | |||
--authors-file=authors.txt https://<svn-repo>/<project> <git-repo-name> | |||
</pre> | |||
=== Möglichkeit 2 über ''fetch'' === | |||
<pre> | |||
git svn init --username <svn user> \ | |||
--trunk=/trunk \ | |||
--branches=/release/*/* \ | |||
--branches=/refactoring/* \ | |||
--tags=/tags \ | |||
https://<svn-repo>/<project> <git-repo-name> | |||
</pre> | |||
<pre> | |||
cd <git-repo-name> | |||
git config svn.authorsfile ../../authors.txt | |||
</pre> | |||
<pre> | |||
[core] | |||
repositoryformatversion = 0 | |||
filemode = true | |||
bare = false | |||
logallrefupdates = true | |||
[svn-remote "svn"] | |||
url = https://<svn-repo>/<project>/<git-repo-name> | |||
fetch = trunk:refs/remotes/origin/trunk | |||
branches = release/*/*:refs/remotes/origin/release/*/* | |||
branches = refactoring/*:refs/remotes/origin/refactoring/* | |||
tags = tags/*:refs/remotes/origin/tags/* | |||
[svn] | |||
authorsfile = ../../authors.txt | |||
</pre> | |||
<pre> | |||
git svn fetch | |||
</pre> | |||
=== Checks === | |||
Danach in das Verzeichnis <code><git-repo-name></code> wechseln und mit | |||
<pre> | |||
git branch -r | |||
</pre> | |||
überprüfen, ob alle Branches übernommen wurden. | |||
== Branches konvertieren == | |||
Im Projektverzeichnis kann mit folgendem Befehl angezeigt werden, welche Änderungen vorgenommen werden würden (Trockenlauf): | |||
<pre> | |||
cd <git-repo-name> | |||
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --no-delete | |||
</pre> | |||
Erst durch Anhängen von <code>--force</code> werden die Änderungen tatsächlich ausgeführt: | |||
<pre> | |||
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force --no-delete | |||
</pre> | |||
== Lokales Repository nach Bitbucket pushen == | |||
<pre> | |||
git remote add origin https://<user>@bitbucket.org/<user>/<repo>.git | |||
</pre> | |||
<pre> | |||
git push -u origin --all | |||
git push --tags | |||
</pre> | |||
== Git Befehle == | |||
=== Dateien eines Branches auflisten === | |||
<pre> | |||
git ls-tree -r --name-only <branch> | |||
</pre> | |||
== Links == | |||
[https://git-scm.com/book/de/v1/Git-und-andere-Versionsverwaltungen-Zu-Git-umziehen https://git-scm.com/book/de/v1/Git-und-andere-Versionsverwaltungen-Zu-Git-umziehen] | [https://git-scm.com/book/de/v1/Git-und-andere-Versionsverwaltungen-Zu-Git-umziehen https://git-scm.com/book/de/v1/Git-und-andere-Versionsverwaltungen-Zu-Git-umziehen] |
Aktuelle Version vom 2. März 2018, 12:44 Uhr
Noch in Bearbeitung
Voraussetzungen
Es wird ein Case-Sensitives-Dateisystem benötigt, weshalb Linux (auch in VM) notwendig ist.
Folgender Check
java -jar svn-migration-scripts.jar verify
liefert unter Windows nämlich folgende Warnung:
You appear to be running on a case-insensitive file-system. This is unsupported, and can result in data loss.
Siehe dazu auch https://bitbucket.org/atlassian/svn-migration-scripts/issues/1/case-insensitive-warning-on-windows-ntfs
Installation benötigter Tools
Java (OpenJDK 9)
sudo apt-get install openjdk-9-jdk openjdk-9-demo openjdk-9-doc openjdk-9-jre-headless openjdk-9-source
Git
PPA-Repository
sudo add-apt-repository ppa:git-core/ppa
Pakete installieren
sudo apt-get update && sudo apt-get install git git-svn
Subversion
sudo apt-get install subversion
svn-migration-scripts
Download
https://bitbucket.org/atlassian/svn-migration-scripts/downloads/
Validation
Damit Subversion richtig erkannt wurde, war noch eine Änderung in ~/.bashrc
notwendig:
vi ~/.bashrc
Und am Ende der Datei dann folgende Zeile hinzufügen:
export LANG=C
Danach sollte der Aufruf des folgenden Befehles
java -jar ~/GitMigration/svn-migration-scripts.jar verify
eine Ausgabe wie
svn-migration-scripts: using version 0.1.56bbc7f Git: using version 2.16.2 Subversion: using version 1.9.7 git-svn: using version 2.16.2
erzeugen.
Autorendatei erstellen
java -jar ~/svn-migration-scripts.jar authors https://<svn-repo>/<project> <user> <password> > authors.txt
SVN Repository klonen
Möglichkeit 1 über clone
Standard Layout
git svn clone --username <svn user> --stdlayout --authors-file=../authors.txt https://<svn-repo>/<project> <git-repo-name>
Non Standard Layout
git svn clone --username <svn user> \ --trunk=/trunk \ --branches=/release/*/* \ --branches=/refactoring/* \ --tags=/tags \ --authors-file=authors.txt https://<svn-repo>/<project> <git-repo-name>
Möglichkeit 2 über fetch
git svn init --username <svn user> \ --trunk=/trunk \ --branches=/release/*/* \ --branches=/refactoring/* \ --tags=/tags \ https://<svn-repo>/<project> <git-repo-name>
cd <git-repo-name> git config svn.authorsfile ../../authors.txt
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [svn-remote "svn"] url = https://<svn-repo>/<project>/<git-repo-name> fetch = trunk:refs/remotes/origin/trunk branches = release/*/*:refs/remotes/origin/release/*/* branches = refactoring/*:refs/remotes/origin/refactoring/* tags = tags/*:refs/remotes/origin/tags/* [svn] authorsfile = ../../authors.txt
git svn fetch
Checks
Danach in das Verzeichnis <git-repo-name>
wechseln und mit
git branch -r
überprüfen, ob alle Branches übernommen wurden.
Branches konvertieren
Im Projektverzeichnis kann mit folgendem Befehl angezeigt werden, welche Änderungen vorgenommen werden würden (Trockenlauf):
cd <git-repo-name> java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --no-delete
Erst durch Anhängen von --force
werden die Änderungen tatsächlich ausgeführt:
java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force --no-delete
Lokales Repository nach Bitbucket pushen
git remote add origin https://<user>@bitbucket.org/<user>/<repo>.git
git push -u origin --all git push --tags
Git Befehle
Dateien eines Branches auflisten
git ls-tree -r --name-only <branch>
Links
https://git-scm.com/book/de/v1/Git-und-andere-Versionsverwaltungen-Zu-Git-umziehen
https://blog.seibert-media.net/blog/2014/05/15/migration-von-subversion-zu-git-ueberblick/
http://blog.seibert-media.net/blog/2014/05/16/migration-von-subversion-zu-git-vorbereitungen/
http://blog.seibert-media.net/blog/2014/07/07/migration-von-subversion-zu-git-die-konvertierung/
http://blog.seibert-media.net/blog/2014/07/09/migration-von-subversion-zu-git-die-synchronisation/
Zurück zu Git Server