Tüm svn: externals'i özyinelemeli listele?


94

Bir dizindeki tüm svn: externals (yinelemeli) listesini nasıl alabilirim? Bunun için herhangi bir yardımcı program var mı?

(Windows (ve kaplumbağa) kullanıyorum)

Bir sürü svn: projemin farklı paylaşılan bölümlerine bağlanan harici öğelerim var ve ben dallara ayrıldığımda, genellikle tüm dışsalları bulmak ve onları yeni daldaki yollara bağlantı olacak şekilde değiştirmek hataya meyilliyim.


Yanıtlar:


147

Çalışan kopyanızın kök dizininde aşağıdakileri yapın:

svn propget svn:externals -R

Aşağıdaki yorumlarda tartışıldığı gibi, bu, harici olarak harici olanları listelemez.

TortoiseSVN kullanıcıları için not: TortoiseSVN yükleyicide SVN komut satırı istemcisini de yüklemek için bir seçenek vardır. Bu seçenek varsayılan olarak etkin değildir.


bu sadece bana tüm harici aygıtların ve bunların nereye işaret ettiklerinin bir listesini verir .. ama dışın 'konumunu' değil .. yani, eğer harici olarak lib \ my_ex'e sahipsem, yalnızca my_ex http: / svnlinkhere
ShoeLace

4
@ShoeLace: 1.6.1 çıktı çünkü eski bir SVN ile çalışıyor olmalılar yapar bu bilgileri içerir.
Wim Coenen

1
Üzgünüm, çünkü a) bu tüm hariciların çıktısını almayacak ; fx, eğer klasörümüzün dışındaysa ve bu klasörün içinde bir yerde harici bir yer varsa - bu görünmeyecek b) soru kaplumbağa svn olarak etiketlenmiş, ancak cevap komut satırı istemcisiyle ilgili
pmod

2
@pmod: a) Bunu bilmiyordum ama benim açımdan bir hatadan ziyade bir SVN hatası gibi görünüyor. b) TortoiseSVN 1.7 yükleyicisi komut satırı istemcisini içerir !
Wim Coenen

1
Özyinelemeli, komutu çağırdığınız çalışma kopyanın klasör yapısıyla ilgilidir. Dışların içine yerleştirilmiş dışsallarla ilgili değildir. Bu yüzden bunun bir hata olduğunu düşünmüyorum. Aksi takdirde bu işlem süre açısından daha da kullanılamaz hale gelecektir.
Frank

15

Tüm bu harici özellikleri manuel olarak değiştirmek sıkıcı geliyor. Subversion 1.5'te eklenen harici özellikler için yeni işlevselliğe baktınız mı ?

Subversion 1.5, bu hayal kırıklıklarını gidermek için büyük bir adım atıyor. Daha önce belirtildiği gibi, yeni harici tanımlama biçiminde kullanılan URL'ler göreli olabilir ve Subversion, URL göreliliğinin birden çok çeşidini belirtmek için sözdizimi sihri sağlar.

../

    Svn: externals özelliğinin ayarlandığı dizinin URL'sine göre

^ /

    Svn: externals özelliğinin sürümlendirildiği deponun köküne göre

//

    Svn: externals özelliğinin ayarlandığı dizinin URL'sinin şemasına göre

/

    Svn: externals özelliğinin sürümlendirildiği sunucunun kök URL'sine göre

Belki bunlardan biri yardımcı olur? Sanırım tam olarak nasıl dallara ayrıldığınıza ve depo yapınızın nasıl göründüğüne bağlı.


9

TortoiseSVN için çözümüm:

SVN içerik menüsünden "Dal / etiket ..." iletişim kutusunu açın. Alttaki iletişim kutusu, iç içe geçmişler dahil tüm harici öğeleri gösterir.


Görünüşe göre TortoiseSVN, svn: externals içindeki svn: externals'ı yinelemeli olarak aramıyor, bu yüzden yapmakla aynı şey svn propget svn:externals -R.
paulie4

0

Belki, geçici bir çözüm olarak, projenizi tüm harici öğeler aynı klasörde, örneğin Trunk'un hemen altındaki proje klasöründe olacak şekilde yapılandırabilirsiniz. (Bu, tüm harici klasörlerin bu arada aynı derinlikte olması gerektiği anlamına gelmez.) Ardından proje klasörünüze sağ tıklayıp ardından Özellikler ..., ardından Subversion sekmesine, ardından Özellikler ... ardından svn: externals'a çift tıklayın.


0

Wim Coenen'in cevabını kullandım ve tüm revizyonların bir listesini oluşturmak için aşağıdaki komut dosyasını yazdım:

getSvnRevs() {
  cd "$1"
  wcver="$(svnversion)"
  [ -n "$wcver" ] || panic "Unable to get version for $wcdir"
  echo "$1: $wcver"
  svn propget svn:externals -R | while read a b c d e; do
    [ -n "$a" ] || continue
    if [ "$b" = "-" ]; then
      wcparent="$a"
      wcdir="$wcparent/$c"
      [ -z "$e" ] || panic "Invalid format #1"
    else
      [ -n "$wcparent" ] || panic "Invalid format #2"
      wcdir="$wcparent/$a"
      [ -z "$c" ] || panic "Invalid format #3"
    fi
    [ -d "$wcdir" ] || panic "Invalid directory: $wcdir"
    wcver="$(svnversion "$wcdir")"
    [ -n "$wcver" ] || panic "Unable to get version for $wcdir"
    echo "$1/$wcdir: $wcver"
  done
}

Neyse ki, iç içe geçmiş harici cihazım yok, bu yüzden bunu test etmem gerekmedi ve sanırım işe yaramayacak. Ancak buna ihtiyacınız varsa, muhtemelen bu işlevi yinelemeli olarak çağırmanız yeterlidir. Ayrıca, kaçması gereken dosya adlarını hiç test etmedim. O zaman muhtemelen işe yaramayacak.

SORUMLULUK REDDİ: Orijinal sorunun pencerelerle ilgili olduğunu biliyorum ve cygwin veya benzeri bir şey kullanmadığınız sürece kabuk betiği orada çalışmayacaktır.


0

Çektiğim Daniel kızılağaç yanıtını , svnversion aramalar kaldırıldı ve özyinelemeli yapılan (NOT: read a b c d ekaynak veya hedef ya bir boşluk var does not iş ise). Bu bir bash betiğidir, bu yüzden ya Cygwin gibi bir şeye ihtiyacınız olacak ya da Linux için Windows Alt Sistemini kullanacaksınız .

getSvnExternals() {
  svnbase="$1"
  svnpath="$2"
  svn propget svn:externals -R "$svnbase/$svnpath" 2> /dev/null | while read a b c d e; do
    [ -n "$a" ] || continue
    if [ "$b" = "-" ]; then
      wcparent="$a"
      external="$c"
      wcdir=$(echo "$wcparent/$d" | sed s#^./##)
      [ -z "$e" ] || echo "WARNING: Invalid format #1. line='$a $b $c $d $e'"
    else
      [ -n "$wcparent" ] || echo "WARNING: Invalid format #2. wcparent=$wcparent"
      external="$a"
      wcdir=$(echo "$wcparent/$b" | sed s#^./##)
      [ -z "$c" ] || echo "WARNING: Invalid format #3. line='$a $b $c $d $e'"
    fi
    echo "$1/$wcdir: $external"
    ## recurse into external directory
    [ -d "$wcdir" ] && getSvnExternals "$1/$wcdir"
  done
}
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.