Como adicionar diretórios CVS de forma recursiva

votos
35

Eu tenho jogado com CVS um pouco e não sou o mais familiarizado com todas as suas capacidades, mas um grande aborrecimento para mim está tentando adicionar novos diretórios que contêm mais diretórios neles. Running cvs add só acrescenta o conteúdo do diretório atual, e usando cvs import não parecia a coisa certa, quer uma vez que ainda é tudo código que estou produzindo (este COMO FAZER alegou importação é para fontes de 3rd party )

Vocês sabem alguma maneira de adicionar recursivamente tudo em um determinado diretório para o projeto CVS atual (ou se SVN ou git isso faz notavelmente mais fácil)?

Publicado 07/08/2008 em 19:05
fonte usuário
Em outras línguas...                            


14 respostas

votos
69

Achei isso funcionou muito eficaz:

Primeiro, adicione todos os diretórios, mas não qualquer chamada "CVS":

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

Em seguida, adicione todos os arquivos, excluindo qualquer coisa em um diretório CVS:

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

Agora, se alguém tem uma cura para o constrangimento de usar o CVS neste dia e idade ...

Respondeu 01/03/2011 em 18:31
fonte usuário

votos
10

Ah, espaços. Isto irá funcionar com espaços:

find . -type f -print0| xargs -0 cvs add
Respondeu 07/08/2008 em 21:22
fonte usuário

votos
8

Eu uso isso:

Primeiro adicione recursivamente todos os diretórios menos os CVS:

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

Segundo adicionar todos os arquivos, menos aqueles que os diretórios CVS:

encontrar . \ (Do tipo d -name CVS -prune \) -o \ (do tipo cvs -exec F Adicionar '{}' \; \)

Terceiro não “cometer” recursivamente como comentário "primeira versão":

encontrar . \ (Do tipo d -name CVS -prune \) -o \ (do tipo f cvs -exec commit -m "primeira versão" '{}' \; \)

Última marcação tudo de forma recursiva:

encontrar . \ (-type d -nome CVS -prune \) -o \ (-type f -exec MY_CVS_TAG cvs tag -F '{}' \; \)
Respondeu 17/07/2014 em 09:21
fonte usuário

votos
5

Primeiro adicione todos os diretórios do CVS

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

Em seguida, adicione todos os arquivos nos diretórios para CVS

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

Trabalhou para mim

Respondeu 05/10/2010 em 09:46
fonte usuário

votos
2

Esta resposta de Mark foi útil (encontrar -type f -print0 |. Xargs -0 cvs add), mas eu resolvi algum problema que ocorreu quando os cvs add tentar adicionar seus próprios arquivos como Tag, entradas, ect ..

  1. Adicionar uma pasta chamada new_folder mais alto nível
cvs add new_folder
  1. Use o comando anterior com alguma exclusão adicionar todas as sub-pastas árvore

encontrar new_folder / -type d! -name -e "CVS"! -name -e "Tag"! -name "Entries.Log" -e! -name "Entradas" -e! -name -e "Repository"! -name "Root" -print0 | xargs -0 cvs add

  1. Use o comando anterior com alguma exclusão para adicionar todos os arquivos

encontrar new_folder / -type f! -name -e "CVS"! -name -e "Tag"! -name "Entries.Log" -e! -name "Entradas" -e! -name -e "Repository"! -name "Root" -print0 | xargs -0 cvs add

Respondeu 07/06/2016 em 09:29
fonte usuário

votos
2

Note que você só pode usar cvs addem arquivos e pastas que estão localizados dentro de um já check-out cópia de trabalho, caso contrário, você vai ter a "não pode abrir CVS / Entries para a leitura" mensagem. Uma técnica para a criação de um novo "módulo de raiz" usando cvs addé explicado neste WinCvs item de FAQ: http://cvsgui.sourceforge.net/newfaq.htm#add_rootmodule

Se você estiver no Windows, ambos TortoiseCVS e WinCVS apoiar disso recursiva (e cometer opcional) de vários arquivos em uma única operação. Em WinCvs olhar para o suplemento macro> Add recursiva (auto-commit) ... Em Tortoise usar o comando Adicionar conteúdo em um diretório. Ambos irão permitir que você selecione quais arquivos para adicionar e quais modos de expansão de palavra-chave para usar para eles (usado principalmente para definir quais arquivos são binários).

Para mais informações sobre add recursiva em WinCvs veja aqui: http://cvsgui.sourceforge.net/newfaq.htm#cvs-add_recursive


