Subversion yönetilen dosya adlarında @ karakterlerinden nasıl çıkılır?


191

Birçok Subversion işlemi için, bir dosyanın veya URL bağımsız değişkeninin sonuna '@' sembolü eklemek, o dosyanın belirli bir düzeltmesini hedeflemenize olanak tanır. Örneğin, "svn info test.txt@1234", 1234 numaralı düzeltmede var olduğu gibi test.txt hakkında bilgi verecektir.

Ancak, dosya adı bir @ içeriyorsa, Subversion tarafından bir düzeltme belirteci olarak yanlış yorumlanır:

svn info 'test @ .txt' svn: Sözdizimi hatası '.txt' ayrıştırma hatası

'/', '\' Ve '@' ile kaçmanın yanı sıra çift ve tek tırnak denedim. Subversion'a @ sembollerini dosya adının bir parçası olarak ele almasını nasıl söyleyebilirim?


3
Neden yeryüzünde @ ile dosya isimleriniz var? Sorun sorarsan, bana sorarsan ... :-)
JesperE

Çok güzel bir soru! :) Bu karakterin dosya adlandırma kurallarının temel bir bileşeni olduğu bir projeyi ele alıyorum ve maalesef bu yakın gelecekte değiştirilemez.
weston

57
Apple, bu sözleşmeyi iOS 4+'den itibaren tüm iOS geliştiricileri için oluşturdu. Tüm varlıkların yüksek çözünürlüklü görüntüleme için olması durumunda @ 2x olarak adlandırılmalıdır ...
Dimitris

2
Getto eski stil Matlab OO için standart
Chinasaur

Ayrıca, özel anahtarınızı veya iptal anahtarınızı Thunderbird'ün Enigmail'inden kaydederseniz, bir dosya adı oluşturur - makul olmayan bir şekilde, uygulama göz önüne alındığında - bir işaret içeren
Peter Flynn

Yanıtlar:


283

Gönderen SVN kitabında (vurgu eklenmiştir):

Algılayıcı okuyucu muhtemelen bu noktada, peg revizyon sözdiziminin, gerçekten de işaretlerinde bulunan çalışma yolları veya URL'leri için sorunlara neden olup olmadığını merak ediyor. Ne de olsa svn , ağacımdakinews@11 bir dizinin adının mı yoksa “ haberlerin 11 revizyonu” nun sözdiziminin mi olduğunu nasıl bilebilir ? Neyse ki, svn her zaman ikincisini varsayarken, önemsiz bir geçici çözüm var. Sadece yolun sonuna kadar işaretini bir ekleme gerek gibi news@11@. dosyaadı @ adlı bir dosya hakkında konuşmak için .svn, yalnızca argümandaki son işaretle ilgilenir ve işaretten sonra bir sabit peg revizyon belirtecini atlamak yasadışı sayılmaz. Bu geçici çözüm bir oturum açma işareti ile biten yollar için bile geçerlidir;filename@@


4
"Svn diff" kullanmak için revizyon parametresi eklemeniz gerektiğini unutmayın. "svn up @ file @" çalışıyor, ancak "svn diff @ file @" çalışmıyor. "Svn diff -r HEAD @ file @" kullanmanız gerekir
analytik

SVN kitabı için not: dosyalar Windows'ta bile uzantılar olmadan var news@11olabilir , bu nedenle bir dosya da olabilir.
trysis

1
Yeniden adlandırma gibi bazı komutlar için bağımsız değişkenin sürümlenmiş bir öğe veya yerel bir dosya adı olabileceğini unutmayın. Yeniden adlandırma durumunda, hedef ayrıca sabitlenmiş bir düzeltme için taranır, ancak daha sonra düz bir ad olarak değerlendirilebilir. Örneğin, yeniden adlandırmak istediğiniz takdirde @fooüzere @bar, svn rename @foo@ @barhakkında şikayet edecek @bar; ancak bunu yaparsanız svn rename @foo@ @bar@, yeni ad tam anlamıyla olacaktır @bar@. Bunu önlemek için, eklemek ./(veya .\ pencerelerde) bunun bir yerel yol olduğunu temizlemek yapmak: svn rename @foo@ ./@bar.
Zastai

82

Orijinal cevap doğrudur, ancak belki de yeterince açık değildir. Belirli unix komut satırı seçenekleri aşağıdaki gibidir:

svn info 'image@2x.png@'

veya

svn info "image@2x.png@"

veya

svn info image\@2x.png\@

