sumar suma recursividad recursivas recursiva que número numeros numero mayor función funciones funcion entero ejemplos dígitos digitos devuelva cantidad binario arreglos cvs

suma - Cómo agregar directorios de CVS recursivamente



suma recursiva de n numeros (14)

Los métodos ya comentados harán búsquedas recursivas, pero fallarán si realiza la misma acción de nuevo (si desea agregar un subárbol al árbol existente) Por esa razón debe verificar que sus directorios no se hayan agregado todavía y luego agregar solo los archivos que no agregado aún Para hacer eso, utilizamos la salida de cvs up para ver qué elementos no se agregaron aún: tendrá un signo de interrogación al inicio de la línea.

Usamos las opciones -0 , -print0 y -zZ para asegurarnos de que procesamos correctamente los espacios en los nombres de archivos. También usamos --no-run-if-empty para evitar ejecutar si no se necesita agregar nada.

CVS_PATTERN=/tmp/cvs_pattern cvs -z3 -q up | egrep ''^/?.*'' | sed -e ''s/^? //'' > $CVS_PATTERN find . -type d /! -name CVS -print0 | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add find . /( -type d -name CVS -prune /) -o /( -type f -print0 /) | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add cvs commit -m ''commiting tree recursively''

Con este enfoque evitaremos tales errores:

cvs add: cannot add special file `.''; skipping cvs [add aborted]: there is a version in ./dirname1 already

y

cvs add: `./dirname2/filename'' already exists, with version number 1.1.1.1

He jugado un poco con CVS y no estoy muy familiarizado con todas sus capacidades, pero una gran molestia para mí es tratar de agregar nuevos directorios que contengan más directorios en ellos. Ejecutar " cvs add " solo agrega el contenido del directorio actual y el uso de " cvs import " tampoco parece ser lo correcto, ya que sigue siendo todo el código que estoy produciendo (este howto demandó que la importación es para fuentes de terceros )

¿Ustedes saben alguna forma de agregar recursivamente todo en un directorio determinado al proyecto actual de CVS (o si SVN o git lo hacen notablemente más fácil)?


Ah, espacios. Esto funcionará con espacios:

find . -type f -print0| xargs -0 cvs add


Creo que esto es lo que hice en mis días de CVS:

find . -type f | xargs cvs add


Primero agrega todos los directorios a CVS

find . -type d -print0| xargs -0 cvs add

A continuación, agregue todos los archivos en los directorios a CVS

find . -type f -print0| xargs -0 cvs add


cvs import no es solo para fuentes de terceros. De hecho, CVS no versiona los directorios, por lo que no están sujetos a políticas de sucursales. Mientras importes directorios vacíos, está bien.


Tenga en cuenta que solo puede usar cvs add en archivos y carpetas que se encuentran dentro de una copia de trabajo ya desprotegida; de lo contrario, aparecerá el mensaje "No se puede abrir CVS / Entries for reading" . Se explica una técnica para crear un nuevo "módulo raíz" usando cvs add en este elemento de preguntas frecuentes de WinCVS: http://cvsgui.sourceforge.net/newfaq.htm#add_rootmodule

Si está en Windows, tanto TortoiseCVS como WinCVS admiten la adición recursiva (y la confirmación opcional) de varios archivos en una sola operación. En WinCvs, busque la macro Agregar> Agregar recursivo (confirmación automática) ... En Tortoise, use el comando Agregar contenido en un directorio. Ambos le permitirán seleccionar qué archivos agregar y qué modos de expansión de palabras clave usar (principalmente para definir qué archivos son binarios).

Para obtener más información acerca de agregar recursivo en WinCvs, mira aquí: http://cvsgui.sourceforge.net/newfaq.htm#cvs-add_recursive

Aparte de eso, la cvs import es muy adecuada para adiciones masivas. Sin embargo, la forma en que se implementa la cvs import en CVS vanilla tiene dos inconvenientes (porque originalmente se escribió para código de terceros):

  • crea una rama obligatoria con semántica especial.
  • no crea los metadatos del repositorio (es decir, los directorios ocultos de CVS) necesarios para establecer el código importado como una copia de trabajo desprotegida, lo que significa que para trabajar realmente con los archivos importados primero debe verificarlos fuera del repositorio

