Acabo de comenzar a usar SVN, y tengo un directorio de caché que no necesito bajo control de fuente. ¿Cómo puedo ignorar todo el directorio / carpeta con SVN?
Estoy usando Versions y TextMate en OS X y línea de comandos.
Acabo de comenzar a usar SVN, y tengo un directorio de caché que no necesito bajo control de fuente. ¿Cómo puedo ignorar todo el directorio / carpeta con SVN?
Estoy usando Versions y TextMate en OS X y línea de comandos.
Respuestas:
Establezca la svn:ignore
propiedad del directorio principal:
svn propset svn:ignore dirname .
Si tiene que ignorar varias cosas, sepárelas con nuevas líneas en el valor de la propiedad. En ese caso, es más fácil editar el valor de la propiedad utilizando un editor externo:
svn propedit svn:ignore .
svn rm --keep-local dirname
primero. (Mi producción de estadísticas de svn fue enorme y me topé con esto por un tiempo).
svn propset svn:ignore -F file.txt .
svn:ignore
y no svn::ignore
como yo lo hice. Puede establecer propiedades arbitrarias, por lo que esta última se establecerá en Aceptar, y podrá ver y editar la propiedad, pero no hará que SVN ignore los archivos que enumera.
Aquí hay una estructura de directorio de ejemplo:
\project
\source
\cache
\other
Cuando project
vea que su directorio de caché no se agrega y aparece como tal.
> svn st
M source
? cache
Para establecer la propiedad ignorar, haga
svn propset svn: ignora el caché.
donde svn:ignore
está el nombre de la propiedad que está configurando, cache
el valor de la propiedad y .
el directorio en el que está configurando esta propiedad. Debe ser el directorio principal del cache
directorio que necesita la propiedad.
Para verificar qué propiedades están configuradas:
> svn proplist
Properties on '.':
svn:ignore
Para ver el valor de svn:ignore
:
> svn propget svn:ignore
cache
Para eliminar propiedades establecidas previamente:
svn propdel svn:ignore
dirname
. Por ejemplo, al escribir svn propset svn:ignore dirname
, si permite que el shell (bash) complete el nombre del directorio por usted, agregará esa barra diagonal final, dejándolo con el comando svn propset svn:ignore dirname/
, que no da como resultado que se ignore la carpeta. Al menos esa fue mi experiencia.
Importante mencionar:
En la línea de comando no puedes usar
svn add *
Esto también agregará los archivos ignorados, porque la línea de comando se expande *
y, por lo tanto, svn add
cree que desea que se agreguen todos los archivos. Por lo tanto, use esto en su lugar:
svn add --force .
svn add --force *
NO funcionará. Usa el punto, no la estrella.
Como pasé un tiempo tratando de hacer que esto funcione, debe tenerse en cuenta que si los archivos ya existen en SVN, los necesita svn delete
y luego edita la svn:ignore
propiedad.
Sé que parece obvio, pero siguieron apareciendo como ?
en mi svn status
lista, cuando pensé que simplemente los ignoraría localmente.
Para expandir ligeramente, si está haciendo esto con la herramienta de línea de comandos svn, desea escribir:
svn propedit svn:ignore path/to/dir
que abrirá el editor de texto de su elección, luego escriba '*' para ignorar todo lo que contiene y guardar + salir: esto incluirá el directorio en sí en svn, pero ignorará todos los archivos que contiene, para ignorar el directorio, use el ruta del padre y luego escriba el nombre del directorio en el archivo. Después de guardar, ejecute una actualización ('svn up') y luego verifique la ruta correspondiente.
Establezca la svn:ignore
propiedad en el directorio principal:
$ cd parentdir
$ svn ps svn:ignore . 'cachedir'
Esto sobrescribirá cualquier valor actual de svn:ignore
. Puede editar el valor con:
$ svn pe svn:ignore .
Lo cual abrirá tu editor. Puede agregar múltiples patrones, uno por línea.
Puede ver el valor actual con:
$ svn pg svn:ignore .
Si está utilizando una GUI, debe haber una opción de menú para hacerlo.
svn ps svn:ignore . 'cachedir'
resultados en cachedir is not under version control
. cambiando a svn ps svn:ignore 'cachedir' .
trabajado para mí
Gracias por todas las contribuciones anteriores. Solo me gustaría compartir información adicional de mis experiencias al ignorar los archivos.
Cuando las carpetas ya están bajo control de revisión
Después de svn import y svn co los archivos, lo que solemos hacer por primera vez.
Todo el caché de tiempo de ejecución, las carpetas de archivos adjuntos estarán bajo control de versión. entonces, antes de svn ps svn: ignore , necesitamos eliminarlo del repositorio.
Con SVN versión 1.5 anterior podemos usar svn del --keep-local your_folder
, pero para una versión anterior, mi solución es:
.svn
carpeta oculta)Cuando necesitamos que se ignore más de una carpeta
svn:ignore
svn pe
necesitará editar el archivo de texto, y puede usar este comando si es necesario para configurar su editor de texto usando vi :
export SVN_EDITOR=vi
El archivo se ve simplemente así:
runtime
cache
attachments
assets
svn propset svn:ignore -F .ignorethesefiles .
, que usará el contenido del archivo. Me gusta mantenerlo cerca para que sepas lo que se ignora. Las ediciones requieren un conjunto de accesorios de seguimiento.
Si su directorio foo
ya está bajo control de versiones, elimínelo primero con:
svn rm --keep-local foo
svn propset svn:ignore foo .
... y si desea ignorar más de un directorio (digamos build/
temp/
y *.tmp
archivos), puede hacerlo en dos pasos (ignorando las propiedades de ignorar primero y editar (vea otras respuestas aquí) o puede escribir algo como
svn propset svn:ignore "build
temp
*.tmp" .
en la línea de comando.
Si está utilizando el cliente SVN particular TortoiseSVN , luego de confirmar, tiene la opción de hacer clic derecho en los elementos y seleccionar "Agregar a la lista de ignorados".
El comando para ignorar múltiples entradas es un poco complicado y requiere barras diagonales inversas.
svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .
Este comando ignorar todo lo nombrado cache
, tmp
, null
, y and_so_on
en el directorio actual.
svn propset svn:ignore -F .ignorethesefiles .
le permitirá usar un archivo. Y como se mencionó, siempre has sido propendido.
Tuve problemas para ignorar los directorios anidados; el directorio superior que quería ignorar no se mostraba con 'svn status' pero todos los subdirectos sí. Probablemente esto sea evidente para todos los demás, pero pensé en compartirlo:
EJEMPLO:
/maletero
/ trunk / cache
/ trunk / cache / subdir1
/ trunk / cache / subdir2
cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
"Gracias" svn por una forma tan horrible, falsa y difícil de ignorar los archivos.
Entonces escribí un script svn-ignore-all :
#!/bin/sh
# svn-ignore-all
# usage:
# 1. run svn status to see what is going on at each step
# 2. add or commit all files that you DO want to have in svn
# 3. remove any random files that you don't want to svn:ignore
# 4. run this script to svn:ignore everything marked '?' in output of `svn status`
svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
Además, para ignorar la lista específica de archivos / nombres de ruta, podemos usar esta variante svn-ignore . Supongo que svn-ignore-all debería ser realmente como xargs svn-ignore.
#!/bin/sh
# svn-ignore
# usage:
# svn-ignore file/to/ignore ...
for f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
Una cosa más: tiendo a contaminar mis pagos de svn con muchos archivos aleatorios. Cuando es hora de comprometerse, muevo esos archivos a un subdirectorio 'viejo' y le digo a svn que ignore 'viejo'.
Bash oneliner para ignoraciones múltiples:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
Si su directorio de proyecto se llama / Project, y su directorio de caché se llama / Project / Cache, entonces necesita establecer una propiedad de subversión en / Project. El nombre de la propiedad debe ser "svn: ignore" y el valor de la propiedad debe ser "Caché".
Consulte esta página en el manual de Subversion para obtener más información sobre las propiedades.
La respuesta de Jason hará el truco. Sin embargo, en lugar de establecer svn: ignore a "." en el directorio de caché, es posible que desee incluir "caché" en la propiedad svn: ignore del directorio principal , en caso de que el directorio de caché no siempre esté presente. Hago esto en varias carpetas "desechables".
PARA MANTENER LOS DIRECTORIOS QUE SVN IGNORARÁ:
svn delete --keep-local path / directory_to_keep / *
svn propset svn: ignora la ruta "*" / directorio_a_ mantenimiento
Si está utilizando una interfaz para SVN como TortoiseSVN, o algún tipo de integración IDE, también debería haber una opción de ignorar en el mismo menú que la operación de confirmación / agregar.
Observe sus barras diagonales también. Descubrí que incluir images/*
en mi archivo de configuración de ignorar no ignoraba ./images/
. Cuando corrí svn status -u
, todavía se notaba ? images
. Entonces, simplemente cambié la configuración de ignorar a solo images
, sin barras. Realicé una verificación de estado y eso lo borró.
Resuelto con Eclipse de la siguiente manera:
En primer lugar, sincronice su carpeta con el proyecto:
equipo -> sincronizar
En la siguiente vista, vista de equipo, puede ver todos los recursos que puede asignar al servidor SVN.
Por lo tanto, seleccione la carpeta de recursos del recurso que desea ignorar, y luego puede ignorarlo usando
equipo -> agregar a
svn:ignore
.
Después de eso, en la ventana de confirmación, seleccione la primera opción: "ignorar por nombre".
Por ejemplo, si quiero ignorar la carpeta de destino y sus recursos .class, sincronizaré y, en la vista de sincronización, seleccionaré la carpeta de destino. Después de eso, seleccionaré
equipo-> agregar
ay svn:ignore
luego confirmaré la primera opción en la ventana de confirmación.
Después de perder mucho tiempo buscando cómo hacer esta simple actividad, decidí publicar que no fue difícil encontrar una explicación decente.
Primero deje que la estructura de la muestra
$ svn st? proyecto / tronco / objetivo? proyecto / trunk / myfile.x
1 - primero configure el editor, en mycase vim export SVN_EDITOR = vim
2 - "svn propedit svn: ignore project / trunk /" abrirá un nuevo archivo y puede agregar sus archivos y subdirectorio en nuestro caso, escriba "target" guardar y cerrar el archivo y funciona
$ svn st? proyecto / trunk / myfile.x
Gracias.