Sadece üçünü de test ettim.


4
Ayrıca test ettim svn info icon@2x.png@ve işe yaradı. Evet, alıntı veya eğik çizgi yok!
Nate

Alıntı yapma zorunluluğu kabuğunuza bağlıdır - KSH kullanıyorum ve tırnaklara ihtiyacınız var ('@' arka planda işlemin yapılmasını istediğiniz bir işaret olduğu için). Kabuğa bağlı olarak YMMV.
David H

Evet. Benim kilometre bashkarayolunda oldu :)
Nate

1
@Nate Şimdi başarısız yapamam - ksh tırnak işaretleri olmadan iyi çalışıyor. Neden onlara ihtiyacım olduğunu düşündüğümü bilmiyorum - belki başka bir sorun - 2 yıl önce bunu gönderdim ...
David H

14

Farklı alt klasörlere birden çok dosya ekleme çözümü:

for file in $(find ./ -type f -name "*@*.png"); do svn add $file@; done

" @ .Png" içindeki "png" yi eklemek istediğiniz dosya türüyle değiştirmeniz yeterlidir.


dosya adlarınızı alıntıladığınızdan veya kaçtığınızdan emin olun (ve büyük / küçük harf duyarsız eşleme yapın). ayrıca tedavi dosyalarına gerek yoktur @özel bir durum olarak kendi adlarına, güvenle ekleyebilirsiniz @tüm dosya adları üzerine sembolü: for file in $(find ./ -type f -iname "*.png"); do svn add "$file@"; done. Ayrıca, bu yaklaşım, çalışma yerel kopyayla tutarsız bir dosya / dizin yapısı ile svn repo bırakmıyor mu?
ardnew

execfind kullanarak find . -type f -name "*@*.png" -exec svn add {}@ \;
hevesli

11

aşağıdaki dosyayı eklemek için: image@2x.png aşağıdakileri yapın: svn add image \ @ 2x.png @


11

Basitçe ekleyin

@

SVN komutu ne olursa olsun, kullanmanız gereken dosyanın başında, örneğin:

file@2x.jpg

için

file@2x.jpg@

8

Benim durumumda, @ işareti içeren bir SVN deposundan dosyaları kaldırmam gerekiyordu:

Bu işe yaramaz:

svn remove 'src/assets/images/hi_res/locales-usa@2x.png'

Ancak bu:

svn remove 'src/assets/images/hi_res/locales-usa@2x.png@'

6

Birden fazla dosya eklemek için alternatif bir çözüm var:

svn status | grep \.png | awk '{print $2"@"}'| xargs svn add

Lütfen cevabınızı açıklayınız.
Hemang

3
svn status | awk '/\.png/ {print $2"@"}'| xargs svn add
Grep

1

"Move" gibi 2 bağımsız değişkeni olan svn komutları için "@" parametresini yalnızca sol (ilk) parametreye eklemelisiniz . Örneğin:

$ svn add README@txt@
A         README@txt

$ svn move README@txt@ README2@txt
A         README2@txt
D         README@txt


$ svn status
A       README2@txt

$ svn commit -m "blah"
Adding         README2@txt
Transmitting file data .
Committed revision 168.

$ svn delete README2@txt@
D         README2@txt

$ svn commit -m "blahblah"
*Deleting       README2@txt

Committed revision 169.

Bu satır önemlidir: $ svn move README @ txt @ README2 @ txt

Gördüğünüz gibi, "README2 @ txt" ye "@" eklememiz gerekmiyor


0

@David H

@ Sembollerinden kaçmadan benzer bir komut denedim ve hala iyi çalışıyor

svn ci splash.png splash@2x.png@

Bu GNU bash, sürüm 3.2.48 (1) -release (x86_64-apple-darwin10.0) ve svn 1.6.16


0

Benim için çalışan tek çözüm @NPike tarafından önerilenle aynı

svn 'yolu / / dosyaadı @ ext @' 'a geri döndür


Bunun orijinal soruya yeni bir yanıt olması gerektiğinden emin misiniz ? Bu bir yukarı oy veya yorum olmalı
Nico Haase

üzgünüm, benim kötü, henüz yorum ekleyemiyorum
Jonyx4

0

Bugün e-posta adreslerinden oluşturulan dosya adları ile sorunum vardı (çok iyi bir fikir değil!).

Çözüm, printfseçeneklerini kullanma findve kabuk genişletme

 svn add  $(find . -name "*@*.png" -printf "%p@ ")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.