I've dimainkan dengan CVS sedikit dan saya bukan yang paling akrab dengan semua kemampuannya, tetapi jengkel besar bagi saya adalah mencoba untuk menambahkan direktori baru yang mengandung lebih banyak direktori di dalamnya. Berjalan "cvs menambahkan
" hanya menambah isi dari direktori saat ini, dan menggunakan "cvs impor
" tidak't terlihat seperti hal yang benar, baik karena's masih semua kode I'm memproduksi (howto ini diklaim impor untuk sumber pihak ke-3)
Apakah kalian tahu cara rekursif menambahkan segala sesuatu dalam direktori tertentu untuk saat ini CVS proyek (atau jika SVN atau git membuat ini terutama lebih mudah)?
Saya menemukan ini bekerja cukup efektif:
Pertama, tambahkan semua direktori, tapi tidak ada yang bernama "riwayat HIDUP":
find . -type d \! -name CVS -exec cvs add '{}' \;
Kemudian tambahkan semua file, termasuk apa-apa dalam direktori CVS:
find . \( -type d -name CVS -prune \) -o \( -type f -exec cvs add '{}' \; \)
Sekarang, jika ada yang memiliki obat untuk malu menggunakan riwayat HIDUP di hari ini dan usia...
Saya menggunakan ini:
Pertama tambahkan semua direktori secara rekursif kurang riwayat HIDUP orang-orang:
$> cari . -type d \! -nama CVS -exec cvs tambahkan '{}' \;
Kedua tambahkan semua file, kurang orang-orang CVS direktori:
cari . \( -type d -nama CVS -prune \) -o \( -type f -exec cvs tambahkan '{}' \; \)
Ketiga jangan "melakukan" secara rekursif seperti "versi pertama" komentar:
cari . \( -type d -nama CVS -prune \) -o \( -type f -exec cvs commit-m "versi pertama" '{}' \; \)
Terakhir tagging semua secara rekursif:
cari . \( -type d -nama CVS -prune \) -o \( -type f -exec cvs tag -F MY_CVS_TAG '{}' \; \)
Ini jawaban dari Tanda itu berguna (menemukan . -type f -print0| xargs -0 cvs add) tapi saya memecahkan beberapa masalah yang terjadi ketika cvs tambahkan mencoba untuk menambahkan sendiri file seperti Tag, File, dll..
Tambahkan paling tinggi tingkat folder bernama NEW_FOLDER
cvs tambahkan NEW_FOLDER
Gunakan perintah sebelumnya dengan beberapa pengecualian untuk menambahkan semua sub-folder tree
menemukan NEW_FOLDER/ -type d ! -nama "riwayat HIDUP" -dan ! -nama "Tag" -dan ! -nama "Entri.Log" -dan ! -nama "Entri" -dan ! -nama "Repositori" -dan ! -nama "Root" -print0 | xargs -0 cvs tambahkan
menemukan NEW_FOLDER/ -type f ! -nama "riwayat HIDUP" -dan ! -nama "Tag" -dan ! -nama "Entri.Log" -dan ! -nama "Entri" -dan ! -nama "Repositori" -dan ! -nama "Root" -print0 | xargs -0 cvs tambahkan
Perhatikan bahwa anda hanya dapat menggunakan cvs add
pada file dan folder yang berada di dalam sudah memeriksa kerja copy, jika tidak, anda akan mendapatkan "Tidak bisa buka CVS/Entri untuk membaca" pesan. Teknik untuk menciptakan yang baru "akar modul" menggunakan cvs tambahkan
dijelaskan dalam Brackets FAQ item: http://cvsgui.sourceforge.net/newfaq.htm#add_rootmodule
Jika anda berada di Windows, baik TortoiseCVS dan adobe systems, dukungan rekursif penambahan (dan opsional komit) dari beberapa file dalam satu operasi. Dalam Brackets mencari makro Tambahkan>Rekursif Tambahkan (auto-commit)... Di kura-Kura menggunakan Add Isi perintah pada direktori. Keduanya akan memungkinkan anda untuk memilih file mana yang ingin ditambahkan dan apa kata kunci ekspansi mode digunakan untuk mereka (sebagian besar digunakan untuk mendefinisikan file biner).
Untuk info lebih lanjut tentang rekursif tambahkan di adobe systems, lihat di sini: http://cvsgui.sourceforge.net/newfaq.htm#cvs-add_recursive
Selain itu cvs impor
ini juga cocok untuk massa-penambahan. Namun, cara cvs impor
ini dilaksanakan di vanilla CVS memiliki dua kelemahan (karena sedang awalnya ditulis untuk pihak ketiga kode):
Jika anda menggunakan CVSNT anda dapat menghindari kelemahan kedua dengan menentukan nC
pilihan pada impor. -n
adalah untuk menghindari "vendor" cabang dan -C
adalah untuk menciptakan direktori CVS.
I'm menggunakan skrip shell sederhana, yang harus dimulai dari yang sudah check-out direktori CVS. Itu akan bodoh mencoba untuk menambahkan/melakukan setiap file dan direktori yang ditemukan pada pencarian rekursif, sehingga pada akhirnya anda harus berakhir dengan berkomitmen penuh pohon.
Hanya menyimpan ini sebagai sesuatu seperti /usr/bin/cvsadd
dan't lupa untuk chmod +x /usr/bin/cvsadd
.
#!/bin/sh # @(#) tambahkan file dan direktori secara rekursif untuk saat ini direktori CVS # (c) 2009 oleh Dirk Jagdmannif [ -z "$1" ] ; kemudian echo "penggunaan: cvsadd 'impor pesan'," keluar 1 fi
jika [ -d "$2" ] ; kemudian cvs tambahkan "$2" cd "$2" || exit 1 fi
jika [ ! -d riwayat HIDUP ], kemudian echo "direktori saat ini kebutuhan untuk mengandung CVS/ direktori" keluar 1 fi
XARGS="xargs -0 -r -t -L 1"
pertama tambahkan semua file dalam direktori saat ini
menemukan . -maxdepth 1 -type f -print0 | $XARGS cvs tambahkan menemukan . -maxdepth 1 -type f -print0 | $XARGS cvs ci -m "$1"
kemudian tambahkan semua direktori
menemukan . -maxdepth 1 -type d -tidak -nama-CV -yang -tidak -nama . -print0 | $XARGS "$0" "$1"
Sudah dibahas metode-metode yang akan melakukan recursive lookup, tapi itu akan gagal jika anda melakukan tindakan yang sama lagi (jika anda ingin menambahkan sub untuk ada pohon)
Untuk alasan itu, anda perlu memeriksa bahwa direktori anda tidak menambahkan belum dan kemudian hanya menambahkan file yang tidak menambahkan belum. Untuk melakukan itu kita menggunakan output dari cvs up
untuk melihat unsur-unsur yang tidak ditambahkan belum - nya akan memiliki tanda tanya di awal baris.
Kami menggunakan opsi -0
, -print0
dan -zZ
untuk memastikan bahwa kita benar proses spasi pada nama file. Kita juga menggunakan --no-run-jika kosong
untuk menghindari jika ada yang perlu ditambahkan.
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'
Dengan pendekatan ini kita akan menghindari kesalahan tersebut:
cvs add: cannot add special file `.'; skipping
cvs [add aborted]: there is a version in ./dirname1 already
dan
cvs add: `./dirname2/filename' already exists, with version number 1.1.1.1
Mark's solusi mengatasi ruang masalah, tetapi menghasilkan masalah ini:
riwayat hidup menambahkan: tidak bisa buka CVS/Entri untuk membaca: Tidak ada berkas atau direktori
cvs [add dibatalkan]: tidak ada repositori
Untuk memperbaikinya, sebenarnya perintah yang digunakan adalah:
find . -type f -exec cvs add {} \;
yang saya ingin lakukan (sebagai direktori's perlu add)
cvs status 2>/dev/null | awk '{if ($1=="?")system("cvs add "$2)}'
anda mungkin perlu untuk menjalankan beberapa kali(pertama untuk direktori's maka untuk anak-anak) sampai tidak ada output
SVN pasti membuat ini tugas sepele, menggunakan GUI seperti kura-Kura bahkan lebih mudah, namun.
Ini mungkin menjadi tempat yang baik untuk memulai: http://www-mrsrl.stanford.edu/~brian/cvstutorial/