Mostrando entradas con la etiqueta SVN. Mostrar todas las entradas
Mostrando entradas con la etiqueta SVN. Mostrar todas las entradas

viernes, 24 de julio de 2015

SVN: Ancestrally problem or How to copy branch to trunk


Cómo solucionar el problema de tratar de generar el trunk cuando se partó a trabajar en una rama directamente y no desde el trunk.

PROBLEMA:


Se intenta mergear desde una rama (el código del proyecto está en una rama) cuando el trunk está vacío y el proyectos se creó desde la rama y no desde el trunk.

svn merge ^/branches/MyBranch/ --reintegrate
svn: 'https://svn.example.com/repos/MyRepo/branches/MyBranch@92' must be ancestrally related to 'https://svn.dev.example.com/repos/MyRepo/trunk@92'
dario.palminio@exampleglb-l1077:~/Workspace/reissuePrice_trunk$ svn merge ^/branches/MyBranch/
--- Merging r11 through r92 into '.':
   C doc
   C src
   C pom.xml
 U   .
Summary of conflicts:
  Tree conflicts: 3
dario.palminio@exampleglb-l1077:~/Workspace/reissuePrice_trunk$ ll


SOLUCIÓN:


Una solución es regenerar el trunk (que actualmente está vacío):

svn delete -m 'Borra el trunk para regenerarlo' https://svn.example.com/repos/MyRepo/trunk

svn copy -m 'Genera el trunk copiando desde el branche 1260' https://svn.example.com/repos/MyRepo/MyBranch https://svn.example.com/repos/MyRepo/trunk

Esto debería funcionar, pero si tira un error como el que sigue:
...svn: Path 'https://svn.example.com/repos/MyRepo/MyBranch' does not exist in revision 93

Se puede probar copiar la copia local al trunk (regenerándolo):

svn copy . https://svn.example.com/repos/MyRepo/trunk



martes, 31 de marzo de 2015

SVN: How to revert last change on a file?

¿Cómo revertir el último cambio en solo un archivo con SVN?

¿Cuál es la mejor manera de volver a una revisión anterior de un solo archivo en SVN?

svn log -l 2
------------------------------------------------------------------------
r537635 | coco | 2015-03-30 20:58:55 +0000 (Mon, 30 Mar 2015) | 1 line

[Ticket]: Fix bug
------------------------------------------------------------------------
r536022 | coco | 2015-02-20 20:33:51 +0000 (Fri, 20 Feb 2015) | 70 lines

svn merge -c -537635 t/unit/test_01.t

svn merge -c -537635 t/unit/test_01.t
--- Reverse-merging r537635 into 't/unit/test_01.t':
U    t/unit/test_01.t
--- Recording mergeinfo for reverse merge of r537635 into 't/unit/test_01.t':
 G   t/unit/test_01.t
--- Eliding mergeinfo from 't/unit/test_01.t':
 U   t/unit/test_01.t

svn commit -m "[Ticket]: REVERT cambios en unit test"


svn up --ignore-externals
svn log -l 2

------------------------------------------------------------------------
r537657 | coco | 2015-03-31 14:02:24 +0000 (Tue, 31 Mar 2015) | 1 line

[Ticket]: REVERT ultimo cambio en unit test
------------------------------------------------------------------------
r537635 | coco | 2015-03-30 20:58:55 +0000 (Mon, 30 Mar 2015) | 1 line

[Ticket]: Fix bug
------------------------------------------------------------------------



Referencias:

jueves, 6 de noviembre de 2014

SVN: PROPDEL SVN:MERGEINFO

svn propdel svn:mergeinfo


Subversion controla los "merges" haciendo seguimiento mediante la propiedad "svn:mergeinfo".
A veces es necesario borrar esa propiedad de algún archivo para solucionar algún problema. Para ello usamos:
              svn propdel svn:mergeinfo


Caso de ejemplo


Problema al querer hacer un reintegrate despues de haber hecho el revert de un reintegrate:

Cuando se hace un reintegrate de una rama al tronco no conviene seguir haciendo reintegrates subsiguientes. Pero en ocaciones es necesario revertir el reintegrate para hacerlo nuevamente y ello puede traer problemas, como es el siguiente ejemplo:

Se hizo un reintegrate y commit al trunk (Committed revision 531227).
Luego se hizo un revert del commite (svn merge -c -531227 ^/trunk) dando revision 531235 (Revert Committed revision 531235).
Luego, al intentar hacer un reintegrate nuevamente del trunk para commitear surgió un problema.
Esto se puede solucionar con "svn propdel svn:mergeinfo".

