2009-07-16 13 views
27

Z właściwością svn: ignore, czy jest sposób, w jaki mogę określić, co chcę zignorować na podstawie wzorców, których nie chcę ignorować? Innymi słowy, chcę zignorować wszystko, co , ale pliki kończące się na .xyz. Jak mam to zrobić (jeśli to możliwe)?Użycie svn: ignore do zignorowania wszystkiego poza pewnymi plikami

Jedną z opcji, którą zbadałem, jest zatwierdzenie wszystkiego, co chcę, aby uzyskać wersję, a następnie ustawienie właściwości svn: ignore w katalogu na "*", co oznacza, że ​​żadne inne pliki, ale to, co już popełniłem, będą wersjonowane . Jest to najlepsza rzecz, jaką mogę wymyślić, ale bolesne jest to, że gdybym kiedykolwiek musiał dodać kolejny plik do wersji, musiałbym wykonać wiele zatwierdzeń ... jeden, aby usunąć właściwość svn: ignore, inny aby dodać/zatwierdzić nowe pliki, a następnie trzecią zmianę svn: zignoruj ​​z powrotem na "*".

Twoje myśli?

Odpowiedz

10

Nie, nie ma żadnego wyjątkowego dopasowania, takiego jak opisane. This article zawiera listę możliwości dopasowania wzorca. To między innymi:

  • ? - Dopasowuje dowolny pojedynczy znak
  • * - Dopasowuje dowolny ciąg znaków, w tym pustym ciągiem
  • [ - Rozpoczyna definicję klasy postaci zakończonego przez ], używany do dopasowania podzbiór znaków

Podobne pytanie zadano już here.

+1

Jest trochę więcej '' fnmatch' niż wspomniano w tej odpowiedzi. Zobacz odpowiedź tomki poniżej http://docs.python.org/2/library/fnmatch.html – vinnyjames

0

No, ja nie wiem, czy coś przeoczyć, ale można użyć dowolnego wzoru chcesz:

svn propset svn:ignore "*~" . 

Możesz skontaktować się z:

svn propget svn:ignore . 

Innym sposobem jest użycie alias/script, który może wykonywać złożone przetwarzanie podczas zatwierdzania.

Najlepszym rozwiązaniem, które mogę wykorzystać, jest całkowite oddzielenie wersjonowanego drzewa plików źródłowych od drzewa kompilacji. W ten sposób nie generujesz rzeczy w swoim wersjonowanym drzewie katalogu. Następnie można użyć tylko svn:ignore, aby zignorować proste artefakty generowane przez edytory tekstu, na przykład.

EDIT:

Niestety mój błąd dla pierwszego rozwiązania, mam misread posta. Te dwa sposoby wydają się odpowiednie, nawet jeśli nie dokładnie to, czego chcesz ...

+0

Myślę, że twoje pierwsze rozwiązanie jest na coś. Czy możesz ustawić svn: ignore na wyrażenie regularne, które pasuje do wszystkiego oprócz plików, które kończą się na ".xyz"? – jprete

+0

@jprete nie są dozwolone wyrażenia regularne. dopasowanie wzorca jest oparte na fnmatch. – whaley

7

To jedyne rozwiązanie, jakie znam. Możesz jawnie dodawać pliki, nawet jeśli są one ignorowane.

Należy jednak dodać to ustawienie we wszystkich podkatalogach.

# Create a repository with property ignore * 

[[email protected] ~] cd /tmp 
[[email protected] /tmp] svnadmin create foo 
[[email protected] /tmp] svn co file:///tmp/foo co 
Checked out revision 0. 
[[email protected] /tmp] cd co 
[[email protected] co] svn propset svn:ignore \* . 
property 'svn:ignore' set on '.' 

# Create 3 files 

[[email protected] co] touch a 
[[email protected] co] touch b 
[[email protected] co] touch c 

# We can add all 3 of these files in one transaction 

[[email protected] co] svn status 
M  . 
[[email protected] co] svn add a 
A   a 
[[email protected] co] svn add b 
A   b 
[[email protected] co] svn status 
M  . 
A  a 
A  b 
[[email protected] co] svn add c 
A   c 
[[email protected] co] svn ci 
Sending  . 
Adding   a 
Adding   b 
Adding   c 
Transmitting file data ... 
Committed revision 1. 
+1

Dzięki za cynk. Nie zdawałem sobie sprawy, że możesz jawnie dodawać pliki, ponieważ najwyraźniej 'svn add' ignores svn: ignore. – whaley

+0

Dla użytkowników TortoiseSVN (1.8), robi się na ciebie wściekły, jeśli spróbujesz dodać zignorowany plik poprzez jego gui, ale możesz to zrobić za pomocą wiersza poleceń. – AlexMA

17

Spójrz na http://www.thoughtspark.org/node/38. Oczywiście możesz użyć "!" w grupach znaków, aby zanegować jego znaczenie. Więc jeśli chcesz zignorować wszystko oprócz plików kończących się na.java, ustawić następujący wzór do svn: ignore:

*[!j][!a][!v][!a] 
*.java?* 
+4

Właściwie to zapytałem jcscoobyrs (który zarządza pakietem svn na OSX) o tym na IRC tego dnia, który zaowocował jego postem na thinkspark.org . Odwołuję się do tego w komentarzu do zaakceptowanej odpowiedzi. Po prostu pokazuje, że bez względu na to, jak niesamowity jest stackoverflow.com, wciąż nie może pokonać rozmowy z uczestnikiem projektu na IRC. – whaley

+0

Prawidłowy to: * [! J] [! A] [! V] [! A] * j [! A] [! V] [! A] * ja [! V] [! A ] * jav [! A] – Nux

+0

Link jest uszkodzony. – James

5

To co mam ustawić na bin folderu dla svn:ignore własności dopasować wszystko oprócz plików apk:

*[!a][!p][!k] 
*a[!p][!k] 
*ap[!k] 

Jeśli nie byłoby pełne RegExp możesz użyć negatywnego lookbehind, ale to rzadko jest implementowane w każdym razie (np. nie w JavaScript) i jest nieefektywne.

4

Poniższe działa dla mnie i pozbyć się kilku dziwactw z innych sugestii.

*.? 
*.?? 
*.??? 
*.[!j]??? 
*.?[!a]?? 
*.??[!v]? 
*.???[!a] 
*.?????* 

Linia linią wyjaśnienia następująco:

  • ignorować wszystko, co ma rozszerzenie jedna się
  • ignorować wszystko, co ma rozszerzenie dwuliterowy
  • ignorowania wszystkiego, co ma trzy -letter rozszerzenie
  • ignorować wszystko, co ma rozszerzenie czteroliterowe, gdzie pierwsza litera rozszerzenia nie jest j
  • ignorować wszystko, co ma rozszerzenie cztery się gdzie Drugi list rozszerzenie nie jest
  • ignorować wszystko, co ma rozszerzenie cztery się gdzie trzeci rozszerzenie List nie jest przeciwko
  • ignorować wszystko, co ma rozszerzenie cztery-literowe gdzie czwartym rozszerzeniem list nie jest
  • ignorować wszystko, co ma rozszerzenie pięć list lub więcej

ograniczeń:

  • Ten wagowo chory również blokuje katalogi, które kończą się na .java
  • Niestety nie mogłem zignorować plików bez rozszerzenia, ponieważ blokowałoby to również katalogi.
Powiązane problemy