Yalnızca belirli dosyaların bir listesini işlemenin herhangi bir yolu var mı (eq, SVN'nin taahhüt etmek istediği dosya listelerinden sadece biri).
Herhangi bir kullanıcı arayüzü olmadan Terminal altında MAC OS X üzerinde çalışıyorum.
Yalnızca belirli dosyaların bir listesini işlemenin herhangi bir yolu var mı (eq, SVN'nin taahhüt etmek istediği dosya listelerinden sadece biri).
Herhangi bir kullanıcı arayüzü olmadan Terminal altında MAC OS X üzerinde çalışıyorum.
Yanıtlar:
Elbette. Sadece dosyaları listeleyin:
$ svn ci -m "Fixed all those horrible crashes" foo bar baz graphics/logo.png
Belirli bir dosya kümesini yoksaymasını söylemenin bir yolunun farkında değilim. Tabii ki, taahhüt etmek istediğiniz dosyalar kabuk tarafından kolayca listeleniyorsa, bunu kullanabilirsiniz:
$ svn ci -m "No longer sets printer on fire" printer-driver/*.c
Svn komutunun bir dosyadan işlem yapmak için dosya listesini okumasını da sağlayabilirsiniz:
$ svn ci -m "Now works" --targets fix4711.txt
svn add
depolara dosya eklemek için kullanılır.
Değişiklikler kullanın. Dosya belirtmenin avantajı, taahhütte bulunmadan önce istediğiniz her şeyi görselleştirip onaylayabilmenizdir.
$ svn changelist fix-issue-237 foo.c
Path 'foo.c' is now a member of changelist 'fix-issue-237'.
Bu yapıldı, svn artık işleri sizin için ayrı tutuyor. Bu, birden fazla değişikliğe hokkabazlık yaptığınızda yardımcı olur
$ svn status
A bar.c
A baz.c
--- Changelist 'fix-issue-237':
A foo.c
Son olarak, değişmesini istediğiniz şeyi yapmasını söyleyin.
$ svn commit --changelist fix-issue-237 -m "Issue 237"
svn changelist fix-issue-237 --recursive path/to/directory
Temel olarak işlemek istediğiniz dosyaları komut satırına
svn ci file1 file2 dir1/file3
Yıkım durumum yüzünden yaratıcı olmak zorunda kaldım. svn st
gösterdi M
, A
ve ~
durumlar. Sadece istedim M
ve A
bu yüzden ...
svn st | grep ^[A\|M] | cut -d' ' -f8- > targets.txt
Bu komut bütün hatlar çıkış bulmak diyor svn st
o başlangıcında M
veya A
daha sonra sona colums 8 olsun, kesme uzay ayırıcı kullanılarak,. Bunu targets.txt dosyasına dökün ve üzerine yazın.
Daha sonra dosya listesini daha da ayarlamak için targets.txt dosyasını değiştirin. Ardından, taahhütte bulunmak için aşağıda çalıştırın:
svn ci -m "My commit message" --targets targets.txt
Muhtemelen en yaygın kullanım durumu değil, ama umarım birine yardımcı olur.
grep -v '^~'
kara listeye almak için de kullanabilirsiniz .
Çözme ve Wienczny tarafından gösterildiği gibi dosyaları açıkça listelemenin yanı sıra , değişiklik listelerini ayarlayabilir ve bunları kontrol edebilirsiniz. Bunlar, aynı çalışan kopyadaki ayrık değişiklik kümelerini yönetmenize olanak tanır.
Bunları mükemmel SVN kitabının çevrimiçi sürümünde okuyabilirsiniz .
bu komut dosyasını deneyin ..
#!/bin/bash
NULL="_"
for f in `svn st|grep -v ^\?|sed s/.\ *//`;
do LIST="${LIST} $f $NULL on";
done
dialog --checklist "Select files to commit" 30 60 30 $LIST 2>/tmp/svnlist.txt
svn ci `cat /tmp/svnlist.txt|sed 's/"//g'`
Ben dosyayı taşımak, "gizlemek" adlı bir (alt) klasör oluşturun yok orada taahhüt istiyoruz. Sonra eksik dosya hakkında şikayet yoksay, benim taahhüt yapmak. Ardından gizli dosyayı gizlemeden tekrar ./ klasörüne taşıyın.
Bu taktiğin bir dezavantajı olmadığını biliyorum.