...
At revision 531236.
[USER@HOME trunk]$ svn merge ^/branches/MY_BRANCH  --reintegrate
svn: E195016: Reintegrate can only be used if revisions 527399 through 531236 were previously merged from https://repositorio/trunk to the reintegrate source, but this is not the case:
  branches/MY_BRANCH/
DIR/FILE_WITH_PROBLEM.TXT
    Missing ranges: /trunk/DIR/FILE_WITH_PROBLEM.TXT:530809
  branches/MY_BRANCH/MY_DIR/FILE_WITH_PROBLEM_2.TXT.t
    Missing ranges: /trunk/MY_DIR/FILE_WITH_PROBLEM_2.TXT.t:530809

Solución en el Branch:


...
[USER@HOME trunk]$ cd $HOME/svn_workingcopy/BranchWorkingCopy
[USER@HOME BranchWorkingCopy]$ svn st
[USER@HOME BranchWorkingCopy]$ svn propdel svn:mergeinfo MY_DIR/FILE_WITH_PROBLEM_2.TXT.t
property 'svn:mergeinfo' deleted from 'MY_DIR/FILE_WITH_PROBLEM_2.TXT.t'.
[USER@HOME BranchWorkingCopy]$ svn propdel svn:mergeinfo DIR/FILE_WITH_PROBLEM.TXT
property 'svn:mergeinfo' deleted from 'DIR/FILE_WITH_PROBLEM.TXT'.
[USER@HOME BranchWorkingCopy]$ svn st
 M      DIR/FILE_WITH_PROBLEM.TXT
 M      MY_DIR/FILE_WITH_PROBLEM_2.TXT.t

[USER@HOME BranchWorkingCopy]$ svn diff -N > $HOME/merge_propdel.txt
[USER@HOME BranchWorkingCopy]$ svn commit -F $HOME/merge_propdel.txt
Sending        DIR/FILE_WITH_PROBLEM.TXT
Sending        MY_DIR/FILE_WITH_PROBLEM_2.TXT.t

Committed revision 531254.
[USER@HOME BranchWorkingCopy]$ svn up --ignore-externals
Updating '.':
At revision 531254.
[USER@HOME BranchWorkingCopy]$ svn merge --record-only -c 531227 ^/trunk
--- Merging r531227 into '.':
 G   .
--- Recording mergeinfo for merge of r531227 into '.':
 U   .
[USER@HOME BranchWorkingCopy]$ svn commit -F $HOME/merge_propdel_post.txt
svn: E000002: Can't open file '/home/USER/merge_propdel_post.txt': No such file or directory
[USER@HOME BranchWorkingCopy]$ svn diff -N > $HOME/merge_propdel_post.txt
[USER@HOME BranchWorkingCopy]$ svn commit -F $HOME/merge_propdel_post.txt


Solución en el trunk:


...
cd $HOME/svn_workingcopy/trunk
[USER@HOME trunk]$ svn st
[USER@HOME trunk]$ svn up --ignore-externals
Updating '.':
 U   .
Updated to revision 531254.
[USER@HOME trunk]$ svn merge ^/branches/MY_BRANCH  --reintegrate
--- Merging differences between repository URLs into '.':
R    MY_DIR/FILE_WITH_PROBLEM_2.TXT.t
R    DIR/FILE_WITH_PROBLEM.TXT
 G   .
--- Recording mergeinfo for merge between repository URLs into '.':
 U   .
[USER@HOME trunk]$

Despues de esto se puede hacer el commit apropiadamente.



Referencias:
http://stackoverflow.com/questions/4737605/reintegrate-can-only-be-used-if-revisions-x-through-y-were-previously-merged-fro
http://svnbook.red-bean.com/en/1.7/index.html


martes, 4 de noviembre de 2014

SVN: Reintegrate a Branch to Trunk

SVN: Reintegrar una rama al tronco

¿Cómo reintegrar un branch al trunk?

La idea es que cuando trabajamos con un branch, que es una rama del trunk, despues de un tiempo, cuando hayamos finalizado de trabajar con esta rama habrá que reintegrarla en el trunk haciendo un merge al mismo. El proceso a seguir puede ser el siguiente:

1) Primero traemos los cambios del trunk al branch


svn co https://REPO/branches/BRANCH --ignore-externals
cd BRANCH
#BRANCH]$ svn up --ignore-externals
BRANCH]$ svn merge ^/trunk
BRANCH]$ svn diff -N > merge_log.txt
#BRANCH]$ svn commit -m "Leyenda del Merge"
BRANCH]$ svn commit -F merge_log.txt

Esto se puede hacer previamente cada vez que se hace el reintegrate. Luego de que nuestro branch tiene todos los cambios actualizados del trunk podemos mezclarlos con los del trunk en el trunk (o sea comitear al trunk).