Para além de que cvs importé bem adequado para mass-adições. No entanto, a forma como cvs importé implementado em CVS baunilha tem duas desvantagens (porque ele foi originalmente escrito para código de terceiros):

  • ele cria um ramo obrigatória com a semântica especiais.
  • ele não cria os meta-dados do repositório (ou seja, os diretórios CVS ocultos) necessários para estabelecer o código importado como uma cópia de trabalho, o que significa que, a fim de realmente trabalhar com os arquivos importados primeiro você tem que verificá-las para fora do repositório

Se você estiver usando CVSNT você pode evitar os dois inconvenientes, especificando a -nCopção de importação. -né para evitar o ramo "vendor" e -Cé para criar os diretórios CVS.

Respondeu 06/11/2008 em 11:38
fonte usuário

votos
2

cvs importnão é apenas para fontes de 3rd-party. Na verdade, os diretórios não são versionadas pelo CVS, para que eles não são um assunto para as políticas do poder. Contanto que você importar diretórios vazios, é bom.

Respondeu 29/08/2008 em 22:28
fonte usuário

votos
1

Métodos já discutidos fará pesquisa recursiva, mas ele irá falhar se você executar mesma ação novamente (se você quiser adicionar subárvore em árvore existia) Por esse motivo, você precisa verificar que seus diretórios ainda não foi adicionado e em seguida, adicione apenas os arquivos que não ainda adicionado. Para fazer isso, usamos a saída de cvs upver quais os elementos que ainda não foi adicionado - o seu terá ponto de interrogação no início da linha.

Usamos opções -0, -print0e -zZpara ter certeza que nós processar corretamente espaços em nomes de arquivos. Também usando --no-run-if-emptypara evitar prazo, se nada precisa ser adicionado.

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'

Com esta abordagem, vamos evitar esses erros:

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

e

cvs add: `./dirname2/filename' already exists, with version number 1.1.1.1
Respondeu 03/07/2014 em 08:58
fonte usuário

votos
1

Eu estou usando esse script shell simples, que deve ser iniciado a partir de um diretório CVS já fez-out. Ele vai estupidamente tentar adicionar / comprometer todos os arquivos e diretórios que encontra em cima de sua pesquisa recursiva, para que no final você deve acabar com uma árvore comprometer totalmente.

Basta salvar isso como algo parecido /usr/bin/cvsadde não se esqueça de chmod +x /usr/bin/cvsadd.

#! / Bin / sh
# @ (#) Adicionar arquivos e diretórios de forma recursiva para o diretório CVS atual
# (C) 2009 por Dirk Jagdmann 

if [-z "$ 1"]; então
    echo "uso: cvsadd 'mensagem de importação"
    exit 1
fi

se [-d "$ 2"]; então
    cvs add "$ 2"
    cd "$ 2" || exit 1
fi

E se [ ! -d CVS]; então
    echo "diretório atual precisa conter um CVS / diretório"
    exit 1
fi

Xargs = "xargs -0 -r -t -L 1"

# Primeiro adicionar todos os arquivos no diretório atual
encontrar . -maxdepth 1 do tipo f -print0 | $ Xargs cvs add
encontrar . -maxdepth 1 do tipo f -print0 | $ Xargs cvs ci -m "$ 1"

# Seguida, adicione todos os diretórios
encontrar . -maxdepth 1 -type d -não -nome CVS -a -não -nome. -print0 | $ Xargs "$ 0" "$ 1"
Respondeu 30/12/2009 em 12:39
fonte usuário

votos
1

Primeiro adicione todos os diretórios do CVS

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

Em seguida, adicione todos os arquivos nos diretórios para CVS

find . -type f -print0| xargs -0 cvs add
Respondeu 29/08/2008 em 19:06
fonte usuário

votos
1

Acho que isso é o que eu fiz nos meus dias de CVS:

find . -type f | xargs cvs add
Respondeu 07/08/2008 em 19:25
fonte usuário

votos
0

eu gosto de fazer (como a necessidade do diretório um add to)

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

talvez seja necessário executar isso várias vezes (primeiro para o diretório de seguida, para seus filhos) até que não haja saída

Respondeu 18/07/2013 em 11:20
fonte usuário

votos
0

A solução de Mark resolve o problema espaços, mas produz esse problema:

cvs add: não pode abrir CVS / Entradas para leitura: Nenhum tal lima ou diretório
cvs [adicionar abortado]: no repositório

Para corrigi-lo, o comando real de usar é:

find . -type f -exec cvs add {} \;
Respondeu 07/08/2008 em 22:18
fonte usuário

votos
0

SVN definitivamente faz esta tarefa trivial, usando uma GUI como Tortoise é ainda mais fácil, no entanto.

Isso pode ser um bom lugar para começar: http://www-mrsrl.stanford.edu/~brian/cvstutorial/

Respondeu 07/08/2008 em 19:08
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more