2012-02-13 12 views
25

Tengo un usuario que, hasta el día de hoy, se ha llamado foo.bar. Ahora ese usuario se conocerá como fb en su lugar a partir de ahora. Pero me gustaría actualizar todos los compromisos anteriores para reflejar este nombre de usuario en lugar del anterior por razones estadísticas, etc. ¿Cómo se puede hacer esto?Cambiar autor de confirmaciones anteriores en Subversion

que sé acerca de la sintaxis

svn propset --revprop -r revision_number svn:author your_username 

Pero eso requeriría una gran cantidad de trabajo manual. ¿Hay una función o script existente que solo tome el nombre para reemplazar y el nombre para reemplazarlo?

Actualización:

Aquí es un pequeño script que hice para manejar esto, ya que voy a hacer esto en una gran cantidad de pases para una gran cantidad de usuarios :) sólo ejecutarlo en la carpeta del depósito desprotegido de su elección. Tenga en cuenta que el manejo de errores es mínimo en el script.

https://github.com/inquam/svn-rename-author

+1

+1 para el guión que funciona como se esperaba (sólo tenía que agregar la ruta a mi repo (s) a el final de cada comando 'svn'). Nota: el gancho 'pre-revprop-change' debe estar activado y devolver 0 en el comando' revprop' –

Respuesta

19

Bueno, se puede construir un comando para obtener la revisiones en el registro con el que old_username se ha comprometido con:

svn log | grep "^r[0-9]* | old_username" | cut -c 2- | awk '{print $1}' 

Este comando obtiene los registros, busca las líneas que aparecen al comienzo de cada revisión, descarta el primer carácter (es decir el r) de esas líneas y luego toma la primera parte restante de la línea, que es la revisión.

Puede usar esta información de varias maneras. En bash que podría hacerla producir la secuencia de svn propset comandos con:

for f in `svn log | grep "^r[0-9]* | old_username" | cut -c 2- | awk '{print $1}'` 
do 
svn propset --revprop -r $f svn:author your_username 
done 

la que itera sobre los valores creados por la primera expresión (ahora en apóstrofes) y utiliza esos valores para su comando svn propset, en sustitución del $f con el valor de revisión apropiado.

+0

Perfecto, exactamente el tipo de solución que estaba buscando. – inquam

+1

Sugerencia para noobs (como yo): Escriba esto dentro de la copia de trabajo, no el repositorio;) –

-5
  1. svnadmin dump
  2. Editar archivo de volcado
  3. Mata edad repo
  4. Crear nuevo y svnadmin load datos editados
+0

El método de borrible es mucho más seguro y fácil que jugar con voluminosos voluminosos.Tampoco se admite la edición de archivos dump en términos de cadena de herramientas de subversión. ¿Por qué usar un método arriesgado si hay una herramienta adecuada para el trabajo? –

+0

¿Cómo se edita el archivo de volcado? ¿Lo hace manualmente, o hay una forma automática de hacerlo? El OP sabe cómo cambiar el autor sin tomar el repo y editar manualmente el volcado (que no se recomienda ya que un mal cambio puede destruir todo el repositorio). El autor simplemente quiere una forma de automatizar el proceso. –

0

He probado esto hasta el último comando system. (Yo no quiero cambiar mi repositorio), pero este programa Perl debería funcionar:

#! /usr/bin/env perl 
# 

use strict; 
use warnings; 
use feature qw(say); 
use autodie; #Don't have to test if open fails 

use constant { 
    SVN  => "svn", 
    REPOS => "http://source/src/myrepo", 
    OLD_NAME => "dbrown", 
    NEW_NAME => "db", 
}; 

open (my $log, "-|", LOG_CMD); 

while (my $line = <$log>) { 
    chomp $line; 

    # 
    # Is this a revision line? 
    # 

while (my $line = <$log>) { 
    chomp $line; 
    next unless $line =~ /^r  #Line starts with an "r" 
         (\d+)  #Followed by digits (Capture) 
         \s\|\s #And a "|" separator 
         ([^\|]+) #This should be the name (Capture) 
         \s+\|  #And another separator 
         /x; 
    my $revision = $1; 
    my $author = $2; 
    next unless $author eq OLD_NAME; 

    # 
    # Found the Author 
    # 
    my $command = qq(@{[SVN]} -r $revision pset --revprop svn:author @{[NEW_NAME]}); 
    my $error = system $command; 
    say STDERR qq(Couldn't modify revision $revision) if $error; 
} 
3

Inserte lo siguiente en su pre-revprop-change.bat (abriéndolo en el bloc de notas) en una carpeta llamada algo así (dependiendo de su configuración) C: \ ASP.NET Projecten \ ProjectX \ engancha

set magProperyWijzigen = false; 
:: Only allow the log message and author to be changed. 
if("%propertyName%" == "svn:author") magProperyWijzigen = true; 
if("%propertyName%" == "svn:log") magProperyWijzigen = true; 

if "%magProperyWijzigen%" == "false" goto ERROR_PROPNAME 
Cuestiones relacionadas