2) Despues llevamos los cambios del branch al trunk


svn co https://REPO/trunk trunk_workingcopy --ignore-externals
cd trunk_workingcopy
#trunk_workingcopy ]$ svn up --ignore-externals
trunk_workingcopy ]$ svn merge --reintegrate ^/branches/BRANCH
#Revisar los cambios
trunk_workingcopy ]$ $svn st
trunk_workingcopy ]$ svn diff -N > reintegrate_branch_to_trunk.log
#Ejecutar el comando para eliminar los comentarios de merge info:
#trunk_workingcopy ]$ svn st *|grep '^.M'|sed -re 's/^ *[A-Z]+ +//'|xargs -r svn pd svn:mergeinfo
#Commitear con leyenda:
#trunk_workingcopy ]$ svn commit -m "Reintegrate X"
Committed revision 392.

3) Después borramos el branch 

Después que el branch fue reintegrado y que se sabe que no se va a trabajar mas en ese branch se puede borrar.

$ svn delete https://REPO/branches/BRANCH \
             -m "Remove my branch, reintegrated with trunk in r392"
Committed revision 393.

4) Observación del reintegrate


Una vez que se hizo reintegrate no se debe volver a usar el branch ni a hacer otra vez reintegrate. ¿Por qué? Luego de hacer el reintegrate y subir los cambios: a) El trunk queda con los cambios que están en el branch; b) Cuando se vuelva a hacer merge del trunk en el branch para reutilizarlo, es posible que salten conflictos. O sea que no se debería usar mas el branch y el branch conviene ser borrado. Pero en caso de que se quiera hacer la excepción se puede hacer lo siguiente:

Lo que se puede hacer, para que no salten conflictos despes de hacer un reintegrate o revertir un reintegrate, es puentear el merge (que viene después del commit, pongamosle que actualiza el branch a la version  222)
Ejemplo:
podemos puentear el merge (que viene después del commit)
[branch]$   svn merge --record-only -c 222 ^/trunk

Con esto evitamos que haga el merge con los cambios que ya fueron comiteados en la version 222.


O sea que, no es aconsejable reutilizar un branch despues de un reintegrate, pero es más que nada por una cuestión de conflictos. Que de requerirse se puede reutilizar usando svn merge --record-only -c  <version> luego del commit.


SVN: Branch of Branch (Copy of Branch)

¿Cómo hacer una rama de una rama en una revisión dada?


(How to Copy a Branch within a Folder in the Repository: Explain how to copy a given branch with a given version within another folder in the repository)

Para hacer un branch del branch en la revision 9999.

svn mkdir https://repos/repo/branches/BRANCH_copy -m 'Crete folder to new branch'

svn cp https://repos/repo/branches/BRANCH_01@9999 https://repos/repo/branches/BRANCH_copy -m 'Copy of BRANCH_01'

svn co https://repos/repo/branches/BRANCH_copy/BRANCH_01 WorkingCopy_BRANCH_copy --ignore-externals


Nota:
Para remover el branch hacemos:

svn rm https://repos/repo/branches/BRANCH_copy/BRANCH_01 -m 'Remove Copy of BRANCH_01'

martes, 28 de octubre de 2014

SVN: Tree conflicts Solution

Solución de conflictos de árbol (Tree conflicts solution):

[user@dev]$ svn st
...
!     C t/unit/models/Toolbox/Restrictions
     >   local delete, incoming edit upon merge
Summary of conflicts:
 Tree conflicts: 32

[user@dev]$ mkdir t/unit/models/Toolbox/Restrictions
[user@dev]$ svn revert t/unit/models/Toolbox/Restrictions
Reverted 't/unit/models/Toolbox/Restrictions'

[user@dev]$ svn st
...
?       t/unit/models/Toolbox/Restrictions
Summary of conflicts:
 Tree conflicts: 31

#Luego enviar los cambios

Reference:
http://stackoverflow.com/questions/4317973/svn-how-to-resolve-local-edit-incoming-delete-upon-update-message
http://svnbook.red-bean.com/en/1.7/index.html

jueves, 23 de octubre de 2014

SVN: Machete de comandos mas usados

Status
svn st

Checkout
svn co https://URL/branches/branch --ignore-externals


Reintegrate del trunk
trunk]$ svn up --ignore-externals
trunk]$ svn merge ^/branches/branch --reintegrate
trunk]$ svn ci -m "message"

Enviar cambios

svn ci -m "msg”

svn commit PATH -m "Message"

Revertir cambios locales
svn revert . -R

Update
svn update --ignore-externals
svn up --ignore-externals



Referencias:
https://code.google.com/p/relaxtives/wiki/Subversion



SVN: Crear y aplicar un Patch

Crear y aplicar un Patch