Si está utilizando CVSNT puede evitar ambos inconvenientes al especificar la opción -nC en la importación. -n es para evitar la rama "proveedor" y -C es para crear los directorios CVS.


Estoy usando este sencillo script de shell, que debería iniciarse desde un directorio de CVS ya desprotegido. Estúpidamente intentará agregar / confirmar cualquier archivo y directorio que encuentre en su búsqueda recursiva, por lo que al final debería terminar con un árbol de commit completo.

Simplemente guarde esto como algo como /usr/bin/cvsadd y no olvide chmod +x /usr/bin/cvsadd .

#!/bin/sh # @(#) add files and directories recursively to the current CVS directory # (c) 2009 by Dirk Jagdmann if [ -z "$1" ] ; then echo "usage: cvsadd ''import message''" exit 1 fi if [ -d "$2" ] ; then cvs add "$2" cd "$2" || exit 1 fi if [ ! -d CVS ] ; then echo "current directory needs to contain a CVS/ directory" exit 1 fi XARGS="xargs -0 -r -t -L 1" # first add all files in current directory find . -maxdepth 1 -type f -print0 | $XARGS cvs add find . -maxdepth 1 -type f -print0 | $XARGS cvs ci -m "$1" # then add all directories find . -maxdepth 1 -type d -not -name CVS -a -not -name . -print0 | $XARGS "$0" "$1"


Encontré que esto funcionó bastante bien:

Primero, agregue todos los directorios, pero no cualquier nombre "CVS":

find . -type d /! -name CVS -exec cvs add ''{}'' /;

A continuación, agregue todos los archivos, excluyendo cualquier cosa en un directorio de CVS:

find . /( -type d -name CVS -prune /) -o /( -type f -exec cvs add ''{}'' /; /)

Ahora, si alguien tiene una cura para la vergüenza de usar CVS en este día y edad ...


me gusta hacer (ya que el directorio necesita un complemento)

cvs status 2>/dev/null | awk ''{if ($1=="?")system("cvs add "$2)}''

Es posible que deba ejecutar esto varias veces (primero para el directorio y luego para sus hijos) hasta que no haya salida


Yo uso esto:

Primero agregue recursivamente todos los directorios menos los de CVS:

$> find . -type d /! -name CVS -exec cvs add ''{}'' /;

En segundo lugar, agregue todos los archivos, menos los directorios de CVS:

find . /( -type d -name CVS -prune /) -o /( -type f -exec cvs add ''{}'' /; /)

Tercero haz un "commit" recursivo como "primera versión" de comentario:

find . /( -type d -name CVS -prune /) -o /( -type f -exec cvs commit -m "first version" ''{}'' /; /)

Último etiquetado todo recursivamente:

find . /( -type d -name CVS -prune /) -o /( -type f -exec cvs tag -F MY_CVS_TAG ''{}'' /; /)


Primero agrega todos los directorios a CVS

find . -type d -print0| xargs -0 cvs add

A continuación, agregue todos los archivos en los directorios a CVS

find . -type f | grep -v CVS | xargs cvs add

Trabajó para mi



Esta respuesta de Mark fue útil (find. -type f -print0 | xargs -0 cvs add) pero resolví algunos problemas que ocurrieron cuando cvs add intentan agregar sus propios archivos como Tag, Entries, ect ..

  1. Agregue su carpeta de nivel más alto llamada NEW_FOLDER

cvs add NEW_FOLDER

  1. Utilice el comando anterior con alguna exclusión para agregar todas las sub-carpetas del árbol

encuentra NEW_FOLDER / -type d! -name "CVS" -y! -name "Tag" -y! -name "Entries.Log" -y! -name "Entradas" y! -name "Repositorio" -y! -name "Root" -print0 | xargs -0 cvs add

  1. Utilice el comando anterior con alguna exclusión para agregar todos los archivos

encuentra NEW_FOLDER / -type f! -name "CVS" -y! -name "Tag" -y! -name "Entries.Log" -y! -name "Entradas" y! -name "Repositorio" -y! -name "Root" -print0 | xargs -0 cvs add


La solución de Mark resuelve el problema de los espacios, pero produce este problema:

cvs add: no se puede abrir CVS / Entries para leer: No existe ningún archivo o directorio
cvs [agregar abortado]: sin repositorio

Para solucionarlo, el comando real para usar es:

find . -type f -exec cvs add {} /;