Odpowiedzi:
(Ta odpowiedź została zaktualizowana, aby pasowała do zachowania SVN 1.8 i 1.9)
Masz 2 pytania:
Przez „plik ignorowany” mam na myśli, że plik nie pojawi się na listach nawet jako „niewersjonowany”: twój klient SVN będzie udawał, że plik w ogóle nie istnieje w systemie plików.
Zignorowane pliki są określane przez „wzorzec pliku”. Składnia i format wzorców plików wyjaśniono w dokumentacji online SVN: http://svnbook.red-bean.com/nightly/en/svn.advanced.props.special.ignore.html „Wzorce plików w Subversion”.
Subversion, począwszy od wersji 1.8 (czerwiec 2013) i późniejszych, obsługuje 3 różne sposoby określania wzorców plików. Oto podsumowanie z przykładami:
global-ignores
opcja:global-ignores
lista nie będzie udostępniana przez innych użytkowników i dotyczy wszystkich repozytoriów, które kasujesz na swój komputer.C:\Users\{you}\AppData\Roaming\Subversion\config
Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
zarówno w, jak HKLM
i HKCU
.~/.subversion/config
svn:ignore
Właściwość ustawiona na katalogi (nie pliki):.gitignore
działa.svn:ignore
jest stosowany do katalogów i nie jest rekurencyjny ani dziedziczony. Dowolny plik lub bezpośredni podkatalog katalogu nadrzędnego pasujący do Wzorca pliku zostanie wykluczony.Podczas gdy SVN 1.8 dodaje pojęcie „odziedziczonych właściwości”, svn:ignore
sama właściwość jest ignorowana w nie-bezpośrednich katalogach potomnych:
cd ~/myRepoRoot # Open an existing repo.
echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt".
svn status # Check to see if the file is ignored or not.
> ? ./ignoreThis.txt
> 1 unversioned file # ...it is NOT currently ignored.
svn propset svn:ignore "ignoreThis.txt" . # Apply the svn:ignore property to the "myRepoRoot" directory.
svn status
> 0 unversioned files # ...but now the file is ignored!
cd subdirectory # now open a subdirectory.
echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt".
svn status
> ? ./subdirectory/ignoreThis.txt # ...and is is NOT ignored!
> 1 unversioned file
(Więc plik ./subdirectory/ignoreThis
nie jest ignorowany, nawet jeśli „ ignoreThis.txt
” jest stosowany w .
katalogu głównym repo).
Dlatego, aby zastosować listę ignorowanych rekurencyjnie, musisz użyć svn propset svn:ignore <filePattern> . --recursive
.
<filePattern>
wartość jest inna w katalogu potomnym, wówczas wartość dziecka całkowicie przesłania rodziców, więc nie ma efektu „addytywnego”.<filePattern>
katalog główny .
, musisz go zmienić, --recursive
aby nadpisać katalogi potomne i potomne.Zauważam, że składnia wiersza poleceń jest sprzeczna z intuicją.
svn ignore pathToFileToIgnore.txt
jednak nie w ten sposób działa funkcja ignorowania SVN.svn:global-ignores
Właściwość. Wymaga SVN 1.8 (czerwiec 2013):svn:ignore
, z tym wyjątkiem, że wykorzystuje funkcję „odziedziczonych właściwości” SVN 1.8.svn:ignore
wzorzec pliku jest automatycznie stosowany w każdym katalogu potomnym (nie tylko w bezpośrednim potomku).
svn:global-ignores
za pomocą --recursive
flagi nie jest konieczne , ponieważ odziedziczone wzorce ignorowanych plików są automatycznie stosowane podczas dziedziczenia.Uruchamianie tego samego zestawu poleceń, co w poprzednim przykładzie, ale svn:global-ignores
zamiast tego:
cd ~/myRepoRoot # Open an existing repo
echo "foo" > "ignoreThis.txt" # Create a file called "ignoreThis.txt"
svn status # Check to see if the file is ignored or not
> ? ./ignoreThis.txt
> 1 unversioned file # ...it is NOT currently ignored
svn propset svn:global-ignores "ignoreThis.txt" .
svn status
> 0 unversioned files # ...but now the file is ignored!
cd subdirectory # now open a subdirectory
echo "foo" > "ignoreThis.txt" # create another file named "ignoreThis.txt"
svn status
> 0 unversioned files # the file is ignored here too!
Cały ten układ był dla mnie mylący, ponieważ terminologia TortoiseSVN (stosowana w systemie menu Eksploratora Windows) początkowo była dla mnie myląca - nie byłem pewien, jakie znaczenie mają opcje „Dodaj rekurencyjnie”, „Dodaj *” i „Dodaj” menu Ignoruj opcje Mam nadzieję, że ten post wyjaśnia, w jaki sposób funkcja Ignoruj łączy się z funkcją Właściwości SVN. To powiedziawszy, sugeruję użycie wiersza polecenia do ustawienia ignorowanych plików, abyś poczuł, jak to działa zamiast używania GUI, i używanie GUI tylko do manipulowania właściwościami, gdy nie masz problemów z wierszem poleceń.
Polecenie svn status
ukryje zignorowane pliki (to znaczy pliki, które pasują do global-ignores
wzorca RGA lub pasują do svn:ignore
wzorca bezpośredniego katalogu nadrzędnego lub pasują do dowolnego katalogu przodkasvn:global-ignores
.
Użyj --no-ignore
opcji, aby wyświetlić te pliki na liście. Zignorowane pliki mają status I
, a następnie przesyłają dane wyjściowe do potokugrep
tylko linie rozpoczynające się od „I”.
Polecenie to:
svn status --no-ignore | grep "^I"
Na przykład:
svn status
> ? foo # An unversioned file
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore
> ? foo # An unversioned file
> I ignoreThis.txt # A file matching an svn:ignore pattern
> M modifiedFile.txt # A versioned file that has been modified
svn status --no-ignore | grep "^I"
> I ignoreThis.txt # A file matching an svn:ignore pattern
ta-da!
svn propedit svn:ignore .
i nie masz skonfigurowanego edytora tekstu, pojawi się komunikat o błędzie svn: E205007: Żadna ze zmiennych środowiskowych SVN_EDITOR, VISUAL ani EDITOR nie jest ustawiona, a żadna opcja konfiguracji „edytora-cmd” nie była ustawiona znaleziono zamiast otwierania edytora. Podaj więc --editor-cmd nano w ten sposóbsvn propedit svn:ignore . --editor-cmd nano
svn status | grep '^?'
Użyj następującego polecenia, aby utworzyć listę nie znajdującą się w plikach kontroli wersji.
svn status | grep "^\?" | awk "{print \$2}" > ignoring.txt
Następnie edytuj plik, aby pozostawić tylko pliki, które chcesz zignorować . Następnie użyj tego, aby zignorować pliki wymienione w pliku:
svn propset svn:ignore -F ignoring.txt .
Zwróć uwagę na kropkę na końcu linii. Informuje SVN, że właściwość jest ustawiana w bieżącym katalogu.
Usuń plik:
rm ignoring.txt
Wreszcie dokonaj,
svn ci --message "ignoring some files"
Następnie możesz sprawdzić, które pliki są ignorowane poprzez:
svn proplist -v
svn status | awk "/^?/ {print \$2}" > ignoring.txt
.
svn pg svn:ignore . >> ignore.txt
po pierwszym poleceniu dołączenia bieżących ignorowanych do pliku.
Możesz zignorować plik lub katalog, taki jak .gitignore. Wystarczy utworzyć plik tekstowy z listą katalogów / plików, które chcesz zignorować i uruchomić poniższy kod:
svn propset svn:ignore -F ignorelist.txt .
LUB jeśli nie chcesz używać pliku tekstowego, możesz to zrobić w następujący sposób:
svn propset svn:ignore "first
second
third" .
Źródło: Karsten's Blog - Ustaw svn: ignore dla wielu plików z wiersza poleceń
svn:ignore
polecenie (patrz stackoverflow.com/a/58380306/189518 )
Jeśli używasz TortoiseSVN , kliknij plik prawym przyciskiem myszy, a następnie wybierz TortoiseSVN / Dodaj, aby zignorować listę . Spowoduje to dodanie pliku / symbolu wieloznacznego do plikusvn:ignore
właściwości.
svn:ignore
zostaną sprawdzone podczas wpisywania plików, a pasujące pliki zostaną zignorowane. Mam następującą listę ignorowania dla projektu Visual Studio .NET:
bin obj
*.exe
*.dll
_ReSharper
*.pdb
*.suo
Tę listę można znaleźć w menu kontekstowym w TortoiseSVN / Properties .
Jak się wydaje, nikt o tym nie wspominał ...
svn propedit svn:ignore .
Następnie edytuj zawartość pliku, aby określić wzorce do zignorowania, zamknij edytor i gotowe.
Znalazłem artykuł .svnignore Przykład dla Javy .
Przykład: .svnignore dla Ruby on Rails,
/log
/public/*.JPEG
/public/*.jpeg
/public/*.png
/public/*.gif
*.*~
I potem:
svn propset svn:ignore -F .svnignore .
Przykłady .gitignore. Możesz użyć dla swojego .svnignore
Podczas korzystania z propedit upewnij się, że nie ma żadnych spacji końcowych, ponieważ spowoduje to wykluczenie pliku z listy ignorowanych.
Są one wstawiane automatycznie, jeśli używasz autouzupełniania tabulatorów w systemie Linux, aby utworzyć plik na początek:
svn propset svn:ignore 'file1
file2' .
Innym rozwiązaniem jest:
svn st | awk '/^?/{print $2}' > svnignore.txt && svn propget svn:ignore >> svnignore.txt && svn propset svn:ignore -F svnignore.txt . && rm svnignore.txt
lub linia po linii
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
Co to robi:
Ponadto, jeśli używasz Tortoise SVN, możesz to zrobić:
config
pliku.
Bardziej czytelna wersja odpowiedzi bkbilly:
svn st | awk '/^?/{print $2}' > svnignore.txt
svn propget svn:ignore >> svnignore.txt
svn propset svn:ignore -F svnignore.txt .
rm svnignore.txt
Co to robi:
Możesz także ustawić globalny wzorzec ignorowania w pliku konfiguracyjnym SVN.
svn status
powie Ci, które pliki nie znajdują się w SVN, a także co się zmieniło.
Spójrz na właściwości SVN dla właściwości ignorowania.
Dla wszystkich rzeczy SVN, Czerwona Księga jest wymagana do przeczytania.
Dodanie katalogu do subversion i zignorowanie zawartości katalogu
svn propset svn:ignore '\*.*' .
lub
svn propset svn:ignore '*' .
Użyj polecenia svn status na kopii roboczej, aby wyświetlić status plików, pliki, które nie są jeszcze pod kontrolą wersji (i nie są ignorowane), będą miały znak zapytania obok nich.
Jeśli chodzi o ignorowanie plików, musisz edytować właściwość svn: ignore, przeczytaj rozdział Ignorowanie niewersjonowanych elementów w książce svnbook pod adresem http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.ignore. HTML . Książka opisuje także więcej na temat używania statusu svn.
SVN ignore
jest łatwy w zarządzaniu w TortoiseSVN. Otwórz TortoiseSVN i kliknij menu pliku prawym przyciskiem myszy, a następnie wybierz Dodaj, aby zignorować listę.
Spowoduje to dodanie plików do svn:ignore
właściwości. Gdy sprawdzamy te pliki, wówczas plik, który jest zgodny z svn:ignore
tym, zostanie zignorowany i nie zostanie zatwierdzony.
W projekcie Visual Studio dodaliśmy następujące pliki do zignorowania:
bin obj
*.exe
*.dll
*.pdb
*.suo
Za pomocą tej metody z powodzeniem zarządzamy kodem źródłowym w SVN Comparetrap
Co dla mnie zadziałało:
Jak zignorować pliki w Subversion?
1. W Eksploratorze plików kliknij prawym przyciskiem myszy nazwę folderu projektu SVN
2. Kliknij „SVN Commit ...”
3. Pojawi się okno „zatwierdzenia”
4. Kliknij prawym przyciskiem myszy folder / plik, który chcesz zignorować
5. Kliknij Dodaj, aby zignorować listę.
6. Wybierz folder / plik.
7. Zatwierdź „zmianę właściwości” na SVN.
Jak znaleźć pliki, które nie podlegają kontroli wersji?
Po kroku 3 powyżej kliknij „Pokaż niewersjonowane pliki”