J'ai parcouru quelques migrations SVN -> Git et ils mentionnent tous l'obtention d'une liste d'utilisateurs appropriée avant de migrer, en particulier à l'aide de la commande:
svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq
J'ai accès au serveur Ubuntu hébergeant le référentiel unique (avec 9 projets), mais aucune installation SVN en local. Est-il possible d'exécuter cette commande sur le serveur pour obtenir la liste des noms d'utilisateur? Pour le moment, cela ne fait que rendre l'erreur:
svn: E155007: '/var/Subversion/' is not a working copy
Transmettez le chemin d'accès au référentiel sous forme d'URL:
svn log -q file:///var/Subversion | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq
En passant, si vous avez besoin de la liste des auteurs dans l'ordre chronologique du premier commit (je l'ai trouvée utile une fois lors de la conversion de svn en git), vous pouvez procéder comme suit:
svn log -q -r 1:HEAD url://to/repo | grep '^r' | awk -F'|' '!x[$2]++{print$2}'
Consultez les instructions ci-dessous pour convertir un référentiel SVN en un référentiel git.
Remarque: Pour consulter UNIQUEMENT la liste des utilisateurs, le poste 1 est exécuté.
CONVERTIR SVN REPO en GIT REPO
1. Récupérer une liste de tous les committers Subversion
$ svn log -q https://svn.example.com/repository_name | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt
Cela récupérera tous les messages du journal, supprimera les noms d'utilisateur, éliminera tout nom d'utilisateur en double, triera les noms d'utilisateur et les placera dans un fichier "authors-transform.txt". Modifiez maintenant chaque ligne du fichier.
username = username <username>
dans ceci:
username = Firstname Lastname <[email protected]>
2. Clonez le référentiel Subversion à l'aide de git-svn
git svn clone [SVN repo URL] --no-metadata -A authors-transform.txt --stdlayout ~/temp
3. Convertissez les propriétés svn: ignore en .gitignore Si votre référentiel svn utilisait des propriétés svn: ignore, vous pouvez facilement convertir ceci en un fichier .gitignore en utilisant:
cd ~/temp
git svn show-ignore > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore properties to .gitignore.'
4. Transférer le référentiel dans un référentiel nu git Créez d’abord un référentiel nu et assurez-vous que sa branche par défaut correspond au nom de la branche "trunk" de svn.
git init --bare ~/new-bare.git
cd ~/new-bare.git
git symbolic-ref HEAD refs/heads/trunk
cd ~/temp
git remote add bare ~/new-bare.git
git config remote.bare.Push 'refs/remotes/*:refs/heads/*'
git Push bare
Vous pouvez maintenant supprimer en toute sécurité le référentiel ~/temp.
5. Renommez la branche "trunk" en "master" Votre branche de développement principale s'appellera "trunk", ce qui correspond à son nom dans Subversion. Vous voudrez la renommer en Git branche "maître" standard utilisant:
cd ~/new-bare.git
git branch -m trunk master
6. Nettoyer les branches et les balises Git-svn transforme toutes les balises Subversions en branches très courtes dans Git sous la forme "balises/nom". Vous voudrez convertir toutes celles branche en balises Git réelles en utilisant:
cd ~/new-bare.git
git for-each-ref --format='%(refname)' refs/heads/tags |
cut -d / -f 4 |
while read ref
do
git tag "$ref" "refs/heads/tags/$ref";
git branch -D "tags/$ref";
done
7. Déplacer un référentiel nu vers un référentiel distant central Exemple de déplacement de votre référentiel nu local vers un référentiel gitolite:
mv new-bare.git repository_name.git
tar czvf repository_name.git.tar.gz repository_name.git/
scp repository_name.git.tar.gz remote_Host:
ssh remote_Host
tar xzvf repository_name.git.tar.gz
Sudo chown -R git:staff repository_name.git/
cd repository_name.git/
find . -type f -exec chmod go= {} \; # remove group and world permissions
find . -type d -exec chmod go= {} \; # remove group and world permissions
cd ../
mv repository_name.git /Users/git/repositories/
8. Cloner une nouvelle copie locale
mv old-svn-copy old-svn-copy.backup
git clone git@remote_Host:repository_name.git
Répertoriez tous les fichiers non versionnés de votre ancien référentiel svn local et copiez-les dans le nouveau référentiel git local:
cd old-svn-copy.backup
git clean -dXn # Using this command because the old copy was a git-svn clone
cp example-file.txt ../repository_name/ # copy all files and directories from the list that you need in the new local git repository
Vous pouvez maintenant déplacer la sauvegarde svn copy locale dans votre corbeille. Il peut être judicieux de ne pas vider votre corbeille tant que tout ne fonctionne pas correctement.
9. Fait.
Source ici