Este es el comando reposurgeon que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.
PROGRAMA:
NOMBRE
reposurgeon - operaciones quirúrgicas en repositorios
SINOPSIS
reposicionado [comando...]
DESCRIPCIÓN
El objetivo de la publicidad de reposicionado es habilitar operaciones riesgosas que VCSes (control de versiones
sistemas) no quiere permitirle hacer, como (a) editar comentarios y metadatos anteriores, (b)
eliminar confirmaciones, (c) fusionar y dividir confirmaciones, (d) eliminar archivos y subárboles
del historial de repos, (e) fusionar o injertar dos o más repos, y (f) cortar un repositorio en
two cortando un enlace padre-hijo, preservando la estructura de rama de ambos repositorios hijo.
La motivación original para reposicionado era limpiar los artefactos creados por el repositorio
conversiones. Se previó que la herramienta también tendría aplicaciones cuando el código necesita
ser eliminado de los repositorios por razones legales o políticas.
Para mantener la opción reposicionado simple y flexible, normalmente no tiene su propio repositorio
leyendo y escribiendo. En cambio, se basa en poder analizar y emitir el comando
flujos creados por git-fast-export y leídos por git-fast-import. Esto significa que puede ser
se utiliza en cualquier sistema de control de versiones que tenga utilidades de exportación e importación rápidas.
El formato de flujo git-import también define implícitamente un lenguaje común de primitivos
operaciones para reposicionado hablar.
Sistemas totalmente compatibles (aquellos para los que reposicionado puede leer y escribir repositorios)
incluyen git, hg, bzr, svn, darcs, RCS y SRC. Para obtener una lista completa, con dependencias y
notas técnicas, tipo preferir En el correo electrónico “Su Cuenta de Usuario en su Nuevo Sistema XNUMXCX”. reposicionado rápido.
La escritura en los sistemas RCS y SRC orientados a archivos se realiza mediante rcs-importación rápida(1) y tiene
algunas limitaciones serias porque esos sistemas no pueden representar todos los metadatos en un
flujo git-fast-export. Consulte la documentación de esa herramienta para obtener detalles y
soluciones alternativas.
La escritura de repositorios de Subversion también tiene algunas limitaciones significativas, discutidas en el
sección sobre cómo trabajar con Subversion.
Los archivos del repositorio de fósiles se pueden leer usando el --format = fósil opción del read
comando y escrito con el --format = fósil opción del escribir. Ignorar patrones son
no traducido en ninguna dirección.
CVS es compatible con solo lectura, no con escritura. Para CVS, reposicionado debe ejecutarse desde dentro de un
directorio del repositorio.
Para obtener orientación sobre la pragmática de la conversión de repositorios, consulte el DVCS Migración HOWTO[1].
SEGURIDAD ADVERTENCIAS
reposicionado es una herramienta lo suficientemente afilada para cortarte. Tenga cuidado de no escribir nunca un
repositorio en un estado realmente inconsistente y terminará con un mensaje de error
en lugar de proceder cuando se confunden sus estructuras de datos internas. Sin embargo, hay
muchas cosas que puede hacer con él, como alterar las marcas de tiempo de confirmación almacenadas para que no
coincide con la secuencia de confirmación, que es probable que cause estragos una vez que haya terminado.
Proceda con precaución y verifique su trabajo.
También tenga en cuenta que, si su DVCS hace lo habitual de convertir los ID de confirmación en criptográficos
hash de contenido y enlaces principales, editando un repositorio de acceso público con esta herramienta
sería una mala idea. Todas las operaciones quirúrgicas en reposicionado modificará el hash
cadenas, lo que significa que otros no podrán sacar o empujar hacia el repositorio.
Consulte también las notas sobre problemas específicos del sistema en la sección denominada "LIMITACIONES
Y GARANTÍAS ”.
FUNCIONAMIENTO
El programa se puede ejecutar en uno de dos modos, ya sea como un intérprete de comandos interactivo
o en modo por lotes para ejecutar comandos dados como argumentos en el reposicionado invocación
línea. Las únicas diferencias entre estos modos son (1) el interactivo comienza por
activando la opción 'verbose 1', (2) en modo por lotes todos los errores (incluyendo normalmente
errores recuperables en la sintaxis del conjunto de selección) son fatales, y (3) cada argumento de la línea de comandos
que comienza con "-" tiene eso despojado (lo que, en particular, significa que --ayuda y
--versión funcionará como se esperaba). Además, en modo interactivo, Ctrl-P y Ctrl-N serán
disponible para desplazarse por el historial de comandos y completar la pestaña de las palabras clave del comando
para todos.
Un flujo de git-fast-import consiste en una secuencia de comandos que deben ejecutarse en el
secuencia especificada para construir el repositorio; para evitar confusiones con reposicionado comandos lo haremos
consulte los comandos de flujo como eventos en esta documentación. Estos eventos son implícitamente
numerados del 1 en adelante. La mayoría de los comandos requieren especificar una selección de secuencia de eventos.
números así reposicionado sabrá qué eventos modificar o eliminar.
Para obtener todos los detalles de los tipos de eventos y la semántica, consulte la git-fast-importación(1) página de manual;
el resto de este párrafo es un comienzo rápido para los impacientes. La mayoría de los eventos de una transmisión son
confirma describir los estados de revisión del repositorio; estos se agrupan bajo un solo
cambiar el comentario uno o más operaciones de archivo (operaciones de archivo), que generalmente apuntan a manchas que
son estados de revisión de archivos individuales. Un fileop también puede ser una operación de eliminación
indicando que un archivo especificado previamente existente fue eliminado como parte de la versión
cometer; Hay un par de otros tipos de fileop especiales de menor importancia.
Comandos para reposicionado constan de una palabra clave de comando, a veces precedida por una selección
conjunto, a veces seguido de argumentos separados por espacios en blanco. A menudo es posible omitir
el argumento de conjunto de selección y que sea por defecto algo razonable.
A continuación se muestran algunos ejemplos motivadores. Los comandos se explicarán con más detalle después de la
descripción de la sintaxis de selección.
: 15 editar ;; editar el objeto asociado con la marca: 15
editar ;; editar todos los objetos editables
29..71 lista ;; lista resumen índice de eventos 29..71
236 .. $ lista ;; Lista de eventos desde el 236 hasta el último
<# 523> inspeccionar ;; Busque el compromiso # 523; están numerados
;; 1-origen desde el inicio del repositorio.
<2317> inspeccionar ;; Busque una etiqueta con el nombre 2317, un consejo de confirmación
;; de una rama denominada 2317, o una confirmación con ID heredado
;; 2317. Inspeccione lo que encuentre. Un número simple es
;; probablemente un ID heredado heredado de una Subversion
;; número de revisión.
/ regression / list ;; enumerar todas las confirmaciones y etiquetas con comentarios o
;; encabezados de confirmador o encabezados de autor que contienen
;; la cadena "regresión"
1 ..: 97 & = T borrar ;; eliminar etiquetas del evento 1 para marcar 97
[Makefile] inspeccionar ;; Inspeccione todas las confirmaciones con una operación de archivo tocando Makefile
;; y todos los blobs a los que se hace referencia en un fileop
;; tocando Makefile.
: 46 propina ;; Muestre la sugerencia de rama que posee la confirmación: 46.
@dsc (: 55) lista ;; Mostrar todas las confirmaciones con rastreo de ascendencia hasta: 55
@min ([. gitignore]) eliminar .gitignore eliminar
;; Elimine el primer fileop .gitignore en el repositorio.
SELECCIÓN SINTAXIS
La sintaxis de especificación del conjunto de selección es un minilenguaje orientado a expresiones. El mas
El término básico en este idioma es una ubicación. Los siguientes tipos de ubicaciones primitivas son
apoyado:
números de eventos
Un literal numérico simple se interpreta como un número de secuencia de eventos de 1 origen.
marcas
Un literal numérico precedido por dos puntos se interpreta como una marca; ver el flujo de importación
Documentación de formato para la explicación de la semántica de las marcas.
nombres de etiquetas y ramas
El nombre base de una rama (incluidas las ramas en el espacio de nombres refs / tags) se refiere a su
consejo cometer. El nombre de una etiqueta es equivalente a su marca (la de la etiqueta misma, no
el compromiso al que se refiere). Las ubicaciones de las etiquetas y las sucursales están entre corchetes con <> (ángulo
corchetes) para distinguirlos de las palabras clave de comando.
ID heredados
Si el contenido de los corchetes de nombre (<>) no coincide con un nombre de etiqueta o rama, el
El intérprete siguiente busca los ID heredados de confirmaciones. Esto es especialmente útil cuando
ha importado un volcado de Subversion; significa que las confirmaciones hechas a partir de él pueden ser referidas
por sus correspondientes números de revisión de Subversion.
cometer números
El literal anumérico entre corchetes de nombre (<>) precedido por # se interpreta como un origen 1
número de secuencia de confirmación.
$
Se refiere al último evento.
Estos pueden agruparse en conjuntos de las siguientes formas:
rangos
Un rango son dos ubicaciones separadas por ".." y es el conjunto de eventos que comienzan en el
ubicación a la izquierda y terminando en la ubicación a la derecha (inclusive).
liza
Se aceptan listas de ubicaciones y rangos separados por comas, con el significado obvio.
Hay otras formas de construir conjuntos de eventos:
conjuntos de visibilidad
Un conjunto de visibilidad es una expresión que especifica un conjunto de tipos de eventos. Consistirá en
un signo igual inicial, seguido de letras tipográficas. Estas son las letras tipo:
┌──┬──────────────────────────┬─────────────────── ───────┐
│B │ blobs │ Selección más predeterminada │
│ │ │ conjuntos excluyen blobs; ellos │
│ │ │ tienen que ser manipulados │
│ │ │ a través de las confirmaciones que │
│ │ │ se adjuntan. │
├──┼──────────────────────────┼─────────────────── ───────┤
│C │ confirma │ │
├──┼──────────────────────────┼─────────────────── ───────┤
│D │ confirmaciones de eliminación total │ Estos son artefactos │
│ │ │ producido por algunos mayores │
│ │ │ conversión de repositorio │
│ │ │ herramientas. │
├──┼──────────────────────────┼─────────────────── ───────┤
│H │ cabeza (punta de rama) │ │
│ │ confirma │ │
├──┼──────────────────────────┼─────────────────── ───────┤
│O │ huérfano (sin padres) │ │
│ │ confirma │ │
├──┼──────────────────────────┼─────────────────── ───────┤
│U │ se confirma con llamadas como │ │
│ │ padres │ │
├──┼──────────────────────────┼─────────────────── ───────┤
│Z │ confirma sin fileops │ │
├──┼──────────────────────────┼─────────────────── ───────┤
│M │ fusionar (varios padres) │ │
│ │ confirma │ │
├──┼──────────────────────────┼─────────────────── ───────┤
│F │ tenedor (varios niños) │ │
│ │ confirma │ │
├──┼──────────────────────────┼─────────────────── ───────┤
│L │ comete con impuro │ │
│ │ comentarios de varias líneas │ │
│ │ (sin separar │ │
│ │ línea vacía después de │ │
│ │ primero) │ │
├──┼──────────────────────────┼─────────────────── ───────┤
│Yo │ se compromete para lo cual │ │
│ │ los metadatos no pueden ser │ │
│ │ decodificado a UTF-8 │ │
├──┼──────────────────────────┼─────────────────── ───────┤
│T │ etiquetas │ │
├──┼──────────────────────────┼─────────────────── ───────┤
│R │ se reinicia │ │
├──┼──────────────────────────┼─────────────────── ───────┤
│P │ Passthrough │ Todos los tipos de eventos simplemente │
│ │ │ pasó, │
│ │ │ incluyendo comentarios, │
│ │ │ progreso comandos y │
│ │ │ control comandos. │
├──┼──────────────────────────┼─────────────────── ───────┤
│N │ ID heredados │ Cualquier cadena que coincida con un │
│ │ │ cookie (ID heredado) │
Formato │ │ │. │
└──┴──────────────────────────┴─────────────────── ───────┘
referencias
Un nombre de referencia (entre paréntesis angulares) se resuelve en un solo objeto, ya sea un
cometer o etiquetar.
-
│ tipo │ Automática │
├──────────────┼──────────────────────────────────────────
│ nombre de etiqueta │ etiqueta anotada con ese nombre │
├──────────────┼──────────────────────────────────────────
│ nombre de la rama │ la confirmación de la sugerencia de la rama │
├──────────────┼──────────────────────────────────────────
│ ID heredado │ comprometerse con ese ID heredado │
├──────────────┼──────────────────────────────────────────
│nombre asignado │ nombre equiparado a una selección de │
│ │ asignar │
└──────────────┴───────────────────────────────────────────────
Tenga en cuenta que si una etiqueta anotada y una rama tienen el mismo nombre foo, resolverá
a la etiqueta en lugar de la confirmación de la punta de la rama.
fechas y sellos de acción
Un sello de fecha o acción entre paréntesis angulares se resuelve en un conjunto de selección de todas las coincidencias
se compromete.
┌──────────────────────────────┬───────────────── ───────────────┐
│ tipo │ Automática │
├──────────────────────────────┼───────────────── ───────────────┤
│ Marca de tiempo RFC3339 │ cometer o etiquetar con eso │
│ │ hora / fecha │
├──────────────────────────────┼───────────────── ───────────────┤
│ sello de acción (marca de tiempo! Correo electrónico) │ confirmaciones o etiquetas con eso │
│ │ marca de tiempo y autor (o │
│ │ committer si no hay autor). │
├──────────────────────────────┼───────────────── ───────────────┤
│ aaaa-mm-dd parte de RFC3339 │ todas las confirmaciones y etiquetas con eso │
│ marca de tiempo │ fecha │
└───────────────────────────────┴───────────────── ───────────────┘
Para refinar la coincidencia con una única confirmación, use un sufijo de índice de 1 origen separado por '#'.
Por lo tanto, "<2000-02-06T09: 35: 10Z>" puede coincidir con varias confirmaciones, pero
"<2000-02-06T09: 35: 10Z # 2>" coincide solo con el segundo del conjunto.
búsqueda de texto
Una expresión de búsqueda de texto es una expresión regular de Python rodeada de barras diagonales
(para incrustar una barra inclinada, use un escape de cadena de Python como \ x2f).
Una búsqueda de texto normalmente coincide con los campos de comentarios de confirmaciones y anotaciones.
etiquetas, o contra sus nombres de autor / autor de la confirmación, o contra los nombres de las etiquetas; también el
texto de los objetos de paso.
El alcance de una búsqueda de texto se puede cambiar con letras calificativas después del final
barra oblicua. Estos son los siguientes:
┌───────┬─────────────────────────────────┐
│carta │ Automática │
├───────┼─────────────────────────────────┤
│ un │ nombre de autor en la confirmación │
├───────┼─────────────────────────────────┤
│ b │ nombre de la rama en la confirmación; también │
│ │ coincide con blobs referenciados por │
│ │ se compromete en ramas coincidentes, │
│ │ y etiquetas que apuntan a commmits │
│ │ en parchear ramas. │
├───────┼─────────────────────────────────┤
│ c │ texto de comentario de confirmación o etiqueta │
├───────┼─────────────────────────────────┤
│ r │ referencia de confirmación en etiqueta o │
│ │ restablecer │
├───────┼─────────────────────────────────┤
│ p │ texto en traspaso │
├───────┼─────────────────────────────────┤
│ t │ etiquetador en etiqueta │
├───────┼─────────────────────────────────┤
│ n │ nombre de la etiqueta │
├───────┼─────────────────────────────────┤
│ B │ contenido de blobs │
└───────┴─────────────────────────────────┘
Varias letras calificativas pueden agregar más ámbitos de búsqueda.
(El calificador "b" reemplaza la sintaxis de branchset en versiones anteriores de reposicionado.)
caminos
Una "expresión de ruta" encerrada entre corchetes se resuelve en el conjunto de todas las confirmaciones y
blobs relacionados con una ruta que coincide con la expresión dada. La expresión de la ruta en sí es
ya sea una ruta literal o una expresión regular rodeada de barras. Inmediatamente despues
el final / de una ruta de expresión regular puede poner cualquier número de los siguientes caracteres
que actúan como banderas: 'a', 'c', 'D', 'M', 'R', 'C', 'N'.
De forma predeterminada, una ruta está relacionada con una confirmación si esta última tiene un fileop que toca ese
ruta de archivo: modifica ese cambio, elimina el que lo elimina, cambia el nombre y copia ese
tenerlo como fuente o destino. Cuando la bandera 'c' está en uso, el significado cambia: la
Las rutas relacionadas con una confirmación se convierten en todas las rutas que estarían presentes en un pago para
que se comprometa.
Un literal de ruta coincide con una confirmación si y solo si el literal de ruta es exactamente uno de los
rutas relacionadas con la confirmación (no se realiza ninguna operación de prefijo o sufijo). En particular un
La ruta literal no coincidirá si corresponde a un directorio en el repositorio elegido.
Una expresión regular coincide con una confirmación si coincide con cualquier ruta relacionada con la confirmación
en cualquier parte del camino. Puede usar '^' o '$' si desea que la expresión solo coincida
al principio o al final de los caminos. Cuando la bandera 'a' está en uso, la expresión de ruta
selecciona confirmaciones cuyas rutas coinciden con la expresión regular. Esto no siempre es un
subconjunto de confirmaciones seleccionadas sin la bandera 'a' porque también selecciona confirmaciones con
no hay rutas relacionadas (por ejemplo, confirmaciones vacías, deletealls y confirmaciones con árboles vacíos). Si tu
desea evitarlos, puede usar, por ejemplo, '[/ regex /] & [/ regex / a]'.
Las banderas 'D', "M ',' R ',' C ',' N 'restringen la verificación de coincidencias al archivo correspondiente.
tipos. Tenga en cuenta que esto significa que una coincidencia 'a' es más fácil (no más difícil) de lograr. Estos son
no-iops cuando se usa con 'c'.
Una ruta o literal coincide con un blob si coincide con cualquier ruta que apareció en un
archivo de modificación que hace referencia a ese blob. Para seleccionar blobs puramente coincidentes o
confirmaciones coincidentes, componga una expresión de ruta con = B o = C.
Si necesita incrustar '[^ /]' en su expresión regular (por ejemplo, para expresar "todos
caracteres pero una barra ") puede utilizar un escape de cadena de Python como \ x2f.
llamadas a funciones
La expresión lenguaje tiene funciones especiales nombradas. La secuencia de una función nombrada
es "@" seguido de un nombre de función, seguido de un argumento entre paréntesis. Ahora
se definen las siguientes funciones:
──────┬─────────────────────────────────
│nombre │ Automática │
├─────┼────────────────────────────── ──
│min │ miembro mínimo de una selección │
│ │ establecer │
├─────┼────────────────────────────── ──
│max │ miembro máximo de una selección │
│ │ establecer │
├─────┼────────────────────────────── ──
│amp │ el conjunto de selección no vacío se convierte en │
│ │ todos los objetos, el conjunto vacío es │
│ │ devuelto vacío │
├─────┼────────────────────────────── ──
│par │ todos los padres de confirmaciones en │
│ │ conjunto de argumentos │
├─────┼────────────────────────────── ──
│chn │ todos los hijos de commits en │
│ │ conjunto de argumentos │
├─────┼────────────────────────────── ──
│dsc │ todas las confirmaciones descienden de │
│ │ conjunto de argumentos (conjunto de argumentos │
│ │ incluido) │
├─────┼────────────────────────────── ──
│anc │ todo confirma a quien el argumento │
│ │ el conjunto desciende de (argumento │
│ │ juego incluido) │
├─────┼────────────────────────────── ──
│pre │ eventos antes del conjunto de argumentos; │
│ │ vacío si el argumento establecido │
│ │ incluye el primer evento. │
├─────┼────────────────────────────── ──
│suc │ eventos después del conjunto de argumentos; │
│ │ vacío si el argumento establecido │
│ │ incluye el último evento. │
└─────┴───────────────────────────────── ┘
Las expresiones de conjunto se pueden combinar con los operadores | y &; estos son, respectivamente, establecidos
unión e intersección. El | tiene menor precedencia que la intersección, pero puede usar
paréntesis '(' y ')' para agrupar expresiones en caso de ambigüedad (esto reemplaza
corchetes utilizados en versiones anteriores de la sintaxis).
Cualquier operación establecida puede ir seguida de '?' para agregar los vecinos y referentes de los miembros del conjunto.
Esto amplía el conjunto para incluir a los padres e hijos de todas las confirmaciones en el conjunto, y
los referentes de cualquier etiqueta y se reinicia en el conjunto. Cada referencia de blob del conjunto es
reemplazado por todas las confirmaciones que se refieren a él. Los '?' se puede repetir para extender el
profundidad del vecindario.
Establezca la negación con el prefijo ~; tiene mayor precedencia que & y | pero menor que?
IMPORTADAS Y EXPORTAR
reposicionado puede contener varios estados de repositorio en el núcleo. Cada uno tiene un nombre. En cualquier dado
tiempo, se puede seleccionar uno para editarlo. Los comandos de este grupo importan repositorios, exportan
ellos y manipular la lista interna y la selección.
read [--format = fósil] [directorio|-|<infile]
Con un argumento de nombre de directorio, este comando intenta leer el contenido de un
repositorio en cualquier sistema de control de versiones admitido en ese directorio; leer sin
argumentos hace esto en el directorio actual. Si la salida se redirige a un archivo sin formato,
se leerá como una secuencia de importación rápida o un archivo de volcado de Subversion. Con un argumento de
"-", este comando lee una secuencia de importación rápida o un archivo de volcado de Subversion desde el estándar
input (esto será útil en filtros construidos con argumentos de línea de comando).
Si el contenido es un flujo de importación rápida, cualquier propiedad "cvs-revision" en una confirmación es
tomado como una lista separada por líneas nuevas de cookies de revisión de CVS que apuntan a la confirmación,
y se utiliza para elevación de referencia.
Si el contenido es un flujo de importación rápida, se toma cualquier propiedad "legacy-id" en una confirmación
para ser un token de ID heredado que apunta a la confirmación y se usa para levantar referencias.
Si la ubicación de lectura es un repositorio de git y contiene un archivo .git / cvsauthors (como
se deja en su lugar por git importacióncv -A) ese archivo se leerá como si hubiera sido
dado a la Autorzy read mando.
Si la ubicación de lectura es un directorio y su subdirectorio de repositorio tiene un archivo llamado
legacy-map, ese archivo se leerá como si se hubiera pasado a un comando de lectura heredado.
Si la ubicación de lectura es un archivo y la --format = fósil se utiliza, el archivo es
interpretado como un repositorio de fósiles.
El repositorio recién leído se agrega a la lista de repositorios cargados y se convierte en el
actual, seleccionado para cirugía. Si se leyó de un archivo sin formato y el nombre del archivo
termina con una de las extensiones .fi o .svn, esa extensión se elimina de la carga
Lista de nombres.
Nota: este comando no toma un conjunto de selección.
escribir [--legacy] [--format = fossil] [--noincremental] [--callout] [> archivo de salida|-]
Volcar los eventos seleccionados como una secuencia de importación rápida que representa el repositorio editado; los
El conjunto de selección predeterminado es todos los eventos. Dónde volcar es la salida estándar si hay
ningún argumento o el argumento es '-', o el objetivo de una redirección de salida.
Alternativamente, si no hay redireccionamiento y el argumento nombra un directorio, el
el repositorio se reconstruye en ese directorio, ignorando cualquier conjunto de selección; si
ese directorio de destino no está vacío, su contenido se respalda en un directorio de guardado.
Si la ubicación de escritura es un archivo y el --format = fósil se utiliza, el archivo se escribe
en formato de repositorio Fossil.
Con la --legado opción, el Legacy-ID de cada confirmación se agrega a su confirmación
comentar a la hora de escribir. Esta opción es principalmente útil para depurar el borde de conversión.
casos.
Si especifica un conjunto de selección parcial de modo que se incluyan algunas confirmaciones pero su
los padres no lo son, la salida incluirá cookies de volcado incremental para cada rama con
un origen fuera del conjunto de selección, justo antes de la primera referencia a esa rama en
un compromiso. Una cookie de volcado incremental se parece a "refs / heads / foo ^ 0" y es una pista para
cargadores de flujo de exportación que la rama debe estar pegada a la punta de un preexistente
rama del mismo nombre. los --no incremental La opción suprime este comportamiento.
Cuando especifica un conjunto de selección parcial, incluido un objeto de confirmación, fuerza la
inclusión de cada blob al que se refiere y cada etiqueta que se refiere a él.
La especificación de una selección parcial puede provocar una situación en la que algunas marcas principales en
las fusiones no se corresponden con las confirmaciones presentes en el volcado. Cuando esto sucede y
--gritar se especificó la opción, el código de escritura reemplaza la marca de combinación con una llamada,
el sello de acción del compromiso padre; de lo contrario, se omite la marca principal. Importadores
fallará al leer un volcado de flujo con llamadas; está destinado a ser utilizado por el
injerto mando.
Se permite especificar un conjunto de selección de escritura con espacios en blanco, pero es poco probable que
buenos resultados si lo carga un importador.
Las extensiones de propiedad se omitirán de la salida si el importador del
el tipo de repositorio preferido no puede digerirlos.
Nota: para examinar pequeños grupos de confirmaciones sin el medidor de progreso, utilice inspeccionar.
choose [renombrar]
Elija un repositorio con nombre en el que operar. El nombre de un repositorio es normalmente el nombre base
del directorio o archivo desde el que se cargó, pero los repositorios cargados desde la entrada estándar son
"sin nombre". reposicionado agregará un sufijo de eliminación de ambigüedades si ha habido varios
lee de la misma fuente.
Sin argumento, enumera los nombres de los repositorios almacenados actualmente y su carga
veces. La segunda columna es '*' para el repositorio seleccionado actualmente, '-' para otros.
caer [renombrar]
Elimine un repositorio nombrado por el argumento de la lista de reposurgeon, liberando la memoria utilizada para
sus metadatos y la eliminación de blobs en disco. Sin argumento, descarta el elegido actualmente
repositorio
rebautizar renombrar
Cambiar el nombre del repositorio elegido actualmente; requiere un argumento. No lo haré si hay
ya uno por el nuevo nombre.
RECONSTRUYE IN IN SITU
reposicionado puede reconstruir un repositorio alterado en su lugar. Los archivos sin seguimiento normalmente se guardan
y restaurado cuando se extrae el contenido del nuevo repositorio (pero consulte la
documentación del comando "preserve" para una advertencia).
reconstruir [directorio]
Reconstruir un repositorio del estado en poder de reposicionado. Este comando no toma un
conjunto de selección.
El argumento único, si está presente, especifica el directorio de destino en el que realizar la
reconstruir; si la lectura del repositorio fue de un directorio de repositorio (y no un git-import
stream), por defecto es ese directorio. Si el directorio de destino no está vacío,
los contenidos se guardan en un directorio de guardado. Archivos y directorios en el repositorio
La lista de conservación se vuelve a copiar desde el directorio de copia de seguridad después de la reconstrucción del repositorio. los
La lista de conservación predeterminada depende del tipo de repositorio y se puede mostrar con la
estadísticas mando.
If reposicionado tiene un mapa heredado no vacío, se escribirá en un archivo llamado
legacy-map en el subdirectorio del repositorio como si fuera un comando de escritura heredado. (Esta
normalmente será el caso de las conversiones de Subversion y CVS).
preservar [archivo...]
Agregue archivos o directorios (presumiblemente sin seguimiento) a la lista de rutas del repositorio que se
restaurado desde el directorio de respaldo después de un reconstruir. Cada argumento, si lo hay, es
interpretado como un nombre de ruta. A continuación, se muestra la lista de conservación actual.
Solo es necesario utilizar esta función si su sistema de control de versiones carece de
comando para listar archivos bajo control de versiones. En sistemas con tal comando (que
incluyen git y hg), todos los archivos que no están debajo del directorio dot del repositorio
ni bajo reposurgeon los directorios temporales se conservan automáticamente.
despreservar [archivo...]
Elimine (presumiblemente sin seguimiento) archivos o directorios de la lista de rutas del repositorio que se
restaurado desde el directorio de respaldo después de un reconstruir. Cada argumento, si lo hay, es
interpretado como un nombre de ruta. A continuación, se muestra la lista de conservación actual.
INFORMACIÓN: Y REPORTAJES
Los comandos de este grupo informan sobre el repositorio seleccionado.
La salida de estos comandos se puede redirigir individualmente a un archivo de salida con nombre. Dónde
indicado en la sintaxis, puede prefijar el nombre del archivo de salida con ">" y darlo como un
siguiente argumento. Si usa “>>”, el archivo se abre para agregar en lugar de escribir.
lista [>archivar]
Este es el comando principal para identificar los eventos que desea modificar. Enumera
confirma en la selección establecida por número de secuencia de evento con información resumida. los
la primera columna son los números de eventos sin procesar, la segunda una marca de tiempo en la hora local. Si el
El repositorio tiene ID heredados, se mostrarán en la tercera columna. El líder
parte del comentario a continuación.
sello [>archivar]
Forma alternativa de listado que muestra sellos de acción completa, utilizables como referencias en
trozos escogidos. Soporta> redirección.
de estilista [>archivar]
Muestra los nombres de sugerencias de rama asociados con confirmaciones en el conjunto de selección. Estos lo harán
no necesariamente ser el mismo que sus campos de rama (que a menudo serán nombres de etiqueta si
el repositorio contiene etiquetas anotadas o ligeras).
Si una confirmación está en la punta de una rama, su punta es el nombre de la rama. Si solo tiene un hijo,
su punta es la punta del niño. Si tiene varios hijos, entonces si hay un hijo con
un nombre de rama coincidente, su punta es la punta del niño. De lo contrario, esta función arroja un
error recuperable.
tags [>archivar]
Mostrar etiquetas y restablecer: tres campos, un número de evento y un tipo y un nombre. Rama
Las confirmaciones de sugerencias asociadas con etiquetas también se muestran con el campo de tipo 'confirmación'.
Soporta> redirección.
estadísticas [nombre-repo...] [>archivar]
Informe de estadísticas de tamaño e información de métodos de importación / exportación sobre repositorios con nombre,
o sin argumento el repositorio elegido actualmente.
contar [>archivar]
Informar un recuento de elementos en el conjunto de selección. El conjunto predeterminado es todo en el
repositorio seleccionado actualmente. Soporta> redirección.
inspeccionar [>archivar]
Vierta una secuencia de importación rápida que represente eventos seleccionados a la salida estándar. Como un
escribir, excepto (1) que el medidor de progreso está desactivado, y (2) hay una identificación
encabezado antes de cada volcado de evento.
gráfica [>archivar]
Emitir una visualización del gráfico de confirmación en el lenguaje de marcado DOT utilizado por el
conjunto de herramientas graphviz. Esto se puede alimentar como entrada al programa principal de renderizado de graphviz.
punto(1), que producirá una imagen visible. Soporta> redirección.
Puede encontrar útil un script como este:
gráfico $ 1> / tmp / foo $$
punto de concha
Puede sustituirlo en su propio visor de imágenes preferido, por supuesto.
tamaños [>archivar]
Imprima un informe sobre el volumen de datos por sucursal; toma un conjunto de selección, por defecto a todos
eventos. Los números cuentan el tamaño de los blobs sin comprimir, los comentarios de confirmación y etiqueta, y
otras cadenas de metadatos (se cuenta un blob cada vez que un compromiso apunta a él).
Los números no son una medida exacta del tamaño de almacenamiento: están pensados principalmente como un
forma de obtener información sobre cómo particionar de manera eficiente un repositorio que se ha convertido
lo suficientemente grande como para ser difícil de manejar.
Soporta> redirección.
hilas [>archivar]
Busque configuraciones de DAG y metadatos que puedan indicar un problema. Actualmente revisa
para: (1) eliminaciones en la mitad de la rama, (2) confirmaciones desconectadas, (3) confirmaciones sin padres, (4)
existencia de múltiples raíces, (5) identificaciones de autor y autor que no se ven bien formadas
como ID de DVCS, (6) varios enlaces secundarios con etiquetas de rama idénticas que descienden del
mismo compromiso, (7) tiempo y colisiones de sello de acción.
Se admiten las opciones para emitir solo informes parciales; "pelusa --opciones" o "pelusa -?"
los enumera.
Las opciones y el formato de salida de este comando son inestables; pueden cambiar sin
observe a medida que se agregan más controles de cordura.
QUIRÚRGICO OPERACIONES
Estas son las operaciones para las que está diseñado el resto de reposurgeon.
calabacín [política...]
Combine o elimine confirmaciones en un conjunto de eventos de selección. El conjunto de selección predeterminado para
este comando está vacío. No tiene ningún efecto en eventos que no sean confirmaciones a menos que --delete
se selecciona la política; vea el comando 'borrar' para discusión.
Normalmente, cuando se aplasta una confirmación, su lista de operaciones de archivo (y cualquier blob asociado
referencias) se antepone al principio de la lista de operaciones de cada uno de los
los hijos de la confirmación o adjuntados a la lista de operaciones de cada una de las confirmaciones
padres. Luego, los hijos de una confirmación eliminada se eliminan de su conjunto principal y
sus padres agregados a su conjunto de padres.
El valor predeterminado es aplastar hacia adelante, modificando a los niños; pero vea la lista de políticas
modificadores a continuación para saber cómo cambiar esto.
advertencia
Es fácil equivocarse en los límites de un comando de squash, con confusión y
resultados destructivos. Tenga cuidado de pensar que puede aplastar en un conjunto de selección para fusionar
todas las confirmaciones excepto la última en la última; lo que realmente harás es
fusionarlos todos en el primer compromiso después de el conjunto seleccionado.
Normalmente, cualquier etiqueta que apunte a una confirmación combinada también se empujará hacia adelante. Pero mira
la lista de modificadores de políticas a continuación para saber cómo cambiar esto.
Después de todos los movimientos de operación, cada una de las listas de operaciones de archivos modificadas es
reducido a una forma normalizada más corta. La forma normalizada detecta varios
combinaciones de modificación, eliminación y cambio de nombre y simplifica la operación
secuencia todo lo que pueda sin perder ninguna información.
Después de la canonicalización, una lista de operaciones de archivo puede terminar conteniendo múltiples M
operaciones en el mismo archivo. Normalmente, la herramienta emite una advertencia cuando esto ocurre, pero
no intenta resolverlo.
Los siguientes modificadores cambian estas políticas:
--Eliminar
Simplemente descarta todas las operaciones de archivo y las etiquetas asociadas con las confirmaciones eliminadas.
--juntarse
Descarte todas las operaciones M (y blobs asociados) excepto la última.
--hacer retroceder
Agregue fileops a los padres, en lugar de anteponerlos a los niños.
--empujar hacia adelante
Anteponer fileops a los niños. Este es el predeterminado; se puede especificar en un ascensor
guión para la explicitación sobre las intenciones.
--tagforward
Con el modificador "tagforward", cualquier etiqueta de la confirmación eliminada se envía a
el primer hijo en lugar de ser eliminado. Este es el predeterminado; puede ser
especificado para ser explícito.
--tagback
Con el modificador "--tagback", cualquier etiqueta en la confirmación eliminada se empuja hacia atrás a
el primer padre en lugar de ser eliminado.
--tranquilo
Suprime los mensajes de advertencia sobre la eliminación de confirmaciones con bucles de archivo que no se eliminan.
--quejar
Lo opuesto al silencio. Puede especificarse para ser explícito.
En cualquiera de estas políticas, excepto "--delete", eliminar una confirmación que tiene hijos
no retrocede los cambios realizados por esa confirmación, ya que todavía estarán presentes en
los blobs adjuntos a las versiones más allá del final del conjunto de eliminación. Todo lo que hace una eliminación
cuando la confirmación tiene hijos se pierde la información de metadatos sobre cuándo y por quién
esos cambios se hicieron realmente; después de la eliminación, dichos cambios se atribuirán
a los primeros hijos no eliminados de las confirmaciones eliminadas. Se espera que este
El comando será útil principalmente para eliminar confirmaciones generadas mecánicamente por
convertidores de repositorio como cvs2svn.
borrar [política...]
Elimina un conjunto de eventos de selección. El conjunto de selección predeterminado para este comando está vacío.
En un conjunto de confirmaciones, esto es equivalente a un squash con la bandera --delete. Eso
elimina incondicionalmente etiquetas, restablece y traspasa; los blobs solo se pueden eliminar como un
efecto secundario de eliminar cada confirmación que los apunte.
dividir con el futuro bebé [sus hijos]
Intente particionar un repositorio cortando el enlace padre-hijo entre dos
confirma (deben ser adyacentes). No lleva un conjunto de selección general. Es solo
necesario especificar el compromiso principal, a menos que tenga varios hijos, en cuyo caso
la confirmación del niño debe seguir (sepárelo con una coma).
Si el repositorio se llamó 'foo', normalmente terminará con dos repositorios llamados 'foo-early'
y 'foo-late' (los eventos de opciones y funciones al comienzo del segmento inicial
ser duplicado en el comienzo de la última.). Pero si el gráfico de compromiso
permanecen conectados a través de otro camino después del corte, el comportamiento cambia. En esto
caso, si el padre y el hijo estuvieran en la misma rama 'qux', los segmentos de rama son
renombrado 'qux-early' y 'qux-late' pero el repositorio no está dividido.
borrar [sendero | / regexp /] ...
Eliminar archivos de la parte seleccionada del historial de repositorios; el valor predeterminado es todo
historia. Los argumentos de este comando pueden ser rutas o expresiones regulares de Python
rutas coincidentes (las expresiones regulares deben estar marcadas con //).
Todas las operaciones de modificación de archivo (M) y eliminación (D) que involucran un archivo coincidente en
el conjunto de eventos seleccionado se desconecta del repositorio y se coloca en un conjunto de eliminación.
Se siguen los cambios de nombre a medida que la herramienta avanza en el conjunto de selección; cada uno desencadena un
mensaje de advertencia. Si un archivo seleccionado es un destino de copia (C), la copia se eliminará y
se emite un mensaje de advertencia. Si un archivo seleccionado es un origen de copia, el destino de la copia será
agregado a la lista de rutas que se eliminarán y se emite una advertencia.
Después de que se hayan realizado las eliminaciones de archivos, cualquier confirmación sin operaciones de archivo restantes
se eliminarán y todas las etiquetas que apunten a ellos. Confirma con fileops eliminados apuntando
tanto dentro como fuera del conjunto de rutas no se eliminan, sino que se clonan en el conjunto de eliminación.
El juego de remoción no se descarta. Se ensambla en un nuevo repositorio que lleva el nombre de
el antiguo con el sufijo "-expunges" agregado. Por lo tanto, este comando se puede utilizar para tallar
un repositorio en secciones por coincidencias de ruta de archivo.
etiquetar [--canonicalizar] [--tipelimina] [--tagify-fusiones]
Busque confirmaciones vacías y conviértalas en etiquetas. Toma un conjunto de selección opcional
argumento predeterminado para todas las confirmaciones. Para cada compromiso en el conjunto de selección, conviértalo en
una etiqueta con el mismo mensaje e información de autor si no tiene fileops. Por defecto
las confirmaciones de fusión no se consideran, incluso si no tienen fileops (por lo tanto, no hay árbol
diferencias con su primer padre). Para cambiar eso, use el --tagify-fusiones .
El nombre de la etiqueta generada será 'emptycommit-ident', dónde ident es generado
desde el ID heredado de la confirmación eliminada, o desde su marca, o desde su índice en el
repositorio, con un sufijo de desambiguación si es necesario.
Con la --canonicalizar, tagify se esfuerza por detectar confirmaciones triviales primero
asegurando que todos los fileops de confirmaciones seleccionadas tendrán un efecto real cuando
procesado por importación rápida.
Con la --tipelimina, tagify también considera las sugerencias de rama con solo eliminar todos los archivos
ser candidatos a la etiqueta. Las etiquetas correspondientes obtienen nombres del formulario
'tipdelete-nombre de rama'en lugar del predeterminado' emptycommit-ident'.
Con la --tagify-fusiones, tagify también etiqueta las confirmaciones de fusión que no tienen fileops.
Cuando se hace esto, el enlace de fusión se mueve al padre de la confirmación yagificada.
juntarse [--depurar}|- registro de cambios] [tiempofuzz]
Escanee el conjunto de selección en busca de ejecuciones de confirmaciones con comentarios idénticos cercanos entre sí
en el tiempo (esta es una forma común de tejido cicatricial en las conversiones ascendentes del depósito de
sistemas de control de versiones orientados a archivos). Fusiona estas camarillas eliminando todas las
última confirmación, en orden; los archivos de las confirmaciones eliminadas se empujan hacia adelante a eso
el último
El segundo argumento opcional, si está presente, es una separación de tiempo máxima en segundos; los
el valor predeterminado es 90 segundos.
El conjunto de selección predeterminado para este comando es = C, todas las confirmaciones. Ocasionalmente puedes
quiere restringirlo, por ejemplo, para evitar la fusión de camarillas no relacionadas de "*** vacío
mensaje de registro *** "confirmaciones de ascensores CVS.
Con la opción --debug, muestra mensajes sobre discrepancias.
Con la opción --changelog, cualquier confirmación con un comentario que contenga la cadena 'vacía
mensaje de registro '(como el que genera CVS) y que contiene exactamente una operación de archivo
la modificación de una ruta que termina en ChangeLog se trata especialmente. Tales confirmaciones de ChangeLog son
se considera que coincide con cualquier compromiso antes de ellos por contenido, y se fusionará con él si
el confirmador coincide y la separación del compromiso es lo suficientemente pequeña. Esta opción maneja un
Convención utilizada por los proyectos de la Free Software Foundation.
split {en | por} ít
Se requiere que el primer argumento sea una ubicación de confirmación; el segundo es una preposición
que indica qué método de división utilizar. Si la preposición es 'en', entonces la
El tercer argumento debe ser un índice de origen entero 1 de una operación de archivo dentro del
cometer. Si es 'por', entonces el tercer argumento debe ser un nombre de ruta para ser
coincidencia de prefijo, la coincidencia de nombre de ruta se realiza primero).
La confirmación se copia y se inserta en una nueva posición en la secuencia del evento,
inmediatamente después de sí mismo; el duplicado se convierte en hijo del original, y
lo reemplaza como padre de los hijos del original. Los metadatos de confirmación están duplicados; los
Luego se cambia la marca de la nueva confirmación, con 'bis' agregado como sufijo.
Finalmente, algunas operaciones de archivo, comenzando en el que coincide o indexa por la división
argumento: se mueven hacia adelante desde la confirmación original a la nueva. Índices legales
son 2-n, donde n es el número de operaciones de archivo en la confirmación original.
add {D camino | M permanente marca camino | R fuente dirigidos C fuente dirigidos}
Desde una confirmación especificada, agregue un fileop especificado.
Para que una operación D sea válida, debe haber una operación M para la ruta en el
ascendencia de commit. Para que una operación M sea válida, la parte 'permanente' debe ser un token
terminando con 755 o 644 y la 'marca' debe referirse a un blob que precede a la confirmación
localización. Para que una operación R o C sea válida, debe haber una operación M para el
fuente en la ascendencia del compromiso.
remove [índice | camino | elimina] [a hacer]
De una confirmación especificada, elimine un fileop especificado. La operación debe ser una de (a) las
palabra clave "elimina", (b) una ruta de archivo, (c) una ruta de archivo precedida por un conjunto de tipos de operaciones (algunos
subconjunto de las letras DMRCN), o (d) un índice numérico de 1 origen. La palabra clave "elimina"
selecciona todos los archivos D en la confirmación; los demás seleccionan uno cada uno.
Si la cláusula "to" está presente, la operación eliminada se agrega a la confirmación especificada por
el siguiente conjunto de selección de singleton. Esta opción no se puede combinar con "eliminar".
Tenga en cuenta que este comando no intenta eliminar blobs incluso si el archivo eliminado
podría ser la única referencia a ellos. Este comportamiento puede cambiar en una versión futura.
mancha
Cree un blob en la marca: 1 después de volver a numerar otras marcas a partir de: 2. Se toman datos
de stdin, que puede ser un here-doc. Esto se puede utilizar con el comando add to patch
datos sintéticos en un repositorio.
volver a numerar
Renumerar las marcas en un repositorio, desde: 1 hasta: dónde es el recuento de la
última marca. En caso de que un importador alguna vez se preocupe por el pedido de marcas o los huecos en el
secuencia.
buzón_salida [>archivar]
Emite un archivo de buzón de mensajes en formato RFC822 que represente el contenido de
metadatos del repositorio. Toma un conjunto de selección; miembros del conjunto que no sean confirmaciones,
Las etiquetas anotadas y los traspasos se ignoran (es decir, en la actualidad, blobs y restablecimientos).
La salida de este comando se puede redirigir opcionalmente a un archivo de salida con nombre.
Prefije el nombre del archivo con “>” y proporcione el siguiente argumento.
Puede tener una opción --filter, seguida de = y una expresión regular cerrada con /. Si
esto se da, solo se emiten encabezados con nombres que coincidan con él. En este contexto el
El nombre del encabezado incluye sus dos puntos finales.
buzón_en [<en archivo] [--cambió >archivar]
Acepte un archivo de buzón de mensajes en formato RFC822 que represente el contenido del
metadatos en confirmaciones seleccionadas y etiquetas anotadas. No toma ningún conjunto de selección. Si hay
un argumento se tomará como el nombre de un archivo de buzón para leer; sin discusión,
o uno de '-'; lee desde la entrada estándar.
Los usuarios deben tener en cuenta que la modificación de un campo Número de evento o Marca de evento cambiará
a qué evento se aplica la actualización de ese mensaje. Es poco probable que esto tenga un buen
resultados.
Si los campos Event-Number y Event-Mark están ausentes, la lógica del buzón de entrada
intente hacer coincidir la confirmación o la etiqueta primero por Legacy-ID, luego por una ID de confirmación única
y par de marca de tiempo.
Si la salida se redirige y aparece el modificador "--changed", un conjunto mínimo de
Las modificaciones realizadas realmente se escriben en el archivo de salida en una forma que se puede alimentar
de nuevo en.
establecer campo atributo propuesta de
En los objetos seleccionados (predeterminado en ninguno), establezca cada instancia de un campo con nombre en un
valor de cadena. La cadena puede estar entre comillas para incluir espacios en blanco y usar barra invertida
escapes interpretados por el códec de escape de cadenas de Python, como \ n y \ t.
Se ignoran los intentos de establecer atributos inexistentes. Los valores válidos para el atributo son
nombres de campos internos de Python; en particular, para las confirmaciones, "comentario" y "rama" son
legal. Consulte el código fuente para otros valores interesantes.
anexar [--strip] [>texto]
Agrega texto a los comentarios de confirmaciones y etiquetas en el conjunto de selección especificado. los
El texto es el primer símbolo del comando y puede ser una cadena entre comillas. Escape estilo C
Las secuencias de la cadena se interpretan utilizando el códec string_decode de Python.
Si se da la opción --rstrip, el comentario se elimina a la derecha antes de que se muestre el nuevo texto.
adjunto.
filtrar [--cáscara|--expresión regular|--reemplazar|--dedos]
Ejecute blobs, confirme comentarios o etiquete comentarios en el conjunto de selección a través del filtro
especificado en la línea de comando.
En cualquier modo que no sea --dedos, intentar especificar un conjunto de selección que incluya ambos
blobs y no blobs (es decir, confirmaciones o etiquetas) arrojan un error. Contenido en línea en
confirmaciones se filtra cuando el conjunto de selección contiene (solo) blobs y la confirmación es
dentro del rango delimitado por el blob más antiguo y más reciente de la especificación.
Al filtrar blobs, si la línea de comando contiene la cookie mágica '% PATHS%', es
reemplazado por una lista separada por espacios de todas las rutas que hacen referencia al blob.
Con --shell, el resto de la línea especifica un filtro como un comando de shell. Cada
el blob o comentario se presenta al filtro en la entrada estándar; el contenido es reemplazado
con lo que el filtro emite a la salida estándar. En la actualidad, se requiere shell.
En el futuro se admitirán otros modos de filtrado.
Con --regex, se espera que el resto de la línea sea una expresión regular de Python
sustitución escrita como / desde / a / con desde y hasta que se pasan como argumentos a la
función estándar re.sub () y se aplicó para modificar el contenido. De hecho, cualquiera
el carácter sin espacio funcionará como delimitador en lugar de /; esto lo hace más fácil
para usar / en patrones. Por lo general, solo se realiza la primera sustitución de este tipo;
poner 'g' después de que la barra diagonal reemplaza globalmente, y un literal numérico da el máximo
número de sustituciones a realizar. Otras banderas disponibles restringen el alcance de la sustitución
- 'c' solo para el texto del comentario, 'C' solo para el nombre del autor, 'a' solo para los nombres de los autores.
Con --replace, el comportamiento es como --regexp pero las expresiones no se interpretan
como expresiones regulares. (Esto es un poco más rápido).
Con --dedos, los terminadores de línea \ r \ n estilo DOS / Windows se reemplazan por \ n.
transcodificar códec
Transcodificar blobs, cometer comentarios y nombres de autor / autor, o etiquetar comentarios y etiquetar
los nombres de los confirmadores en la selección establecida en UTF-8 a partir de la codificación de caracteres especificada en
la línea de comando.
Intentar especificar un conjunto de selección que incluya tanto blobs como no blobs (es decir,
confirmaciones o etiquetas) arroja un error. El contenido en línea en las confirmaciones se filtra cuando el
El conjunto de selección contiene (solo) blobs y la confirmación está dentro del rango delimitado por el
blob más temprano y más reciente en la especificación.
El argumento de codificación debe nombrar uno de los códecs conocidos por los códecs estándar de Python
Biblioteca. En particular, 'latin-1' es un nombre de códec válido.
Los errores en este comando son fatales, porque un error puede dejar los objetos del repositorio en un
estado dañado.
La teoría detrás del diseño de este comando es que el repositorio puede contener un
mezcla de codificaciones utilizadas para ingresar metadatos de confirmación por diferentes personas en diferentes
veces. Después de usar = I para identificar metadatos que contienen bytes altos no Unicode en el texto,
un humano debe usar el contexto para identificar qué codificaciones particulares se usaron en
intervalos de eventos particulares y redactar comandos de transcodificación apropiados para corregirlos.
editar
Informe el conjunto de selección de eventos a un archivo temporal como lo hace mailbox_out, llame a un editor
en él, y actualice el resultado como lo hace mailbox_in. Si no especifica un editor
nombre como segundo argumento, se tomará de la variable $ EDITOR en su
ambiente.
Normalmente, este comando ignora los blobs porque buzón_salida lo hace. Sin embargo, si especifica
un conjunto de selección que consta de un solo blob, su editor será llamado directamente en
el archivo blob.
desplazamiento de tiempo compensar [zona horaria]
Aplicar una compensación de tiempo a todas las marcas de fecha / hora en el conjunto seleccionado. Un argumento de compensación es
requerido; puede tener la forma [+ -] ss, [+ -] mm: ss o [+ -] hh: mm: ss. El signo principal es
necesario para distinguirlo de una expresión de selección.
Opcionalmente, también puede especificar otro argumento en la forma [+ -] hhmm, una zona horaria
literal para aplicar. Para aplicar una zona horaria sin un desplazamiento, use un literal de desplazamiento de +0
o -0.
unir [--ciruela pasa] renombrar...
Unir repositorios. Nombre cualquier número de repositorios cargados; se unirán en
un repositorio de unión y eliminado de la lista de carga. Se seleccionará el repositorio de unión.
La raíz de cada repositorio (que no sea el repositorio más antiguo) se injertará como hijo en el
última confirmación en el volcado con una fecha de confirmación anterior. Ejecutando de último a primero, duplicado
los nombres se eliminarán de la ambigüedad utilizando el nombre del repositorio de origen (por lo tanto, los duplicados recientes
tendrá prioridad sobre los más antiguos). Después de todos los injertos, las marcas se volverán a numerar.
El nombre del nuevo repositorio serán los nombres de todas las partes concatenados, separados por
'+'. No tendrá directorio de origen ni tipo de sistema preferido.
Con la opción --prune, en cada unión D operaciones para cada archivo ancestral existente
se antepondrá a la confirmación raíz, luego se canonicalizará usando las reglas
para aplastar el efecto será que solo los archivos con M, R y C que coincidan correctamente
las operaciones en la raíz sobreviven.
injerto [--ciruela pasa] renombrar
Para cuando unir no te da suficiente control. Este comando puede tener cualquiera de dos
formularios, seleccionados por el tamaño del conjunto de selección. El primer argumento es siempre
debe ser el nombre de un repositorio cargado.
Si el conjunto de selección es de tamaño 1, debe identificar una única confirmación en el actual
repositorio elegido; en este caso, la raíz del repositorio de nombre se convertirá en un hijo del especificado
cometer. Si el conjunto de selección está vacío, el repositorio nombrado debe contener uno o más
llamadas que coinciden con confirmaciones en el repositorio elegido actualmente.
Las etiquetas y ramas en el repositorio nombrado tienen el prefijo de su nombre; luego se injerta
al seleccionado. Cualquier otra llamada en el repositorio nombrado también se resuelve en el
contexto del elegido actualmente. Finalmente, el repositorio nombrado se elimina de la carga.
lista.
Con la opción --prune, anteponga una operación deleteall en la raíz del injerto
repositorio.
camino [fuente] rebautizar [--fuerza}] [dirigidos]
Cambie el nombre de una ruta en cada fileop de cada confirmación seleccionada. El conjunto de selección predeterminado es
todos se comprometen. El primer argumento se interpreta como una expresión regular de Python para coincidir
contra caminos; el segundo puede contener sintaxis de referencia inversa.
Por lo general, si la ruta de destino ya existe en el fileops, o es visible en el
ascendencia de la confirmación, este comando arroja un error. Con el --fuerza opción, estos
se omiten los cheques.
caminos [{sub | sup}] [nombre de directorio] [>archivar]
Toma un conjunto de selección. Sin un modificador, enumere todas las rutas tocadas por fileops en el
conjunto de selección (que por defecto es el repositorio completo). Esta variante de informes no
> -redirección.
Con el modificador 'sub', tome un segundo argumento que sea un nombre de directorio y anteponga
a todos los caminos. Con el modificador 'sup', elimine el primer componente de directorio de
cada camino.
unir
Crea un enlace de combinación. Toma un argumento de conjunto de selección, ignorando todos menos el más bajo
(origen) y miembros más altos (destino). Crea un enlace de fusión desde el miembro más alto
(hijo) al más bajo (padre).
separar
Linealizar una confirmación. Toma un argumento de conjunto de selección, que debe resolverse en un solo
commit y elimina todos sus padres excepto el primero.
Es equivalente a reparadorprimer padre,hacerrebase, donde el hacer es el mismo
conjunto de selección utilizado con unmerge y primer padre es un conjunto resolviendo hacers primero
padre (ver el reparador comando a continuación
El principal interés de la separar es que no es necesario buscar y especificar la primera
ser padre, ahorrar tiempo y evitar errores cuando una cirugía cercana haría un
primer argumento principal manual obsoleto.
reparador [rebase]
Cambia la lista principal de una confirmación. Toma un argumento de conjunto de selección y un
argumento de política. El conjunto de selección debe resolverse exactamente en dos confirmaciones, la última de
que es el compromiso de modificar, y el primero es el nuevo primer padre. Todos los demás
los enlaces de los padres se borran; si lo desea, puede volver a crearlos con el comando 'fusionar'.
De forma predeterminada, el manifiesto de la confirmación reparental se calcula antes de modificarlo; a
deleteall y fileops se anteponen para que el manifiesto se mantenga sin cambios incluso cuando el
se ha cambiado el primer padre. El uso de la palabra clave 'rebase' como tercer argumento inhibe
este comportamiento - no deleteall es y el contenido del árbol de todos los descendientes puede ser
modificado como resultado.
biblioteca nombre de rama... {rebautizar|borrar} [arg]
Cambie el nombre o elimine una rama (y cualquier reinicio asociado). El primer argumento debe ser un
nombre de la sucursal existente; El segundo argumento debe ser uno de los verbos 'renombrar' o 'eliminar'.
Para un 'cambio de nombre', el tercer argumento puede ser cualquier token que sea sintácticamente válido
nombre de la rama (pero no el nombre de una rama existente). Para una 'eliminación', no hay un tercero
Se requiere argumento.
Para cualquier nombre, si no contiene un '/', se antepone el prefijo 'refs / heads'.
etiqueta nombre de etiqueta... {mover | renombrar | borrar} [argumento].
Mover, cambiar el nombre o eliminar una etiqueta. El primer argumento debe ser un nombre de etiqueta existente; segundo
El argumento debe ser uno de los verbos "mover", "renombrar" o "eliminar".
Para un "movimiento", un tercer argumento debe ser un conjunto de selección singleton. Para un "cambio de nombre", el
El tercer argumento puede ser cualquier token que sea un nombre de etiqueta sintácticamente válido (pero no el
nombre de una etiqueta existente). Para una "eliminación", no se requiere un tercer argumento.
El comportamiento de este comando es complejo porque las características que se presentan como etiquetas pueden ser
cualquiera de estas tres cosas: (1) objetos de etiqueta verdadera, (2) etiquetas ligeras, en realidad secuencias de
se confirma con un nombre de rama común que comienza con "refs / tags"; en este caso, la etiqueta es
se considera que apunta a la última confirmación de la secuencia, (3) Restablecer objetos. Estos pueden
ocurrir en combinación; de hecho, exportadores de transmisiones desde sistemas con etiquetas de anotación
comúnmente expresan cada uno de estos como un verdadero objeto de etiqueta (1) apuntando a la confirmación de punta de
una secuencia (2) en la que el nombre base del campo de rama común es idéntico al
nombre de etiqueta. Un exportador que genera secuencias de confirmación con etiquetas ligeras (2) puede o
puede que no genere reinicios que apunten a sus confirmaciones de punta.
Este comando intenta manejar todas las combinaciones de forma natural haciendo hasta tres
operaciones en cualquier etiqueta verdadera, secuencia de confirmación y reinicio que coincida con el nombre de la fuente. en un
renombrar, todos se renombran juntos. En una eliminación, se elimina cualquier etiqueta coincidente o restablecimiento;
luego, los campos de rama coincidentes se cambian para que coincidan con la rama del descendiente único
de la confirmación etiquetada, si hay una. Cuando se mueve una etiqueta, no hay campos de rama
cambiado y se emite una advertencia.
Los intentos de eliminar una etiqueta ligera pueden fallar con el mensaje "no se pudo determinar un
sucesor único ”. Cuando esto sucede, la etiqueta está comprometida con varios hijos.
que tienen diferentes etiquetas de rama. Hay un agujero en la especificación de git
Flujos de importación rápida que dejan incierto cómo las etiquetas de rama pueden ser seguras
reasignado en este caso; en lugar de hacer algo arriesgado, reposicionado lanza un
error recuperable.
reajustar restablecer nombre... {mover | renombrar | borrar} [argumento].
Mover, cambiar el nombre o eliminar un restablecimiento. El primer argumento debe coincidir con un nombre de reinicio existente;
El segundo argumento debe ser uno de los verbos "mover", "renombrar" o "eliminar".
Para un "movimiento", un tercer argumento debe ser un conjunto de selección singleton. Para un "cambio de nombre", el
El tercer argumento puede ser cualquier token que coincida con un nombre de reinicio sintácticamente válido
(pero no el nombre de un reinicio existente). Para una "eliminación", no hay un tercer argumento
requerida.
Para cualquiera de los nombres, si no contiene una “/”, se antepone el prefijo “cabezas /”. Si se
no comienza con "refs /", se antepone "refs /".
Un argumento coincide con el nombre de un reinicio si es la referencia completa
(refs / heads / FOO o refs / tags / FOO para algún valor de FOO) o el nombre base (p. ej.
FOO), o un sufijo del formulario encabezados / FOO o etiquetas / FOO. Un nombre de base no calificado es
se supone que se refiere a una cabeza.
Cuando se cambia el nombre de un restablecimiento, los campos de la rama de confirmación que coinciden con la etiqueta se renombran con él a
fósforo. Cuando se elimina un restablecimiento, los campos de rama coincidentes se cambian para coincidir con la rama
del descendiente único de la confirmación tip de la rama asociada, si hay una.
Cuando se mueve un reinicio, no se cambian los campos de rama.
desvincular rama de fuente... [rama de destino].
Toma uno o dos argumentos que deben ser los nombres de las ramas de origen y destino; si
el segundo argumento (objetivo) se omite, el valor predeterminado es refs / heads / master. Cualquier seguimiento
el segmento del nombre de una sucursal se acepta como sinónimo de él; por lo tanto, maestro es lo mismo que
refs / jefes / master. No toma un conjunto de selección.
El historial de la rama de origen se fusiona con el historial de la rama de destino,
convirtiéndose en el historial de un subdirectorio con el nombre de la rama fuente. Cualquier reinicio
de la rama de origen se eliminan.
tira [manchas | reducir].
Reduzca el repositorio seleccionado para que sea un caso de prueba más manejable. Use esto cuando
informar errores.
Con el modificador 'blobs', reemplace cada blob en el repositorio con un pequeño,
stub autoidentificable, dejando intactos todos los metadatos y la topología DAG. Esto es útil
cuando informa un error, para reducir grandes repositorios a casos de prueba de
tamaño manejable.
Un conjunto de selección es efectivo solo con la opción 'blobs', por defecto para todos los blobs.
El modo 'reducir' siempre actúa sobre todo el repositorio.
Con el modificador 'reducir', realice una reducción topológica que arroje
confirmaciones poco interesantes. Si una confirmación tiene todas las modificaciones de archivo (sin eliminaciones ni copias
o cambia el nombre) y tiene exactamente un antepasado y un descendiente, entonces puede ser aburrido. Para
ser completamente aburrido, tampoco debe ser mencionado por ninguna etiqueta o reinicio. Interesante
Las confirmaciones no son aburridas, o tienen un padre o un hijo que no son aburridos.
Sin modificadores, este comando elimina los blobs.
ignora [renombrar]. [traducir]. [valores predeterminados].
Manejo inteligente de archivos de patrones ignorados. Este comando falla si ningún repositorio tiene
se ha seleccionado o no se ha establecido ningún tipo de escritura preferido para el repositorio. No es asi
tomar un conjunto de selección.
Si el modificador de cambio de nombre está presente, este comando intenta cambiar el nombre de todos los patrones de ignorar
archivos a lo que sea apropiado para el tipo preferido, por ejemplo, .gitignore para git,
.hgignore para hg, etc. Esta opción no causa ninguna traducción de los archivos ignorados
cambia el nombre.
Si el modificador de traducción está presente, la traducción de la sintaxis de cada archivo ignorado es
intentó. En la actualidad, la única transformación que conoce el código es anteponer una 'sintaxis:
encabezado glob 'si el tipo preferido es hg.
Si el modificador de valores predeterminados está presente, el comando intenta anteponer estos valores predeterminados
patrones para ignorar todos los archivos. Si no se crea un archivo ignorado por la primera confirmación,
se modificará para crear uno que contenga los valores predeterminados. Este comando producirá un error en
prefiera tipos que no tengan patrones de ignorar predeterminados (git y hg, en particular). Va a
también se produce un error cuando sabe que la herramienta de importación ya ha establecido patrones predeterminados.
REFERENCIA LEVANTAMIENTO
Este grupo de comandos está destinado a corregir referencias en confirmaciones que tienen el formato
de sistemas de control de versiones anteriores. El flujo de trabajo general es el siguiente: primero, repase el comentario
history y cambie todas las referencias de confirmación antiguas en cookies analizables por máquina.
Luego, convierta automáticamente la cookie analizable por máquina en sellos de acción. El punto de
dividir el proceso de esta manera es que la primera parte es difícil de hacer bien para una máquina,
mientras que la segunda parte es propensa a errores cuando lo hace un humano.
Una cookie de Subversion es una subcadena de comentarios con el formato [[SVN: ddddd]] (ejemplo:
[[SVN: 2355]] con la revisión leída directamente a través del exportador de Subversion, deducida de
git-svn metadatos, o coincidir con un encabezado $ Revision $ incrustado en los datos del blob para el nombre del archivo.
Una cookie CVS es una subcadena de comentarios con el formato [[CVS: nombre de archivo: revisión]] (ejemplo:
[[CVS: src / README: 1.23]] con la revisión que coincide con un encabezado CVS $ Id $ o $ Revision $
incrustado en datos de blob para el nombre de archivo.
Una cookie de marca tiene el formato [[: dddd]] y es simplemente una referencia a la marca especificada.
Es posible que desee parchear esto a mano cuando una de las formas anteriores sea inconveniente.
Una marca de acción es una marca de tiempo RFC3339, seguida de un "!", Seguido de un correo electrónico del autor
dirección (autor en lugar de confirmador porque esa marca de tiempo no se cambia cuando un parche
se reproduce en una rama). Intenta hacer referencia a una confirmación sin ser específico de VCS.
Por lo tanto, en lugar de "confirmar 304a53c2" o "r2355", "2011-10-25T15: 11: 09Z![email protected]".
Los siguientes alias de git permiten que git funcione directamente con sellos de acción. Añádalo a su
~ / .gitconfig; si ya tiene una sección [alias], deje fuera de la primera línea.
[alias]
# sello git - imprime un sello de acción al estilo de un reposo
sello = show -s --format = '% cI!% ce'
# git scommit - lista la confirmación más reciente que coincide .
# También debe especificar una rama para buscar o --todos, después de estos argumentos.
scommit = "! f () {d = $ {1 %%! *}; a = $ {1 ## *!}; arg = \" - hasta = $ d -1 \ "; if [$ a! = $ 1]; luego arg = \ "$ arg --committer = $ a \"; fi; shift; git rev-list $ arg $ {1: + \ "$ @ \"};}; f "
# git scommits - como arriba, pero enumera todas las confirmaciones coincidentes.
scommits = "! f () {d = $ {1 %%! *}; a = $ {1 ## *!}; arg = \" - hasta = $ d --después de $ d \ "; si [ $ a! = $ 1]; luego arg = \ "$ arg --committer = $ a \"; fi; shift; git lista-rev $ arg $ {1: + \ "$ @ \"};}; f "
# git smaster - enumerar la confirmación más reciente en el maestro que coincide .
smaster = "! f () {git scommit \" $ 1 \ "master --first-parent;}; f"
smasters = "! f () {git scommits \" $ 1 \ "master --first-parent;}; f"
# git shs - mostrar las confirmaciones en el maestro que coinciden .
shs = "! f () {sello = $ (git smasters $ 1); shift; git show $ {sello:? no encontrado} $ *;}; f"
# git slog - iniciar git log en en el maestro
slog = "! f () {sello = $ (git smaster $ 1); shift; git log $ {sello:? no encontrado} $ *;}; f"
# git sco - echa un vistazo a la confirmación más reciente en el maestro que coincide .
sco = "! f () {sello = $ (git smaster $ 1); shift; git checkout $ {sello:? no encontrado} $ *;}; f"
Hay un caso poco común en el que un sello de acción no se referirá únicamente a una confirmación. Está
teóricamente es posible que el mismo autor pueda verificar revisiones en diferentes ramas
dentro de la resolución de un segundo de las marcas de tiempo en una secuencia de importación rápida. Hay
no se puede hacer nada al respecto; Las herramientas que utilizan sellos de acción deben conocer las
posibilidad y lanzar una advertencia cuando ocurra.
Para soportar el levantamiento de referencia, reposicionado crea internamente una referencia heredada
mapa que asocia identificadores de revisión en sistemas de control de versiones más antiguos con confirmaciones.
El contenido de este mapa proviene de tres lugares: (1) cvs2svn: propiedades rev si el
El repositorio se leyó de un flujo de volcado de Subversion, (2) encabezados $ Id $ y $ Revision $ en
archivos de repositorio, y (3) las .git / cvs-revisiones creadas por git importacióncv.
La secuencia detallada para levantar posibles referencias es la siguiente: primero, busque posibles CVS
y referencias de Subversion con el referencias o = N conjunto de visibilidad; luego reemplácelos con
cookies equivalentes; entonces corre referencias ascensor para convertir las cookies en sellos de acción (usando
la información en el mapa de referencia heredado) sin tener que realizar la búsqueda a mano.
referencias [lista|editar|ascensor] [>archivar]
Con el modificador 'lista', enumere los comentarios de confirmación y etiqueta para cadenas que podrían ser CVS-
o identificadores de revisión de estilo Subversion. Esto será útil cuando desee reemplazar
ellos con cookies equivalentes que se pueden traducir automáticamente a independientes de VCS
sellos de acción. Este comando de informes admite> -redirección. Es equivalente a '= N
lista'.
Con el modificador 'editar', edite el conjunto donde se encuentran los ID de revisión. Este es
equivalente a '= N editar'.
Con el modificador "levantar", intente resolver las cookies de Subversion y CVS en los comentarios.
en sellos de acción utilizando el mapa heredado. Un sello de acción es un
combinación de marca de tiempo / correo electrónico / número de secuencia que identifica de forma única la confirmación asociada
con ese blob, como se describe en la sección denominada "ESTILO DE TRADUCCIÓN".
No se garantiza que todas estas referencias se resolverán, o incluso que alguna en
todo sera. Normalmente, todas las referencias en el historial de un repositorio de Subversion
resolver, pero es menos probable que las referencias de CVS se puedan resolver.
MACROS Y AMPLIACIONES
Ocasionalmente, necesitará emitir una gran cantidad de comandos quirúrgicos complejos de muy
formulario similar, y es conveniente poder empaquetar ese formulario para que no tenga que hacer
mucha escritura propensa a errores. Para esas ocasiones reposicionado admite una forma simple de
macro expansión.
definir nombre cuerpo
Defina una macro. El primer token separado por espacios en blanco es el nombre; el resto del
línea es el cuerpo, a menos que sea "{", que comienza una macro de varias líneas terminada por una
línea que comienza con “}”.
Una llamada "do" posterior puede invocar esta macro.
El comando "definir" por sí mismo sin un nombre o cuerpo produce una lista de macros.
do nombre argumentos...
Expanda y realice una macro. El primer token separado por espacios en blanco es el nombre del
macro que se llamará; los tokens restantes reemplazan {0}, {1} ... en la definición de macro (el
las convenciones utilizadas son las del método de formato Python). Los tokens pueden contener espacios en blanco
si están entre comillas; las comillas de cadena se eliminan. Las macros pueden llamar a macros.
Si la expansión macro no comienza en sí misma con un conjunto de selección, cualquier conjunto fue
especificado antes de que la palabra clave "do" esté disponible para el comando generado por el
expansión.
indefinir nombre ]
Anula la definición de la macro nombrada.
Aquí hay un ejemplo para ilustrar cómo puede usar esto. En repositorios de proyectos CVS
que utilizan la convención GNU ChangeLog, un artefacto previo a la conversión muy común es una confirmación
con el comentario "*** mensaje de registro vacío ***" que modifica solo una entrada de ChangeLog que explica
el compromiso inmediatamente anterior a él. El seguimiento
definir el registro de cambios <{0}> & / mensaje de registro vacío / squash --pushback
do changelog 2012-08-14T21:51:35Z
do changelog 2012-08-08T22:52:14Z
do changelog 2012-08-07T04:48:26Z
do changelog 2012-08-08T07:19:09Z
do changelog 2012-07-28T18:40:10Z
es equivalente al más detallado
<2012-08-14T21: 51: 35Z> & / mensaje de registro vacío / squash --pushback
<2012-08-08T22: 52: 14Z> & / mensaje de registro vacío / squash --pushback
<2012-08-07T04: 48: 26Z> & / mensaje de registro vacío / squash --pushback
<2012-08-08T07: 19: 09Z> & / mensaje de registro vacío / squash --pushback
<2012-07-28T18: 40: 10Z> & / mensaje de registro vacío / squash --pushback
pero es menos probable que cometa errores difíciles de notar al escribir la primera versión.
(Observe también cómo el texto regexp actúa como una protección contra la posibilidad de escribir un
fecha incorrecta que no se refiere a una confirmación con un comentario vacío. Este era un mundo real
ejemplo de la conversión de CVS a git de groff.)
Cuando incluso una macro no es suficiente, puede escribir y llamar extensiones Python personalizadas.
ejecutivo nombre
Ejecute código personalizado desde la entrada estándar (normalmente un archivo a través de <redirección). Utilizar esta
para configurar funciones de extensión personalizadas para llamadas de evaluación posteriores. El código tiene acceso completo a
todas las estructuras de datos internas. Las funciones definidas son accesibles para más tarde eval llamadas.
Esto se puede llamar en un script con el código de extensión en un here-doc.
eval nombre de la función
Evalúe una línea de código en el contexto actual del intérprete. Normalmente, esta será una
llamada a una función definida por un exec anterior. Las variables _repositorio y
_selección tendrá los valores obvios. Tenga en cuenta que _selección será una lista de
enteros, no objetos.
ARTEFACTO ELIMINACIÓN
Algunos comandos automatizan la reparación de varios tipos de artefactos asociados con el repositorio.
conversiones de sistemas de pedidos.
Autorzy [read|escribir] [nombre de archivo] [>nombre de archivo]
Aplicar o volcar la información del mapa de autor para el conjunto de selección especificado, con el valor predeterminado
todos los eventos.
Los ascensos de CVS y Subversion pueden tener solo nombres de usuario locales para el host del repositorio en
ID de autor y autor. Los DVCS quieren direcciones de correo electrónico (identificadores de toda la red) y
nombres completos. Para suministrar el mapa de uno a otro, se espera un archivo de autores
constar de líneas, cada una de las cuales comienza con una ID de usuario local, seguida de un '=' (posiblemente
rodeado por un espacio en blanco) seguido de un nombre completo y una dirección de correo electrónico, opcionalmente
seguido de un campo de compensación de zona horaria. Por lo tanto:
ferd = Ferd J. Foonly[email protected]> -0500
Un archivo de autores puede tener líneas de comentarios que comienzan con '#'; estos se ignoran.
Cuando se aplica un archivo de autores, las direcciones de correo electrónico en los metadatos del autor y
que el ID local coincide entre <y @ se reemplazan de acuerdo con el mapeo (este
maneja elevadores git-svn). Alternativamente, si el ID local es la dirección completa, esto es
también se considera una coincidencia (esto maneja lo que hacen git-cvsimport y cvs2git)
Con el modificador 'leer', o sin modificador, aplique los datos de mapeo de autor (desde el estándar
entrada o un <-archivo redirigido). Puede ser útil si está editando un repositorio o volcado creado
by cvs2git o por git-svn invocado sin -A.
Con el modificador 'escribir', escriba un archivo de mapeo que pueda ser interpretado por Autorzy
read, con entradas para cada autor, autor y etiquetador únicos (a la salida estándar
o un <-archivo de mapeo redirigido). Esto puede ser útil como un comienzo en la construcción de un autor.
archivo, aunque cada parte a la derecha de un signo igual deberá editarse.
ramificar [conjunto de caminos]
Especifique la lista de directorios que se tratarán como posibles ramas (que se convertirán en etiquetas si
no hay modificaciones después de las copias de creación) al analizar una Subversion
repo. Esta lista se ignora cuando el --sin rama se utiliza la opción de lectura. Por defecto es
conjunto de directorios de 'diseño estándar', más cualquier directorio no reconocido en el
raíz del repositorio.
Sin argumentos, muestra el conjunto de ramificaciones actual.
Un asterisco al final de una ruta en el conjunto significa 'todos los subdirectorios inmediatos de
esta ruta, a menos que sean parte de otra ruta (más larga) en el conjunto branchify '.
Tenga en cuenta que el conjunto de branchify es una propiedad del intérprete de reposurgeon, no de
repositorio individual, y persistirá en las lecturas del archivo de volcado de Subversion. Esto puede
conducir a resultados inesperados si se olvida de volver a configurarlo.
mapa_rama [/ regex / branch /...]
Especifique la lista de expresiones regulares utilizadas para mapear las ramas svn que son
detectado por branchify. Si ninguna de las expresiones coincide, se aplica el comportamiento predeterminado,
que asigna una rama al nombre del último directorio, excepto el tronco y "*" que
se asignan a master y root.
Sin argumentos, se muestran los pares de reemplazo de expresiones regulares actuales. Pasar 'restablecer'
borre el mapeo de reinicio.
Coincidirá con el nombre de cada rama con regex1 y si coincide, reescribirá su nombre de rama
a la rama 1. Si no, intentará regex2 y así sucesivamente hasta que encuentre una coincidencia
regex o no quedan regexs. Las expresiones regulares deben estar en Python[2].
formato. El nombre de la rama puede usar referencias inversas (consulte la subfunción en Python
documentación).
Tenga en cuenta que las expresiones regulares se añaden a 'refs /' sin los necesarios
'cabezas /' o 'etiquetas /'. Esto permite elegir el tipo correcto de tipo de rama.
Si bien la plantilla de sintaxis anterior usa barras, cualquier primer carácter se usará como
delimitador (y necesitará usar uno diferente en el caso común de que las rutas
contienen barras).
Tenga en cuenta que el conjunto branchify_map es una propiedad del intérprete de reposurgeon, no de
cualquier repositorio individual, y persistirá en las lecturas del archivo de volcado de Subversion. Esto puede
conducir a resultados inesperados si se olvida de volver a configurarlo.
EXAMINANDO ÁRBOL ESTADOS
manifiesto [regular expresión] [>archivar]
Toma un argumento de conjunto de selección opcional predeterminado para todas las confirmaciones, y un
Expresión regular de Python. Para cada compromiso en el conjunto de selección, imprima el mapeo de
todas las rutas en ese árbol de confirmación a las marcas de blob correspondientes, reflejando qué archivos
se crearía en una comprobación de la confirmación. Si se da una expresión regular, solo
imprima líneas de "ruta -> marcar" para las rutas que coincidan con ella. Este comando admite> redirección.
caja directorio
Toma un conjunto de selección que debe resolverse en una única confirmación y un segundo argumento.
El segundo argumento se interpreta como un nombre de directorio. El estado del árbol de códigos en
esa confirmación se materializa debajo del directorio.
diff [>archivar]
Muestra la diferencia entre confirmaciones. Toma un argumento de conjunto de selección que debe
resolver exactamente dos confirmaciones. Admite la redirección de salida.
LIMPIEZA
Estos están respaldados por los siguientes comandos de limpieza, ninguno de los cuales toma una selección
conjunto:
ayuda
Obtenga ayuda sobre los comandos del intérprete. Opcionalmente siga con espacios en blanco y un comando
nombre; sin argumento, enumera todos los comandos. '?' también invoca esto.
shell
Ejecute el comando de shell que se proporciona en el resto de la línea. '!' también invoca esto.
preferir [repotipificar]
Sin argumentos, describa las capacidades de todos los sistemas compatibles. Con un argumento
(que debe ser el nombre de un sistema compatible) esto tiene dos efectos:
Primero, si hay varios repositorios en un directorio, realiza una lectura, reposurgeon
leerá el preferido (de lo contrario se quejará de que no puede elegir entre
ellos).
En segundo lugar, esto cambiará el tipo de salida preferido de reposurgeon. Esto significa que
escribes en un directorio, creará un repositorio del tipo preferido en lugar de
su tipo original (si lo tuviera).
Si no se ha seleccionado explícitamente ningún tipo preferido, la lectura en un repositorio (pero no en un
flujo de importación rápida) establecerá implícitamente el tipo preferido al tipo de ese
repositorio.
En versiones anteriores de reposurgeon este comando cambiaba el tipo del seleccionado
repositorio, si lo hay. Ese comportamiento interactuó mal con los intentos de interpretar
identificaciones heredadas y se ha eliminado.
tipo de fuente [repotipificar]
Informe (sin argumentos) o seleccione (con un argumento) el repositorio actual
tipo de fuente. Este tipo normalmente se configura en el momento de la lectura del repositorio, pero puede permanecer sin configurar
si la fuente era un archivo continuo.
El tipo de fuente afecta la interpretación de los ID heredados (a efectos de =N
conjunto de visibilidad y el comando 'referencias') controlando las expresiones regulares
solía reconocerlos. Si no se ha establecido un tipo de salida preferido, también puede cambiar
el formato de salida de los archivos continuos creados desde el repositorio.
El tipo de fuente se establece de manera confiable cada vez que se lee un repositorio en vivo, o cuando se
Subversion stream o Fossil dump es interpretado pero no necesariamente por otra transmisión
archivos. Streams generados por cvs-exportación rápida(1) usando el --reposcirujano se detectan como
CVS. En algunos otros casos, el sistema fuente se detecta por la presencia de magia.
$-encabezados en blobs de contenido.
INSTRUMENTACIÓN
Se han implementado algunos comandos principalmente para la depuración y la prueba de regresión.
propósitos, pero puede ser útil en circunstancias inusuales.
La salida de la mayoría de estos comandos se puede redirigir individualmente a una salida con nombre
Archivo. Donde se indica en la sintaxis, puede prefijar el nombre del archivo de salida con ">" y dar
como argumento siguiente.
índice [>archivar]
Muestra cuatro columnas de información sobre los objetos en el conjunto de selección: su número, su
tipo, la marca asociada (o '-' si no hay marca) y un campo de resumen que varía según el tipo. Para
una rama o etiqueta es la referencia; para una confirmación es la rama de confirmación; por una gota
es la ruta del repositorio del archivo en el blob.
El conjunto de selección predeterminado para este comando es = CTRU, todos los objetos excepto los blobs.
Resolvemos [etiqueta-texto...]
No hace nada más que resolver una expresión de conjunto de selección y repite el resultado
número de evento establecido en salida estándar. El resto de la línea después del comando es
utilizado como una etiqueta para la salida.
Implementado principalmente para pruebas de regresión, pero puede ser útil para explorar la
lenguaje del conjunto de selección.
asignar [nombre ]
Calcule un conjunto de selección principal y asígnelo a un nombre simbólico. es un error de
asignar a un nombre que ya está asignado, o a cualquier nombre de sucursal existente. Tareas
puede eliminarse mediante mutaciones de secuencia (aunque no por deleciones ordinarias); verás un
advertencia cuando esto ocurra.
Sin conjunto de selección y sin nombre, enumere todas las asignaciones.>
Utilice esto para optimizar los cálculos de ubicación y selección que de otro modo serían
se realiza repetidamente, por ejemplo, en llamadas de macro.
desasignar [nombre ]
Anule la asignación de un nombre simbólico. Lanza un error si el nombre no está asignado.
nombres [>archivar]
Enumere los nombres de todas las ramas y etiquetas conocidas. Te dice qué cosas son legales dentro
corchetes angulares y paréntesis.
verboso [n]
'verbose 1' habilita el medidor de progreso y los mensajes, 'verbose 0' los deshabilita. Más alto
los niveles de verbosidad están disponibles, pero están destinados solo a los desarrolladores.
tranquilo [on | off]
Sin argumentos, este comando solicita un informe del booleano tranquilo; con el
argumento 'on' o 'off' se cambia. Cuando el silencio está activado, los campos de informe varían con el tiempo
que de otro modo causarían fallas espurias en las pruebas de regresión se suprimen.
Imprimir texto de salida...
No hace nada más que enviar su línea de argumento a la salida estándar. Útil en regresión
pruebas.
echo [número]
'echo 1' hace que cada reposicionado comando que se repetirá en la salida estándar justo antes
su salida. Esto puede ser útil para construir pruebas de regresión que sean fáciles de
comprobado por el globo ocular.
guión nombre de archivo [arg...]
Toma un nombre de archivo y los siguientes argumentos opcionales. Lee cada línea del archivo y
lo ejecuta como un comando.
Durante la ejecución del script, el nombre del script reemplaza la cadena $0 y el
Los siguientes argumentos opcionales (si los hay) reemplazan las cadenas $ 1, $ 2 ... $ n en el script
texto. Esto se hace antes de la tokenización, por lo que el $1 en una cadena como "foo$1bar" será
expandido. Además, $$ se expande al ID de proceso actual (que puede ser útil
para scripts que usan archivos temporales).
Dentro de guiones (y solo dentro de guiones) reposicionado acepta un poco extendido
sintaxis: Primero, una barra invertida al final de una línea indica que el comando continúa en la
Proxima linea. Cualquier número de líneas consecutivas así escapadas se concatenan, sin la
barras invertidas finales, antes de la evaluación. En segundo lugar, un comando que toma una entrada
En su lugar, el argumento del nombre de archivo puede tomar los siguientes datos literales en la sintaxis de un shell
aquí-documento. Es decir: si el nombre del archivo se reemplaza por "<
Se leerá el script hasta una línea de terminación que consta solo de "EOF", colocado en un
archivo temporal, y ese archivo se alimenta al comando y luego se elimina. EOF puede ser
reemplazado por cualquier cadena. Las barras invertidas no tienen un significado especial al leer un
aquí-documento.
Los guiones pueden tener comentarios. Se ignora cualquier línea que comience con '#'. Si una línea tiene un
posición final que comienza con uno o más caracteres de espacio en blanco seguidos de '#',
esa parte final se ignora.
versión [versión...]
Sin argumentos, muestra la versión del programa y la lista de VCSes directamente
soportado. Con argumento, declare la versión principal (un solo dígito) o la versión completa
(major.minor) bajo el cual se desarrolló el guión adjunto. El programa fallará
si la versión principal ha cambiado (lo que significa que el lenguaje quirúrgico no es
compatible con versiones anteriores).
Es una buena práctica comenzar su secuencia de comandos de elevación con un requisito de versión, especialmente
si va a archivarlo para referencia posterior.
prompt [formato...]
Establezca el formato del símbolo del sistema en el valor de la línea de comando; con un comando vacío
línea, mostrarlo. El formato de solicitud se evalúa en Python después de cada comando con el
siguientes sustituciones de diccionario:
chosen
El nombre del repositorio seleccionado, o Ninguno si ninguno está seleccionado actualmente.
Por lo tanto, un formato útil podría ser 'rs[%(chosen)s]%% '.
Es posible que se agreguen más elementos de formato en el futuro. El mensaje predeterminado corresponde al
formato 'reposurgeon%%'. La línea de formato se evalúa con shell quotng de tokens, por lo que
que se pueden incluir espacios.
historia
Enumere los comandos que ha ingresado en esta sesión.
legado [read|escribir] [<nombre de archivo] [>nombre de archivo]
Aplicar o enumerar información de referencia heredada. No toma un conjunto de selección. el 'leer'
la variante lee desde la entrada estándar o un <-nombre de archivo redireccionado; la variante 'escribir'
escribe en la salida estándar o en un nombre de archivo >-redireccionado.
Un archivo de referencia heredado asigna cookies de referencia a (committer, commit-date,
pares de números de secuencia); estos a su vez (deberían) identificar de forma única una confirmación. El formato
son dos campos separados por espacios en blanco: la cookie seguida de un sello de acción que identifica
el compromiso.
Normalmente no debería ser necesario utilizar este comando. El mapa heredado es
preservado automáticamente a través de las lecturas y reconstrucciones del repositorio, siendo almacenado en el
archivo legacy-map en el subdirectorio del repositorio.
para reinventar la industria logística y redefinir las soluciones ecológicas para reinventar la industria logística y redefinir las soluciones ecológicas. [opción]
Encienda una bandera de opción. Sin argumentos, enumere todas las opciones
La mayoría de las opciones se describen junto con las operaciones específicas que el
modificar. Uno de interés general es "compressblobs"; esto permite la compresión en el
archivos blob en la representación interna que reposurgeon usa para editar repositorios.
Con esta opción, la lectura y escritura de repositorios es más lenta, pero la edición de un
El repositorio requiere menos (a veces mucho menos) espacio en disco.
limpiar [opción]
Desactivar un indicador de opción. Sin argumentos, enumere todas las opciones
perfiles
Habilite la creación de perfiles. Las estadísticas de perfil se vuelcan a la ruta proporcionada como argumento. Debe ser
uno de los argumentos iniciales de la línea de comandos y recopila estadísticas solo sobre el código
ejecutado a través de '-'.
sincronización
Muestra estadísticas sobre el tiempo de fase en el análisis de repositorios. Principalmente de interés para
desarrolladores tratando de acelerar el programa.
salida
Salir, informando la hora. Incluido aquí porque, mientras que EOT también saldrá limpiamente del
intérprete, este comando informa el tiempo transcurrido desde el inicio.
DE TRABAJO HE TRABAJADO SUBVERSIÓN
reposurgeon puede leer archivos de volcado de Subversion o editar un repositorio de Subversion (y debe
apúntelo a un repositorio, no a un directorio de pago). La distribución de reposcirugía incluye
un script llamado "repotool" que puede usar para crear y luego actualizar de forma incremental un local
espejo de un repositorio remoto con fines de edición o conversión.
LECTURA SUBVERSIÓN Repositorios
Ciertos modificadores opcionales en el comando de lectura cambian su comportamiento al leer Subversion
repositorios:
--sin rama
Suprime el análisis de ramas.
--ignorar propiedades
Suprima las advertencias en tiempo de lectura sobre configuraciones de propiedades descartadas.
--usuario-ignora
No genere archivos .gitignore desde svn: ignore las propiedades. En cambio, solo pasa
Archivos .gitignore encontrados en el historial.
--use-uuid
Si la opción de lectura --use-uuid está configurada, el UUID del repositorio se usará como el
nombre de host al falsificar direcciones de correo electrónico, a la git-svn. De lo contrario, las direcciones serán
generado de la forma en que lo hace git cvs-import, simplemente copiando el nombre de usuario en el
campo de dirección.
Estos modificadores pueden ir a cualquier lugar en cualquier orden en la línea de comando de lectura después del verbo de lectura.
Deben estar separados por espacios en blanco.
Aquí están las reglas utilizadas para mapear subdirectorios en un repositorio de Subversion a ramas:
1. En un momento dado, hay un conjunto de rutas elegibles y comodines de ruta que declaran
ramas potenciales. Consulte la documentación del ramificar para saber cómo alterar este conjunto,
que inicialmente consta de {tronco, etiquetas/*, sucursales/* y '*'}.
2. Un repositorio se considera "plano" si no tiene un directorio que coincida con una ruta o ruta
comodín en el conjunto branchify. Todas las confirmaciones en un repositorio plano se asignan a la rama
master, y lo que habría sido una estructura de rama se convierte en una estructura de directorio. En esto
caso, hemos terminado; todas las demás reglas se aplican a los repos no fijos.
Si das la opcion --sin rama al leer un repositorio de Subversion, rama
se omite el análisis y el repositorio se trata como si fuera plano (se deja como un archivo lineal).
secuencia de confirmaciones en refs/heads/master). Esto puede ser útil si su repositorio
la configuración es muy inusual y necesita hacer su propia cirugía de rama. Tenga en cuenta que
esta opción desactivará la partición de confirmaciones mixtas.
3. Si "troncal" es elegible, siempre se convierte en la rama principal.
4. Si un elemento del conjunto branchify termina con *, cada subdirectorio inmediato del mismo es
considerada una rama potencial. Si '*' está en el conjunto branchify (lo cual es cierto por
predeterminado) todos los directorios de nivel superior que no sean /trunk, /tags y /branches también están
consideradas ramas potenciales.
5. Cada rama potencial se verifica para ver si tiene confirmaciones después de la inicial
creación o copia. Si hay tales confirmaciones, se convierte en una rama. Si no, se convierte en un
etiqueta para preservar los metadatos de confirmación. (En todos los casos, el nombre de la etiqueta o
branch es el nombre base del directorio.)
6. Los archivos del directorio de nivel superior se asignan a una rama sintética denominada 'raíz'.
Cada confirmación que solo crea o elimina directorios (en particular, copia confirmaciones para etiquetas
y ramas, y confirmaciones que solo cambian propiedades) se transformará en una etiqueta
nombrado después de la rama, que contiene los metadatos de fecha/autor/comentario de la confirmación. Mientras
esto produce un resultado deseable para las etiquetas, las ramas sin etiqueta (incluido el tronco) también
obtener etiquetas raíz de esta manera. Esta aparente falla ha sido aceptada para que reposurgeon
nunca destruirá metadatos generados por humanos que puedan tener valor; se deja hasta el
usuario para eliminar manualmente las etiquetas no deseadas.
Las eliminaciones de ramas de Subversion se convierten en deletealls, borrando el conjunto de archivos del
sucursal de flujo de importación. Cuando una rama termina con un deleteall en su punta, el deleteall es
transformado en una etiqueta. Esta regla se limpia después de un cambio de nombre de rama abortado.
Ocasionalmente (y generalmente por error) un repositorio Subversion ramificado contendrá
revisiones que tocan múltiples ramas. Estos se manejan dividiéndolos en
múltiples confirmaciones de flujo de importación, una en cada rama afectada. El Legacy-ID de tal división
commit tendrá una parte pseudo-decimal - por ejemplo, si la revisión de Subversion 2317 toca
tres ramas, las tres confirmaciones generadas tendrán los ID 2317.1, 2317.2 y 2317.3.
Las propiedades svn:executable y svn:special se traducen en configuraciones de permisos en
el flujo de entrada; svn: ejecutable se convierte en 100755 y svn: special se convierte en 120000 (indicando
un enlace simbólico; el contenido del blob será la ruta a la que se debe resolver el enlace simbólico).
Cualquier propiedad cvs2svn:rev generada por cvs2svn se incorpora al mapa interno
utilizado para levantamiento de referencia, luego descartado.
Normalmente, las propiedades svn:ignore por directorio se convierten en archivos .gitignore. .gitignore real
Se supone que los archivos en un directorio de Subversion han sido creados por usuarios de git-svn
por separado de Subversion nativo, ignora las propiedades y se descarta con una advertencia. Le corresponde
al usuario fusionar manualmente el contenido de dichos archivos en el repositorio de destino. Pero
este comportamiento se invierte con la opción --user-ignores; si está activado, archivos .gitignore
se pasan y las propiedades svn:ignore de Subversion se descartan.
(Independientemente de la configuración de la opción --user-ignores, los archivos .cvsignore que se encuentran en
Los repositorios de Subversion siempre se convierten en .gitignores en la traducción. La suposición es
que estos datan de antes de un cambio de CVS a SVN y deben conservarse para afectar el comportamiento
al navegar por esa sección del repositorio).
Se interpretan las propiedades svn:mergeinfo. Cualquier propiedad svn:mergeinfo en una revisión A con
un rango de origen de combinación que termina en la revisión B produce un enlace de combinación de modo que B se convierte en un
padre de a.
Todas las demás propiedades de Subversion se descartan. (Esto puede cambiar en una versión futura).
la propiedad para la que es más probable que esto cause problemas semánticos es svn:eol-style.
Sin embargo, dado que las confirmaciones de solo cambio de propiedad se convierten en etiquetas anotadas, la traducción
Las etiquetas conservarán información sobre los cambios de configuración.
La resolución de subsegundos sobre las fechas de confirmación de Subversion se descarta; Git quiere entero
solo marcas de tiempo.
Dado que el formato de importación rápida no puede representar un directorio vacío, los directorios vacíos en
Los repositorios de Subversion se perderán en la traducción.
Normalmente, los nombres de usuario locales de Subversion se asignan al estilo de git cvs-import; así usuario
"foo" se convierte en "foo ", que es suficiente para apaciguar a git y otros sistemas que
requieren direcciones de correo electrónico. Con la opción "svn_use_uuid", los nombres de usuario se asignan en el
estilo git-svn, con el UUID del repositorio utilizado como un dominio falso en la dirección de correo electrónico. Ambos
Los formularios se pueden reasignar a la dirección real utilizando el Autorzy read mando.
La lectura de un flujo de Subversion permite escribir el mapa heredado como transferencias 'heredadas'
cuando el repositorio se escribe en un archivo de flujo.
reposicionado se esfuerza por hacer lo correcto en silencio, pero hay casos extremos de Subversion
en el que emite advertencias porque un humano puede necesitar intervenir y realizar arreglos por
mano. Estos son los mensajes menos obvios que puede emitir:
.gitignore generado por el usuario
Este mensaje significa significa reposicionado ha encontrado un archivo .gitignore en Subversion
repositorio que está analizando. Esto probablemente sucedió porque alguien estaba usando git-svn
como una puerta de enlace en vivo, y creó ignora que puede o no ser congruente con los de
los archivos .gitignore generados cuyas propiedades Subversion ignorarán serán
traducido al. Tendrá que tomar una decisión de política sobre qué conjunto de ignorados
usar en la conversión, y posiblemente establecer la opción --user-ignores en lectura para pasar
a través de archivos .gitignore creados por el usuario; en ese caso, esta advertencia no se emitirá.
no se puede conectar la rama no vacía XXXX al origen
Este es un error serio. reposicionado no ha podido encontrar un enlace de un determinado
rama a la rama troncal (maestra). El gráfico de compromiso no estará completamente conectado y
necesitará reparación manual.
la información de permiso puede perderse
Un cambio de nodo de Subversion en un archivo establece o borra propiedades, pero no se puede cambiar ningún ancestro.
encontrado para este archivo. La posición del enlace simbólico o ejecutable puede configurarse incorrectamente más adelante
revisiones de este archivo. Las propiedades definidas por el usuario de Subversion también se pueden codificar o
perdió. Por lo general, este error se puede ignorar.
conjunto de propiedades
reposicionado ha detectado una configuración de una propiedad definida por el usuario, o Subversion
propiedades svn: externos. Estas propiedades no se pueden expresar en una secuencia de importación;
Se notifica al usuario en caso de que esto sea un obstáculo para la conversión o alguna
Se requiere una acción correctiva, pero normalmente este error se puede ignorar. Esta advertencia es
suprimido por la opción --ignore-properties.
enlaces de rama detectados solo por operaciones de archivo
Los enlaces de rama normalmente se deducen examinando las operaciones de copia de directorios de Subversion. A
error de usuario común (hacer una rama con una copia de directorio que no es de Subversion y luego hacer
un complemento svn en los contendientes) puede vencer esto. Mientras reposicionado debe detectar y hacer frente
con la mayoría de estas copias correctamente, debe examinar el gráfico de confirmación para comprobar que el
rama está enraizada en el lugar correcto.
no se pudo etiquetar el compromiso de root
La primera confirmación en su repositorio de Subversion tiene operaciones de archivo, en lugar de
siendo una creación pura de directorio. Esto probablemente significa que su archivo de volcado de Subversion está
mal formado, o puede que haya intentado levantar desde un volcado incremental. Proceder con
precaución.
eliminar la sugerencia sin padres eliminar
Este mensaje puede ser desencadenado por un movimiento de rama de Subversion seguido de una recreación
bajo el nombre de la fuente. Verifique cerca de la revisión indicada para asegurarse de que el renombrado
la rama está conectada al maestro.
eliminar todo de la rama intermedia
Se ha encontrado una operación deleteall en medio del historial de una rama. Esto por lo general
indica que una etiqueta o rama de Subversion se creó por error, y alguien más tarde
intentó deshacer el error eliminando el directorio de etiqueta/sucursal antes de volver a crearlo con
una operación de copia. Examine la topología cerca de deleteall de cerca, es posible que necesite
hackear a mano. Es bastante probable que tanto (a) el reposicionado la traducción será
diferente de lo que otros traductores (como git-svn) producirá, y (b) no producirá
ser inmediatamente obvio cuál es el correcto.
no se pudo encontrar una rama raíz para la copia
El análisis de la rama falló, probablemente debido a un conjunto de copias de archivos que reposicionado pensamiento
debería interpretarse como una creación de rama fallida pero no pudo deducir un historial para.
Utilice la opción --nobranch.
inconsistentemente vacío del conjunto
Este mensaje significa significa reposicionado ha fallado una verificación de cordura interna; el
La estructura de directorios implícita en sus mapas de archivos construidos internamente no es consistente con
qué hay en los nodos de Subversion analizados. Esto nunca debería suceder; si lo ves denuncialo
un error en reposicionado.
ESCRITURA SUBVERSIÓN Repositorios
reposurgeon tiene soporte para escribir repositorios de Subversion. Debido a desajustes entre los
ontología de Subversion y la de git import streams, este soporte tiene algunos
limitaciones y errores.
En resumen, los historiales de repositorios de Subversion no viajan a través de la edición de repositorio.
Los cambios en el contenido del archivo se conservan, pero inevitablemente se pierden algunos metadatos. Además,
escribir un historial de DVCS en Subversion también pierde porciones significativas de sus metadatos.
Los detalles siguen.
Escribir un repositorio de Subversion o un flujo de volcado descarta la información del autor, el
el nombre del confirmador y la parte del nombre de host de la dirección de confirmación; solo la marca de tiempo de confirmación
y la parte local de la dirección de correo electrónico del remitente se conservan, convirtiéndose esta última en la
Campo de autor de Subversion. Sin embargo, leer un repositorio de Subversion y escribirlo de nuevo
conservará los campos de autor.
Las marcas de tiempo del flujo de importación tienen una granularidad de 1 segundo. Las sub-segundos partes de Subversion
Las marcas de tiempo de compromiso se perderán en su camino a través de reposurgeon.
Los directorios vacíos no se representan en los flujos de importación. En consecuencia, la lectura y la escritura
Los repositorios de Subversion conservan el contenido de los archivos, pero no los directorios vacíos. tampoco es
garantizó que después de editar un repositorio de Subversion que la secuencia de directorio
las creaciones y las supresiones relativas a otras operaciones serán idénticas; la única garantía
es que los directorios adjuntos se crearán antes que los archivos que contengan.
Al leer un repositorio de Subversion, reposurgeon descarta la copia de directorio especial
nodos asociados con creaciones de ramas. Estos no pueden ser recreados si y cuando el
el repositorio se vuelve a escribir en Subversion; más bien, cada rama copia el nodo del
original se traduce en la creación de una rama más el primer conjunto de modificaciones de archivo en el
.
Al leer un repositorio de Subversion, reposurgeon también se separa automáticamente
confirmaciones de rama mixta. Estos no se vuelven a unir si el repositorio se vuelve a escribir.
Al escribir en un repositorio de Subversion, todas las etiquetas ligeras se convierten en copias de etiquetas de Subversion
con comentarios de registro vacíos, llamados así por el nombre base de la etiqueta. El nombre del confirmador y la marca de tiempo son
copiado de la confirmación a la que apunta la etiqueta. Se pierde la distinción entre encabezados y etiquetas.
Debido a los dos puntos anteriores, no se garantiza que incluso los números de revisión
¡Sea estable cuando se lea un repositorio de Subversion y luego se escriba!
Los repositorios de Subversion siempre se escriben con un diseño estándar (troncal/etiquetas/sucursales).
Por lo tanto, un depósito con una forma no estándar que haya sido analizado por reposurgeon no será
escrito con la misma forma.
Al escribir un repositorio de Subversion, las fusiones de ramas se traducen a svn: mergeinfo
properties de la forma más sencilla posible, como una propiedad svn:mergeinfo de la propiedad traducida
merge commit enumerando las revisiones de la fuente de fusión.
Subversion tiene un concepto de "flujos"; es decir, segmentos nombrados de la historia correspondientes a
archivos o directorios que se crean cuando se agrega la ruta, se clonan cuando la ruta se
copiado y eliminado cuando se elimina la ruta. Esta información no se conserva en la importación.
flujos o la representación interna que utiliza reposurgeon. Así, después de la edición, el
los límites de flujo de un historial de Subversion pueden cambiarse arbitrariamente.
IGNORAR PATRONES
reposicionado reconoce cómo los VCS compatibles representan archivos ignorados (archivos CVS .cvsignore
al acecho sin traducir en repositorios de Subversion más antiguos, Subversion ignora las propiedades,
.gitignore/.hgignore/.bzrignore en otros sistemas) y mueve las declaraciones de ignorar entre
estos contenedores en la entrada y salida del repositorio. Esto será suficiente si los patrones de ignorar
son nombres de archivo exactos.
Sin embargo, la traducción puede no ser perfecta cuando los patrones de ignorar son patrones globales de Unix.
o expresiones regulares. Esta tabla de compatibilidad describe qué patrones se traducirán;
"simple" indica un nombre de archivo simple sin sintaxis o negación global o regexp.
RCS no ignora archivos ni patrones y, por lo tanto, no se incluye en la tabla.
┌──────────────┬───────────────┬────────────────────────── ──────────────────────────────────────────────────────────── ───────┬──────────────┬────────────┐
│ │ obtenidos de CVS │ obtenidos de svn │ obtenidos de git │ obtenidos de hg │ obtenidos de bzr │ obtenidos de dardos │ obtenidos de SRC │
├──────────────┼───────────────┼────────────────────────── ──────────────────────────────────────────────────────────── ───────┼──────────────┼────────────┤
│ a │ todo │ todo │ todo │ todo │ todo │ sencillo │ todo │
│ CVS │ │ │ excepto │ │ excepto │ │ │
├──────────────┼───────────────┼────────────────────────── ──────────────────────────────────────────────────────────── ───────┼──────────────┼────────────┤
│ a │! .PP │ todos │ todos excepto │ todos │ todos excepto │ simple │ todos │
│ svn │ │ │ !-prefijado │ │ RE:- y │ │ │
├──────────────┼───────────────┼────────────────────────── ──────────────────────────────────────────────────────────── ───────┼──────────────┼────────────┤
│ a │ todo │ todo │ todo │ todo │ todo excepto │ normal │ todo │
│ git │ │ │ │ excepto │ RE:-prefijado │ │ │
├──────────────┼───────────────┼────────────────────────── ──────────────────────────────────────────────────────────── ───────┼──────────────┼────────────┤
│ a │ todos │ todos │ todos excepto │ todos │ todos excepto │ normal │ todos │
│ hg │ excepto │ │! -Prefijo │ │ RE: - y │ │ │
├──────────────┼───────────────┼────────────────────────── ──────────────────────────────────────────────────────────── ───────┼──────────────┼────────────┤
│ a │ todo │ todo │ todo │ todo │ todo │ sencillo │ todo │
│ bzr │ │ │ │ │ │ │ │
├──────────────┼───────────────┼────────────────────────── ──────────────────────────────────────────────────────────── ───────┼──────────────┼────────────┤
│ a │ llano │ llano │ llano │ llano │ llano │ todo │ todo │
│ dardos │ │ │ │ │ │ │ │
├──────────────┼───────────────┼────────────────────────── ──────────────────────────────────────────────────────────── ───────┼──────────────┼────────────┤
│ a │ todos │ todos │ todos excepto │ todos │ todos excepto │ normal │ todos │
│ SRC │ excepto │ │! -Prefijo │ │ RE: - y │ │ │
└──────────────┴───────────────┴────────────────────────── ──────────────────────────────────────────────────────────── ───────┴──────────────┴────────────┘
Las filas y columnas hg de la tabla describen la compatibilidad con la sintaxis glob de hg en lugar de
que su sintaxis de expresión regular predeterminada. Al escribir en un repositorio hg desde cualquier
otro tipo, reposicionado antepone a la salida .hgignore una línea "syntax: glob".
TRADUCCIÓN ESTILO
Después de convertir un repositorio CVS o SVN, verifique y elimine las $-cookies en el encabezado
revisión (es) de los archivos. El conjunto completo de Subversion es $ Fecha :, $ Revisión :, $ Autor :,
$ HeadURL y $ Id :. CVS usa $ Author :, $ Date :, $ Header :, $ Id :, $ Log :, $ Revision :, también
(rara vez) $Locker:, $Name:, $RCSfile:, $Source: y $State:.
Cuando necesite especificar una confirmación, use el formato de sello de acción que referencias ascensor
genera cuando puede resolver una referencia SVN o CVS en un comentario. lo mejor es que tu
no variará obtenidos de este vídeo formato, incluso en formas triviales como omitir la 'Z' o cambiar la 'T'
o '!' o ':'. Hacer que los sellos de acción sean uniformes y analizables por máquina tendrá una buena
consecuencias para futuras herramientas de exploración de repositorios.
A veces, al convertir un repositorio, es posible que deba insertar un comentario explicativo, por
por ejemplo, si los metadatos se han distorsionado o faltan y necesita señalar ese hecho. Es
útil para las herramientas de exploración de repositorios si hay una sintaxis uniforme para esto que es altamente
es poco probable que aparezca en los comentarios del repositorio. Recomendamos adjuntar notas de traducción en [[
]]. Esto tiene la ventaja de ser visualmente similar al [ ] usado tradicionalmente para
comentarios editoriales en el texto.
Es una buena práctica incluir, en el comentario de la confirmación raíz del repositorio, un
nota que data y atribuye el trabajo de conversión y explica estas convenciones. Ejemplo:
[[Este repositorio fue convertido de Subversion a git el 2011-10-24 por Eric S. Raymond
<[email protected]>. Aquí y en otros lugares, las notas de conversión están encerradas en doble cuadrado
soportes. Se han eliminado las confirmaciones no deseadas generadas por cvs2svn, se han eliminado las referencias de confirmación.
mapeado en una sintaxis uniforme independiente de VCS, y algunos comentarios editados en
formulario de resumen más continuación.]]
También es una buena práctica incluir una etiqueta generada en el punto de conversión. P.ej
buzón_en --create <
Nombre de la etiqueta: git-conversion
Marca el lugar en el que este repositorio se convirtió de Subversion a git.
EOF
ADVANCED EJEMPLOS
definir último cambio {
@max(=B & [/ChangeLog/] & /{0}/B)? lista
}
Enumere la última confirmación que hace referencia a un archivo ChangeLog que contiene una cadena especificada. (El
truco aquí es ese? extiende el conjunto singleton que consiste en el último ChangeLog elegible
blob a su conjunto de confirmaciones de referencia, y listasolo nota las confirmaciones.)
STREAM SINTAXIS AMPLIACIONES
El analizador de flujo de eventos en "reposurgeon" admite alguna sintaxis extendida. Exportadores diseñados
para trabajar con “reposurgeon” puede tener una opción --reposurgeon que permite la emisión de
sintaxis extendida; en particular, esto es cierto para cvs-exportación rápida(1). El resto de este
La sección describe estas extensiones de sintaxis. Las propiedades que establecen se conservan (generalmente)
y volver a generar cuando se escribe el archivo de flujo.
El token "#reposurgeon" al comienzo de una línea de comentario en una señal de flujo de importación rápida
reposurgeon que el resto es un comando de extensión para ser interpretado por "reposurgeon".
Se implementa uno de estos comandos de extensión: #tipo de fuente, que se comporta de forma idéntica a la
reposicionadotipo de fuente mando. Un exportador para un sistema de control de versiones llamado "frobozz"
podría, por ejemplo, decir
#reposurgeon fuente tipo frobozz
Dentro de una confirmación, un comentario mágico de la forma "#legacy-id" declara una ID heredada del
sistema de control de versiones de origen del archivo de flujo.
También se acepta la sintaxis bzr para establecer propiedades por confirmación. Mientras analiza el compromiso
sintaxis, una línea que comience con el token "propiedad" debe continuar con un
token de nombre de propiedad separado por espacios en blanco. Si luego es seguido por una nueva línea, se toma
para establecer esa propiedad de valor booleano en verdadero. De lo contrario, debe ir seguido de un número.
token que especifica una longitud de datos, un espacio, los siguientes datos (que pueden contener nuevas líneas) y un
terminación de nueva línea. Por ejemplo:
cometer refs / heads / master
marca: 1
cometer Eric S. Raymond[email protected]> 1289147634-0500
fecha 16
Confirmación de ejemplo.
propiedad legado-id 2 r1
M 644 en línea LÉAME
A diferencia de otras extensiones, las propiedades de bzr solo se conservan en la salida de flujo si el
el tipo preferido es bzr, porque cualquier importador que no sea bzr se atragantará con ellos.
INCONSISTENTES IDIOMA CAMBIOS
En las versiones anteriores a la 3.0, la sintaxis de comando general ponía primero el verbo de comando, luego el
conjunto de selección (si lo hay) y luego modificadores (VSO). Ha cambiado al conjunto de selección opcional
primero, luego el verbo de comando, luego los modificadores (SVO). El cambio simplificó el análisis, permitió
eliminando algunas palabras clave de ruido, y recapitula un patrón de diseño exitoso en algunos
otras herramientas de Unix - en particular SED(1).
En versiones anteriores a la 3.0, las expresiones de ruta solo coincidían con confirmaciones, no confirmaciones y la
blobs asociados también. Los nombres de las banderas “a” y “c” eran diferentes.
In reposicionado versiones anteriores a la 3.0, el comando de eliminación tenía la semántica de squash; además,
las banderas de política no requerían un prefijo "--". La bandera "--delete" fue nombrada
"obliterar".
In reposicionado versiones anteriores a la 3.0, leer y escribir opcionalmente tomaba argumentos de archivo en lugar de
que requerir redireccionamientos (y el comando de escritura nunca escribió en los directorios). Esto era
cambiado para permitir que estos comandos tengan modificadores. Estos modificadores reemplazados
varias opciones globales que ya no existen.
In reposicionado versiones anteriores a la 3.0, el factor más antiguo en un comando de unión siempre mantuvo su
nombres de etiqueta y rama inalterados. La nueva regla para resolver conflictos de nombres, dando prioridad
al último factor, produce un comportamiento más natural al unir dos repositorios de extremo a extremo
fin; la rama maestra de la segunda (posterior) conserva su nombre.
In reposicionado versiones anteriores a la 3.0, el comando tagify esperaba políticas como finales
argumentos para modificar su conducta. La nueva sintaxis usa opciones con nombres similares con encabezados
guiones, que pueden aparecer en cualquier lugar después del comando tagify
En versiones anteriores a la 2.9. la sintaxis de "autores", "heredado", "lista" y "buzón_ {entrada | salida}"
era diferente (y "legado" era "fósiles"). Tomaron argumentos simples de nombre de archivo en lugar de
usando redireccionar <y>.
LIMITACIONES Y GARANTÍAS
Garantía: en los DVC que usan hashes de confirmación, la edición con reposicionado nunca cambia el
hash de un objeto de confirmación a menos que (a) edite la confirmación, o (b) sea un descendiente de un
confirmación editada en un VCS que incluye hashes principales en la entrada del hash de un objeto secundario
(git y hg hacen esto).
Garantía: reposicionado solo requiere memoria principal proporcional al tamaño de un
el historial de metadatos del repositorio, no todo el historial de contenido. (Excepción: los datos de
el contenido en línea se mantiene en la memoria).
Garantía: En el peor de los casos, reposicionado hace su propia copia de cada blob de contenido en el
historial del repositorio y, por lo tanto, utiliza espacio en disco intermedio aproximadamente igual al tamaño
del historial de contenido de un repositorio. Sin embargo, cuando se presenta el repositorio a editar
como un archivo de flujo, reposicionado requiere muy poco o ningún espacio adicional en disco para
representarlo; la representación interna de los blobs de contenido es un par (búsqueda-desplazamiento, longitud)
apuntando al archivo de flujo.
Garantía: reposicionado nunca modifica el contenido de un repositorio que lee, ni elimina
cualquier repositorio. Los resultados de la cirugía siempre se expresan en un nuevo repositorio.
Garantía: cualquier línea en un flujo de importación rápida que no sea parte de un comando reposicionado
analiza y entiende se pasará sin cambios. En la actualidad el conjunto de potenciales
se sabe que los traspasos incluyen el progreso, el opcionesy control comandos como
así como los comentarios encabezados por #.
Garantía: Todos reposicionado las operaciones conservan todo el estado del repositorio que no son
se les ha dicho explícitamente que modifiquen o le adviertan cuando no puedan hacerlo.
Garantía: reposicionado maneja la extensión bzr commit-properties, pasando correctamente
a través de elementos de propiedad, incluidos aquellos con saltos de línea incrustados. (Tales propiedades también son
editable en el formato de buzón.)
Limitación: Porque reposicionado depende de otros programas para generar e interpretar la
flujo de comandos de importación rápida, está sujeto a errores en esos programas.
Limitación: bzr sufre una profunda confusión sobre si su unidad de trabajo es un repositorio
o una rama flotante que podría haber sido clonada de un repositorio o creada desde cero, y
podría o no estar destinado a fusionarse en un repositorio algún día. Su exportador sólo trabaja en
sucursales, pero su importador crea reportos. Por lo tanto, una operación de reconstrucción producirá un
estructura de subdirectorios que difiere de lo que espera. Busque su contenido bajo el
subdirectorio 'tronco'.
Limitación: en git, las etiquetas firmadas se importan palabra por palabra. Sin embargo, cualquier operación que
modifica cualquier confirmación anterior al destino de la etiqueta, la invalidará.
Limitación: Stock git (al menos a partir de la versión 1.7.3.2) se ahogará con la extensión de la propiedad
comandos Respectivamente, reposicionado los omite al reconstruir un repositorio con tipo git.
Limitación: Mientras que el soporte del lado de lectura de Subversion está en buena forma, el lado de escritura
el soporte es más un boceto o una prueba de concepto que una implementación robusta; sólo
funciona en casos muy simples y no de ida y vuelta. Puede mejorar en futuras versiones.
Limitación: reposicionado puede comportarse mal bajo un sistema de archivos que rompe mayúsculas y minúsculas en los nombres de archivo,
o que nominalmente conserva el caso pero asigna nombres que difieren solo por el caso al mismo
nodo del sistema de archivos (Mac OS X se comporta así de forma predeterminada). Surgirán problemas si dos
las rutas en un repositorio difieren solo por mayúsculas y minúsculas. Para evitar el problema en una Mac, haga toda su cirugía en
un sistema de archivos HFS+ formateado con distinción entre mayúsculas y minúsculas habilitada específicamente.
Garantía: A medida que los sistemas de control de versiones agregan soporte para el formato de importación rápida, su
Los repositorios serán editables por reposicionado.
REQUISITOS
reposicionado depende de los importadores y exportadores asociados con los VCS que admite.
git
Core git admite tanto la exportación como la importación.
bzr
Requiere bzr más el complemento bzr-fast-import.
hg
Requiere core hg, el complemento hg-fastimport y el tercero hg-fast-export.py
guión.
svn
Los comandos de Stock Subversion admiten exportación e importación.
dardos
Los comandos de stock darcs admiten exportación e importación.
CVS
Requiere cvs-fast-export. Tenga en cuenta que la calidad de los ascensores CVS puede ser deficiente, con
ascensores individuales que requieren un serio hackeo de manos. Esto se debe a problemas inherentes con
Modelo orientado a archivos de CVS.
RCS
Requiere cvs-fast-export (sí, eso no es un error tipográfico; cvs-fast-export maneja RCS
colecciones también). Se aplica la advertencia para CVS.
CANONICALIZACIÓN REGLAS
Se espera que reposicionado se ampliará con más políticas de eliminación. Política
los autores pueden necesitar saber más acerca de cómo la secuencia de operaciones de archivo de una confirmación se reduce a
forma normal después de que se antepongan las operaciones de las confirmaciones eliminadas.
Recuerde que cada confirmación tiene una lista de operaciones de archivo, cada una M (modificar), D (eliminar), R
(renombrar), C (copiar) o 'eliminar todo' (eliminar todos los archivos). Sólo M operaciones tienen asociadas
manchas Normalmente, solo hay una operación M por archivo individual en una operación de confirmación
lista.
Para entender cómo funciona el proceso de reducción, es suficiente entender el caso donde
todas las operaciones en la lista están trabajando en el mismo archivo. Sublistas de operaciones
referirse a diferentes archivos no se afectan entre sí y se puede pensar en reducirlos
como operaciones separadas. Además, un "deleteall" actúa como una D para todo y cancela todo
operaciones antes de él en la lista.
El proceso de reducción recorre la lista desde el principio buscando pares adyacentes.
de operaciones que puede componer. La siguiente tabla describe todos los casos posibles y todos menos
una de las reducciones.
┌─────────────────────────────────────────────────────────── ────────────┐
│ METRO + RE → RE │ │
│ │ Si se modifica un archivo │
│ │ luego borrado, el resultado │
│ │ es como si hubiera sido │
│ │ eliminado. Si la M fuera la │
│ │ solo modificar para el archivo, │
│ │ también se elimina. │
├─────────────────────────┼─────────────────────── ────────────┤
│M a + R ab → R ab + M b │ │
│ │ El propósito de esto │
│ │ la transformación es empujar │
│ │ cambia el nombre hacia el │
│ │ comienzo de la lista, │
│ │ donde pueden llegar a ser │
│ │ adyacente a otra R o │
│ │ C se pueden componer │
│ │ con. Si la M es la │
│ │ solo modifica la operación para │
│ │ este archivo, el cambio de nombre es │
│ │ caído. │
├─────────────────────────┼─────────────────────── ────────────┤
│ MA + C ab │ │
│ │ Sin reducción. │
├─────────────────────────┼─────────────────────── ────────────┤
│ METRO segundo + R ab → nada │ │
│ │ Debería ser imposible, y │
│ │ puede indicar repositorio │
│ │ corrupción. │
├─────────────────────────┼─────────────────────── ────────────┤
│ M segundo + C ab → nada │ │
│ │ La copia deshace el │
│ │ modificación. │
├─────────────────────────┼─────────────────────── ────────────┤
│ D + METRO → METRO │ │
│ │ Si se elimina un archivo y │
│ │ modificado, el resultado es │
│ │ como si la eliminación │
│ │ no había tenido lugar │
│ │ (porque operaciones M │
│ │ almacena archivos completos, no │
│ │ deltas). │
├─────────────────────────┼─────────────────────── ────────────┤
│ D + {D|R|C} │ │
│ │ Estos casos deben ser │
│ │ imposible y sería │
│ │ sugerir el repositorio │
│ │ se ha corrompido. │
├─────────────────────────┼─────────────────────── ────────────┤
│ R ab + D a │ │
│ │ Nunca debería suceder, y │
│ │ es otro caso que │
│ │ sugeriría repositorio │
│ │ corrupción. │
├─────────────────────────┼─────────────────────── ────────────┤
│ R ab + D b → D a │ │
│ │ La eliminación elimina el │
│ │ archivo recién renombrado. │
├─────────────────────────┼─────────────────────── ────────────┤
│ {R|C} + M │ │
│ │ Sin reducción. │
├─────────────────────────┼─────────────────────── ────────────┤
│ R ab + R bc → R ac │ │
│ │ Los términos b deben coincidir │
│ │ para que estas operaciones │
│ │ han tenido sentido cuando │
│ │ vivía en separado │
│ │ compromisos; si no lo hacen, │
│ │ indica repositorio │
│ │ corrupción. │
├─────────────────────────┼─────────────────────── ────────────┤
│ R ab + C bc │ │
│ │ Sin reducción. │
├─────────────────────────┼─────────────────────── ────────────┤
│ C ab + D a → R ab │ │
│ │ Copiar seguido de eliminar │
│ │ de la fuente es un │
│ │ renombrar. │
├─────────────────────────┼─────────────────────── ────────────┤
│ C ab + D b → nada │ │
│ │ Esta eliminación deshace el │
│ │ copiar. │
├─────────────────────────┼─────────────────────── ────────────┤
│ C ab + R ac │ │
│ │ Sin reducción. │
├─────────────────────────┼─────────────────────── ────────────┤
│ C ab + R bc → C ac │ │
│ │ Copiar seguido de un cambio de nombre │
│ │ del objetivo se reduce a │
│ │ copia única │
├─────────────────────────┼─────────────────────── ────────────┤
│ C + C │ │
│ │ Sin reducción. │
└─────────────────────────────────────────────────────────── ────────────┘
CRASH LA RECUPERACIÓN
Esta sección será relevante sólo si reposicionado o algo debajo de él en el
la pila de software y hardware falla mientras se está escribiendo un repositorio, en
en particular si el directorio de destino de la reconstrucción es su directorio actual.
La herramienta tiene dos objetivos en conflicto. Por un lado, nunca queremos arriesgarnos a dar una paliza
un repositorio preexistente. Por otro lado, queremos poder ejecutar esta herramienta en un directorio
con un repositorio y modifíquelo en su lugar.
Resolvemos este dilema jugando un juego de monte de tres directorios.
1. Primero, construimos el repositorio en un directorio de ensayo recién creado. Si tu objetivo
directorio se llama /ruta/a/foo, el directorio de ensayo será un par llamado
/ruta/a/foo-stageNNNN, donde NNNN es una cookie derivada de reposicionadoID de proceso.
2. Luego hacemos un directorio de respaldo vacío. Este directorio se llamará /ruta/a/foo.~N~,
donde N se incrementa para no entrar en conflicto con ningún directorio de copia de seguridad existente.
reposicionado nunca, bajo ninguna circunstancia, borre un directorio de copia de seguridad.
Hasta el momento, todas las operaciones son seguras; lo peor que puede pasar hasta este punto si el
el proceso se interrumpe es que los directorios de preparación y de copia de seguridad se quedan atrás.
3. Comienza la región crítica. Primero movemos todo en el directorio de destino al
directorio de respaldo.
4. Luego, movemos todo en el directorio de ensayo al destino.
5. Terminamos restaurando los archivos sin seguimiento en el directorio de destino desde la copia de seguridad.
directorio. Eso acaba con la región crítica.
Durante la región crítica, se ignoran todas las señales que se pueden ignorar.
ERROR DEVOLUCIONES
Devuelve 1 en caso de error fatal, 0 en caso contrario. En el modo por lotes, todos los errores son fatales.
Use reposurgeon en línea usando los servicios de onworks.net