2013-03-19 12 views
6

Próbuję zrobić klon git-svn, aby zaimportować wszystkie pliki z SVN do GIT. Polecenie, które zostało dane, było tym;git-svn klon ignoruje-ścieżki wyrażenie regularne dla folderów

git svn clone --stdlayout --ignore-paths='(/cache|/tmps|/file/conf/setting.xml)' --authors-file=../authors.txt file:///svnFolder/local-repos/PRG PRG.git 

Powyższe klony ale problem jest to ignoruje wszystkie pliki i folder, który ma pamięć podręczną i PZT. Jak na przykład ignoruje nawet te

new/folder/cache 
meta/files/sets/tmps.html 

Czy ktoś może mi pomóc, aby ustawić wyrażenia regularnego, aby dać w ignorowanych ścieżek ignorowanie plików i podkatalogów, które ma w pamięci podręcznej i PZT katalogów w folderze głównym za.

Odpowiedz

11

Twoje wyreczytanie ścieżek ignorowanych jest zbyt ogólne. Podane wyrażenie regularne jest uruchamiane na pełnej ścieżce. Na przykład, jeśli twój układ repozytorium:

svn_root/path/to/your_project 

A potem ma standardowy układ pnia, gałęzi i tagów, zestaw przykładowych linii toru, który pobiera ocenianych może być:

svn_root/path/to/your_project/trunk/new/folder/cache 
svn_root/path/to/your_project/trunk/meta/files/sets/tmps.html 
svn_root/path/to/your_project/trunk/file/conf/setting.xml 
svn_root/path/to/your_project/trunk/cache/... 
svn_root/path/to/your_project/trunk/tmps/... 

LETS zacząć od analizy regex podałeś jako część parametru ignorowanych ścieżek:

'(/cache|/tmps|/file/conf/setting.xml)' 
  1. otaczającej nawiasach pomocą to wyrażenie w ciągu should be capturing.
  2. Rury lub alternation oznacza ocenić każdy wyraz ciągu docelowym z kilku możliwych wyrażeń
  3. Każde wyrażenie jest bardzo prosta, ale pozwala analizować każdy:
    • /cache
      1. Znajdź dosłowny znak "/"
      2. Znajdź dosłownego znaku "c"
      3. Znajdź dosłownego znaku "a"
      4. znaleźć dosłownego znaku "C"
      5. Znajdź dosłownego znaku "h"
      6. znaleźć dosłowny znak "e"
    • /PZT
      1. Znajdź dosłownego znaku "/"
      2. Znajdź charakter dosłowny "T"
      3. Znajdź dosłowny znak „m”
      4. Znajdź dosłownego znaku „p”
      5. Znajdź dosłownego znaku „s”
    • /file/conf/setting.xml
      1. Znajdź dosłownego znaku "/"
      2. znaleźć dosłownego znaku "F"
      3. Znajdź dosłownego znaku "i"
      4. Znajdź dosłownego znaku "L"
      5. Znajdź dosłownego znaku " e”
      6. Znajdź dosłownego znaku "/"
      7. znaleźć dosłownego znaku "c"
      8. Znajdź literalny znak "o"
      9. Znajdź dosłownego znak „n”
      10. Znajdź dosłownego znak „F”
      11. Znajdź dosłownego znaku „/”
      12. Znajdź dosłownego znak „s”
      13. Znajdź dosłownego postaci „E”
      14. Znajdź dosłownego znaku "t"
      15. znaleźć dosłownego znaku "t"
      16. Znajdź dosłownego znaku "i"
      17. znaleźć dosłownego znaku "n"
      18. Znajdź charakter dosłowny "g"
      19. match (prawie) dowolnego znaku
      20. Znajdź dosłownego znaku "x"
      21. Znajdź charakter dosłowny "m"
      22. Znajdź dosłownego znaku "L"

przy zwykłej ekspresji analizowanych, pozwala chodzić po ścieżkach przykładowych podanych powyżej ze swoimi wyrażeniami:

String ocena:

svn_root/path/to/your_project/trunk/new/folder/cache 
  1. pętli każdego znaku szuka dosłownym "/", a następnie "C", etc ... aż kompletny mecz jest przy pierwszym pod- znaleziono wyrażenie "/ cache". Ta ścieżka jest ignorowana.

String ocena:

svn_root/path/to/your_project/trunk/meta/files/sets/tmps.html 
  1. pętli każdego znaku szuka dosłownym "/", a następnie "C", etc ... nie znaleziono
  2. Pętla przez każda postać szuka literału "/", a następnie "t", etc ... aż do znalezienia pełnego dopasowania z drugim podekspozycją "/ tmps". Ta ścieżka jest ignorowana.

String ocena:

svn_root/path/to/your_project/trunk/file/conf/setting.xml 
  1. pętli każdego charakteru i ocenić przed pierwszym sub-wypowiedzi.Nie znaleziono żadnego dopasowania.
  2. Przeprowadź pętlę przez każdy znak i porównaj z drugim podekspozycją. Nie znaleziono żadnego dopasowania.
  3. Przeprowadź pętlę przez każdy znak i porównaj z ostatnim podekspozycją. Dopasowanie zostało znalezione. Ścieżka ta jest ignorowana.

Z tego miejsca najprawdopodobniej widać, dlaczego następujące dwie wartości są również ignorowane. Jednym z wyrazów podrzędnych pasuje część każdej ścieżki:

svn_root/path/to/your_project/trunk/cache/... 
svn_root/path/to/your_project/trunk/tmps/... 

Istnieje kilka sposobów, aby rozwiązać ten problem, ale jeśli tylko stara się ignorować kilka konkretnych katalogów w bagażniku, można modyfikować swój wyraz w następujący sposób:

'(trunk/cache|trunk/tmps|/file/conf/setting\.xml)' 

To naprawdę zależy od tego, co chcesz zrobić, które ścieżki chcesz zignorować. Jeśli potrzebujesz dodatkowej pomocy, możesz szczegółowo wyjaśnić, w jaki sposób tworzone jest twoje repozytorium i które katalogi mają być ignorowane.

+0

Doskonałe wyjaśnienie prostego wyrażenia regularnego. – Martin

1

Co powiesz na dodanie znacznika początku linii?

... --ignore-paths='^(/cache|/tmps|/file/conf/setting.xml)' ... 
+0

To jest dokładnie to, co robi ** nie ** działa, chyba że wiesz, jaką wartość faktycznie jest dopasowana, która najwyraźniej ** nie ** (ponieważ nie zaczyna się od ukośnika i nie zaczyna się od gałąź). -1. –

+0

chodziło mi o to, aby uczynić wyrażenie regularne bardziej specyficznym i "zakotwiczyć" je; możesz ponownie przeczytać oryginalne pytanie przed obrażaniem i odrzucaniem odpowiedzi ... –

+0

nadal możesz wziąć pod uwagę, że samo posiadanie * podobnego * problemu nie jest powodem do odrzucenia losowych odpowiedzi na * inne * problemy. –