Cum se adaugă recursiv directoarele CVS

Am jucat cu CVS puțin și nu sunt cel mai familiarizat cu toate capabilitățile sale, dar o enervare imensă pentru mine încearcă să adauge noi directoare care conțin mai multe directoare în ele. Rularea " cvs add " adaugă doar conținutul directorului curent și " cvs import " nu pare a fi cel mai bun, m producătoare (acest import revendicat este pentru surse terță parte )

Știți voi vreun mod de a adăuga recursiv totul într-un anumit director la proiectul CVS curent (sau dacă SVN sau git fac acest lucru mult mai ușor)?

0
fr hi bn
da, ambele SVN și git sunt mai ușor de recursiv inclusiv directoare.
adăugat autor dokaspar, sursa

14 răspunsuri

Cred că asta am făcut în zilele mele CVS:

find . -type f | xargs cvs add
0
adăugat

Ah, spații. Aceasta va funcționa cu spații:

find . -type f -print0| xargs -0 cvs add
0
adăugat
De fapt, trebuie să vă asigurați că nu adăugați directoarele numite "CVS" la cvs, din anumite motive cvs uneori captează acest lucru, uneori nu. Rulați acest loc: găsiți. \! -name "CVS" - și \! -name "Entries" - și \! -name "Depozit" - și \! - nume "Root" -ty
adăugat autor Chris Bunch, sursa
Deși acest lucru este un început bun, este nevoie de o mulțime de excluderi pentru a fi pe deplin utilă.
adăugat autor awm, sursa

SVN face cu siguranță această sarcină trivială, folosindu-se o interfață grafică ca Tortoise este chiar mai ușoară.

This might be a good place to start: http://www-mrsrl.stanford.edu/~brian/cvstutorial/

0
adăugat

Mark's solution resolves the spaces issue, but produces this issue:

cvs add: cannot open CVS/Entries for reading: No such file or directory
cvs [add aborted]: no repository

Pentru ao remedia, comanda reală de utilizat este:

find . -type f -exec cvs add {} \;
0
adăugat

Mai întâi adăugați toate directoarele în CVS

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

Apoi adăugați toate fișierele din directoare către CVS

find . -type f -print0| xargs -0 cvs add
0
adăugat

cvs import is not just for 3rd-party sources. In fact, directories are not versioned by CVS, so they are not a subject to branch policies. As long as you import empty directories, it is fine.

0
adăugat

Note that you can only use cvs add on files and folders that are located inside an already checked out working copy, otherwise you will get the "Cannot open CVS/Entries for reading" message. A technique for creating a new "root module" using cvs add is explained in this WinCVS FAQ item: http://cvsgui.sourceforge.net/newfaq.htm#add_rootmodule

If you are on Windows, both TortoiseCVS and WinCVS support recursive addition (and optional commit) of multiple files in a single operation. In WinCvs look for the macro Add>Recursive Add (auto-commit)... In Tortoise use the Add Contents command on a directory. Both will allow you to select which files to add and what keyword expansion modes to use for them (mostly used for defining which files are binary).

For further info about recursive add in WinCvs look here: http://cvsgui.sourceforge.net/newfaq.htm#cvs-add_recursive


În afară de aceasta, cvs import este foarte potrivit pentru adăugările în masă. Cu toate acestea, modul cvs import este implementat în CVS de vanilie are două dezavantaje (deoarece a fost inițial scris pentru codul terță parte):

  • creează o ramificație obligatorie cu semantică specială.
  • nu creează metadatele repository (adică directoarele CVS ascunse) necesare pentru a stabili codul importat ca o copie de lucru check out, ceea ce înseamnă că pentru a lucra efectiv cu fișierele importate trebuie mai întâi să le verificați out of the repository

Dacă utilizați CVSNT, puteți evita ambele dezavantaje prin specificarea opțiunii -nC la import. -n este pentru a evita filiala "furnizor" și -C este pentru crearea directorilor CVS.

0
adăugat

Îmi place să fac (ca directorul trebuie să adăugați la)

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

este posibil să aveți nevoie să rulați acest lucru de mai multe ori (mai întâi pentru directori și apoi pentru copiii săi) până când nu există nicio ieșire

0
adăugat

Eu folosesc aceasta:

Mai întâi adăugați recursiv toate directoarele mai puțin cele CVS:

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

În al doilea rând, adăugați toate fișierele, mai puțin cele din directoarele CVS:

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

Al treilea face? recursiv cum ar fi "prima versiune" comentariu:

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

Ultima etichetare tot recursiv:

 find . \( -type d -name CVS -prune \) -o \( -type f -exec cvs tag -F MY_CVS_TAG '{}' \; \)
0
adăugat
Am folosit-o când a trebuit să încarc un proiect existent într-un depozit
adăugat autor manufosela, sursa
Comenzi foarte utile, dar în ce caz CVS se angajează recursiv este necesară deoarece "cvs commit" va comite toate fișierele?
adăugat autor Gagan, sursa
Pe Mac: găsiți. (-type d -name CVS -prune) -o (-type f! -name '.DS_Store' -exec cvs adauga '{}';;)
adăugat autor sgarbesi, sursa

Folosesc acest script simplu, care ar trebui să pornească de la un director CVS deja verificat. Se va încerca în mod stupid să adăugați / să comiteți orice fișiere și directoare pe care le găsește în căutarea recursivă, astfel încât în ​​cele din urmă ar trebui să ajungeți cu un copac complet de comitere.

Salvați acest lucru ca ceva de genul / usr / bin / cvsadd și nu uitați să 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"
0
adăugat

Mai întâi adăugați toate directoarele în CVS

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

Apoi adăugați toate fișierele din directoare către CVS

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

A lucrat pentru mine

0
adăugat
Nu exclude fișierele din dosarele CVS.
adăugat autor Jay Elston, sursa

Am constatat că acest lucru a funcționat destul de eficient:

Mai întâi, adăugați toate directoarele, dar nu orice denumit "CVS":

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

Apoi adăugați toate fișierele, excluzând orice dintr-un director CVS:

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

Acum, dacă cineva are un remediu pentru jena de a folosi CVS în această zi și de vârstă ...

0
adăugat
Am folosit-o pe o ierarhie de directoare cu sute de directoare și mii de fișiere, am lucrat ca un farmec. Mulțumiri!
adăugat autor Igor Oks, sursa
cvs este ușor de utilizat pentru o simplă ușoară sau un control de sursă "de rezervă" și de "partajare" de 1 sau 2 persoane
adăugat autor awm, sursa

Metodele deja discutate vor face o căutare recursivă, dar va eșua dacă efectuați din nou aceeași acțiune (dacă doriți să adăugați un substrat copacului existent) Din acest motiv, trebuie să verificați dacă directoarele dvs. nu au fost încă adăugate și apoi să adăugați numai fișierele care nu au fost încă adăugate. Pentru a face acest lucru, folosim rezultatul cvs up pentru a vedea care elemente nu au fost încă adăugate - va avea semnul de întrebare la începutul liniei.

Folosim opțiunile -0 , -print0 și -zZ pentru a ne asigura că procesăm corect spațiile în nume de fișiere. De asemenea, folosim - no-run-if-empty pentru a evita rularea dacă nu trebuie adăugat nimic.

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'

Prin această abordare vom evita astfel de erori:

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

și

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

Acest răspuns de la Mark a fost util (găsiți -type f -print0 | xargs -0 cvs add), dar am rezolvat o problemă care a apărut atunci când cvs adăugați încercați să adăugați propriile fișiere ca Tag, Entries, etc.

  1. Adăugați folderul cel mai înalt nivel numit NEW_FOLDER
cvs add NEW_FOLDER
  1. Utilizați comanda anterioară cu o anumită excludere pentru a adăuga copacul tuturor sub-folderelor

găsiți NEW_FOLDER / -type d! - numele "CVS" - și! - nume "Tag" - și! - nume "Entries.Log" - și! - nume "intrări" - și! - nume "Depozit" - și! - nume "Root" -print0 | xargs -0 cvs adăugați

  1. Utilizați comanda anterioară cu o anumită excludere pentru a adăuga toate fișierele

găsiți NEW_FOLDER / -type f! - numele "CVS" - și! - nume "Tag" - și! - nume "Entries.Log" - și! - nume "intrări" - și! - nume "Depozit" - și! - nume "Root" -print0 | xargs -0 cvs adăugați

0
adăugat