Para as probas imaxinade un servidor SVN por HTTP `svn-test-server` cun repositorio na ruta `/svn/hl/`, neste caso con SVN para descargar o código faríase:
[~/git-svn]$ svn checkout http://svn-test-server/svn/hl/ Checked out revision 0. [~/git-svn]$ ls -a hl . .. .svn [~/git-svn]$
Ben, agora coma escenario para as probas crearémo-la estructura de arquivos típica de SVN (aforramos pásos adicionais se facemos o primeiro commit dende o SVN e xa aproveitamos :P)
[~/git-svn]$ cd hl [~/git-svn/hl]$ mkdir branch tags trunk [~/git-svn/hl]$ svn add branch/ tags/ trunk/ A branch A tags A trunk [~/git-svn/hl]$ svn commit -m 'Estrutura de directorios típica de SVN' Adding branch Adding tags Adding trunk Committed revision 1. [~/git-svn/hl]$
Ben, iso xa está funcionando, deixemos ese directorio a man e ímos con GIT, o comando para tomar o repositorio é `git svn clone <URL>`
[~/git-svn]$ mv hl/ hl-svn
[~/git-svn]$ git svn clone http://svn-test-server/svn/hl/
Initialized empty Git repository in /home/kenkeiras/git-svn/hl/.git/
W: +empty_dir: branch
W: +empty_dir: tags
W: +empty_dir: trunk
r1 = e86e31e156196ef4928851c88b4dd15dfec8ef32 (refs/remotes/git-svn)
Checked out HEAD:
http://svn-test-server/svn/hl r1
creating empty directory: branch
creating empty directory: tags
creating empty directory: trunk
# Podemos botarlle unha ollada
[~/git-svn]$ cd hl
[~/git-svn/hl]$ git log
commit e86e31e156196ef4928851c88b4dd15dfec8ef32
Author: kenkeiras <kenkeiras b3b2f9e3-104c-4a07-99f8-c5963656e42c>
Date: Wed Feb 13 21:21:46 2013 +0000
Estrutura de directorios típica de SVN
git-svn-id: http://svn-test-server/svn/hl@1 b3b2f9e3-104c-4a07-99f8-c5963656e42c
[~/git-svn/hl]$ E xa o temos, podémos xestionalo (case) como se fora un GIT calqueira
[~/git-svn/hl]$ ls
branch tags trunk
[~/git-svn/hl]$ cd trunk/
[~/git-svn/hl/trunk]$ echo 'Texto de exemplo' > README
[~/git-svn/hl/trunk]$ git add README
[~/git-svn/hl/trunk]$ git commit -m 'Todo bo repo ten un readme'
[master fcc10c3] Todo bo repo ten un readme
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 trunk/README
# E o commit está feito, sen necesidade de mandalo o servidor
[~/git-svn/hl/trunk]$ git log
commit fcc10c3a44e297e0d72abf5b45c4e6f0d36b84b4
Author: kenkeiras <kenkeiras@gmail.com>
Date: Wed Feb 13 22:27:16 2013 +0100
Todo bo repo ten un readme
commit e86e31e156196ef4928851c88b4dd15dfec8ef32
Author: kenkeiras <kenkeiras b3b2f9e3-104c-4a07-99f8-c5963656e42c>
Date: Wed Feb 13 21:21:46 2013 +0000
Estrutura de directorios típica de SVN
git-svn-id: http://svn-test-server/svn/hl@1 b3b2f9e3-104c-4a07-99f8-c5963656e42c
[~/git-svn/hl/trunk]$
Iso sí, cando vaiamos mandálos cambios temos que facer `git svn dcommit`
[~/git-svn/hl/trunk]$ git svn dcommit
Committing to http://svn-test-server/svn/hl ...
A trunk/README
Committed r2
A trunk/README
r2 = 013fd1684e38ec994ac13af914767e1565bed844 (refs/remotes/git-svn)
No changes between current HEAD and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
# Iso sí, vai ter que “reescribir” levemente a historia (autor, data de envío e engadir un ID)
[~/git-svn/hl/trunk]$ git log| head -n 8
commit 013fd1684e38ec994ac13af914767e1565bed844
Author: kenkeiras <kenkeiras@b3b2f9e3-104c-4a07-99f8-c5963656e42c>
Date: Wed Feb 13 21:30:51 2013 +0000
Todo bo repo ten un readme
git-svn-id: http://svn-test-server/svn/hl@2 b3b2f9e3-104c-4a07-99f8-c5963656e42c
Agora ímos ver como receber cambios do repositorio. Primeiro haberá que producilos
[~/git-svn/hl/trunk]$ cd ../../hl-svn/ [~/git-svn/hl-svn]$ svn update A trunk/README Updated to revision 2. # Notade que actualizou ! # Un cambio no trunk [~/git-svn/hl-svn]$ echo 'Estaría ben estender un pouco o texto' >> trunk/README # E a facer commit [~/git-svn/hl-svn]$ svn commit -m 'Actualización do README' Sending trunk/README Transmitting file data . Committed revision 3. # E despois facemos un tag, logo veremos para que ;) [~/git-svn/hl-svn]$ svn copy trunk/ tags/v1 A tags/v1 [~/git-svn/hl-svn]$ ls tags/v1/ README # E a facer commit [~/git-svn/hl-svn]$ svn commit -m 'Tagging' Adding tags/v1 Transmitting file data . Committed revision 4.
De volta no GIT, podemos tomar os cambios con `git svn rebase`
[~/git-svn/hl-svn]$ cd ../hl
[~/git-svn/hl]$ git svn rebase
M trunk/README
...
Fast-forwarded master to refs/remotes/git-svn.
# E aquí están os cambios
[~/git-svn/hl]$ git log
commit 57d2ed246838c32e78f85981bae691d5ee9eeb4f
Author: kenkeiras <kenkeiras b3b2f9e3-104c-4a07-99f8-c5963656e42c>
Date: Wed Feb 13 22:06:13 2013 +0000
Tagging
git-svn-id: http://svn-test-server/svn/hl@4 b3b2f9e3-104c-4a07-99f8-c5963656e42c
commit 4a62851e5e06b8e2dc2063b6113296f07bf3b188
Author: kenkeiras <kenkeiras@b3b2f9e3-104c-4a07-99f8-c5963656e42c>
Date: Wed Feb 13 21:39:07 2013 +0000
Actualización do README
git-svn-id: http://svn-test-server/svn/hl@3 b3b2f9e3-104c-4a07-99f8-c5963656e42c
commit 013fd1684e38ec994ac13af914767e1565bed844
Author: kenkeiras <kenkeiras@b3b2f9e3-104c-4a07-99f8-c5963656e42c>
Date: Wed Feb 13 21:30:51 2013 +0000
Todo bo repo ten un readme
git-svn-id: http://svn-test-server/svn/hl@2 b3b2f9e3-104c-4a07-99f8-c5963656e42c
commit e86e31e156196ef4928851c88b4dd15dfec8ef32
Author: kenkeiras <kenkeiras@b3b2f9e3-104c-4a07-99f8-c5963656e42c>
Date: Wed Feb 13 21:21:46 2013 +0000
Estrutura de directorios típica de SVN
git-svn-id: http://svn-test-server/svn/hl@1 b3b2f9e3-104c-4a07-99f8-c5963656e42c
[~/git-svn/hl]$ E para o truco final ímos voltar a tomar o repositorio con GIT, pero desta vez ímos facer que absorba a estructura:
[~/git-svn]$ git svn clone http://svn-test-server/svn/hl/ --stdlayout Initialized empty Git repository in /home/kenkeiras/git-svn/hl/.git/ r1 = 4b78a8c0dad91a5b66e9e529cb3b79149fb334cb (refs/remotes/trunk) A README r2 = 83c362be434048afb88f26bd8f83e1c65c5cdaec (refs/remotes/trunk) M README r3 = eccf0deaa90f85a518a66c5caaf1c3bd361aacc5 (refs/remotes/trunk) branch_from: /tag => /tag/v1 Found possible branch point: http://svn-test-server/svn/hl/tag/v1 => http://svn-test-server/svn/hl/tags/v1, 3 Initializing parent: refs/remotes/tags/v1@3 Following parent with do_switch Successfully followed parent r3 = 8fb7e22d73e717c1f2fb3b1aa0c1b7b358df51a6 (refs/remotes/tags/v1@3) Found branch parent: (refs/remotes/tags/v1) 8fb7e22d73e717c1f2fb3b1aa0c1b7b358df51a6 Following parent with do_switch Successfully followed parent r4 = 7959f1379053b2279f25572ba57ea0b47a9f63c1 (refs/remotes/tags/v1) Checked out HEAD: http://svn-test-server/svn/hl/trunk r3 [~/git-svn]$ cd hl [~/git-svn/hl]$ ls README [~/git-svn/hl]$
E so con engadir o parámetro `--stdlayout` xa temos o directorio `trunk` en primeiro plano, os demais están a man en forma de ramas do repositorio:
[~/git-svn/hl]$ git graph
* commit 7959f13 (tags/v1)
| Author: kenkeiras <kenkeiras@b3b2f9e3-104c-4a07-99f8-c5963656e42c>
| Date: Wed Feb 13 22:06:13 2013 +0000
|
| Tagging
|
| git-svn-id: http://svn-test-server/svn/hl/tags/v1@4 b3b2f9e3-104c-4a07-99f8-c5963656e42c
|
| * commit eccf0de (HEAD, trunk, master)
|/ Author: kenkeiras <kenkeiras@b3b2f9e3-104c-4a07-99f8-c5963656e42c>
| Date: Wed Feb 13 21:39:07 2013 +0000
|
| Actualización do README
|
| git-svn-id: http://svn-test-server/svn/hl/trunk@3 b3b2f9e3-104c-4a07-99f8-c5963656e42c
|
* commit 83c362b
| Author: kenkeiras <kenkeiras@b3b2f9e3-104c-4a07-99f8-c5963656e42c>
| Date: Wed Feb 13 21:30:51 2013 +0000
|
| Todo bo repo ten un readme
|
| git-svn-id: http://svn-test-server/svn/hl/trunk@2 b3b2f9e3-104c-4a07-99f8-c5963656e42c
|
* commit 4b78a8c
Author: kenkeiras <kenkeiras@b3b2f9e3-104c-4a07-99f8-c5963656e42c>
Date: Wed Feb 13 21:21:46 2013 +0000
Estrutura de directorios típica de SVN
git-svn-id: http://svn-test-server/svn/hl/trunk@1 b3b2f9e3-104c-4a07-99f8-c5963656e42c
# (O git graph é un alias para amosar as ramas)
[~/git-svn/hl]$ git config alias.graph
log --graph --decorate --abbrev-commit --all
[~/git-svn/hl]$ Ou podemos podemos usar `--branches`, `--tags` e `--trunk` se no son os estándar.
Happy coding!
[Referencia]
Git and Other Systems (Pro GIT)
No hay comentarios:
Publicar un comentario