svn diff > ~/BUG_FIXED_.diff

patch -p0 -i ~/BUG_FIXED_.diff




Patch para volver a hacer un commit revertido:



Si el commit revertido fue r999 y su commit anterior r998, como indica el log:
svn log -l2
------------------------------------------------------------------------
r999 | dario | 2015-01-13 17:32:35 +0000 (Tue, 13 Jan 2015) | 1 line
MY COMMIT: comment.
------------------------------------------------------------------------
r998 | juan | 2015-01-13 12:53:00 +0000 (Tue, 13 Jan 2015) | 1 line
PREVIOUS COMMIT: comment.


Se puede hacer un diff de la siguiente manera:


svn diff -r r998:r999 > Patch_MY_COMMIT.diff


Luego aplicamos el Patch:


patch -p0 -i Patch_MY_COMMIT.diff



Referencia:
- Quick-n-Dirty Guide to Creating and Applying diff-style Patches.
- Crear y aplicar parches (patches) en Linux.


SVN: Log (Consultar Historial)

¿Cómo recuperar información histórica de commits y revisiones?



Traigo mis commit
svn log -l 100 | grep USER
svn log -l 100 | grep -A 3 -B 3 USER

Todos los commit de un usuario entre dos fechas:
svn log -r '{2010-12-10}:{2010-12-11}'|sed -n '1p; 2,/^-/d; /USER/,/^-/p'
svn log -r '{2014-09-23}:{2014-10-15}'|sed -n '1p; 2,/^-/d; /USER/,/^-/p' > $HOME/resultado_USER_commits.log

Revisar commits de una revisión dada
svn log -r NRO_REVISION -v
svn log --revision NRO_REVISION

Revisar commits de un rango de revisión dado
svn log -r NRO_REVISION_1:NRO_REVISION_2

Listar commit entre fechas
svn log -v -r {2014-05-23}:{2014-05-28} --xml > $HOME/resultado_log_entre_fechas.xml
svn log -v -r {2014-08-20}:{2014-08-24} > $HOME/resultado_log_entre_fechas.log

Listar historia de un archivo
svn log FILE

Listar últimos 5 commit
svn log -l 5 -v

Show author and revision information inline for the specified files or URLs
svn blame -v filename
svn blame -v filename > $HOME/resultado_blame.xml


Referencias:

lunes, 20 de octubre de 2014

SVN: Rollback commit (revert revision)


Revertir los cambios de una revisión

¿Cómo deshacer un commit o una revisión?
Podemos querer revertir (deshacer) un commit que hicimos o volver a una revisión pasada.

Si queremos revertir un commit que hicimos con numero_de_revision dado, la forma general es:
                svn merge -r -numero_de_revision url-del-repositorio
... y despues hacer commit.

#Otra manera:
svn merge -c -1003 file:///path/my_project/trunk
svn commit -m "Rollback de la revisión 1003 (revert commit 1003)"

O podemos querer volver a una revisión pasada. La forma general es:
                svn merge -r version-actual:version-anterior url-del-repositorio
... y despues hacer commit.

#Por ejemplo:
svn merge -r 1003:1002 http://repo/project/trunk
svn commit -m "Revert a la revisión 1002"

#Otra forma:
cd ruta/de/miproyecto/
svn merge -r 1003:1002
svn commit -m "Reversión de cambios del ultimo commit"

#Otra
svn merge -r 1003:1002 .
svn commit -m "Rollback de la revisión 1003"

#También podemos indicar tan solo un dir o un archivo al que volver (no toda la rama).
svn merge -r HEAD:543 my_file.pm

#Una forma simulada:
svn merge --dry-run -r 1003:1002 http://repo/project/trunk
#La opción --dry-run lo que hace es mostrarte en la terminal el resultado del merge si hacerlo realmente.

#Si quieremos ver exactamente que cambiará en cada archivo y cada dir, también puedes hacer un:
svn diff -r 1003:1002 http://repo/project/trunk


sábado, 24 de noviembre de 2012

Subversion SVN on Ubuntu




# Install subversion
sudo apt-get install subversion libapache2-svn

# If usu java and subversion instal JavaHL Library
# Subclipse 1.8.x requires JavaHL version 1.7.x.
# I need Subclipse 1.8.x in order to use svn 1.7.x. ...see more...
sudo add-apt-repository ppa:dominik-stadler/subversion-1.7
sudo apt-get update
sudo apt-get install libsvn-java

#Install visual graphic client (cliente visual para SVN (RapidSVN) en Ubuntu)
sudo apt-get install rapidsvn


Reference:
- Subversion installing
-Instalar un cliente visual para SVN (RapidSVN) en Ubuntu.
-SVN Cheatsheet.