Właśnie zacząłem używać SVN i mam katalog pamięci podręcznej, którego nie potrzebuję pod kontrolą źródła. Jak mogę zignorować cały katalog / folder SVN?
Właśnie zacząłem używać SVN i mam katalog pamięci podręcznej, którego nie potrzebuję pod kontrolą źródła. Jak mogę zignorować cały katalog / folder SVN?
Odpowiedzi:
Ustaw svn:ignorewłaściwość katalogu nadrzędnego:
svn propset svn:ignore dirname .
Jeśli masz wiele rzeczy do zignorowania, oddziel je znakiem nowej linii w wartości właściwości. W takim przypadku łatwiej jest edytować wartość właściwości za pomocą zewnętrznego edytora:
svn propedit svn:ignore .
svn rm --keep-local dirnamepierwszy. (Mój wynik svn statystyki był ogromny i wpadłem na to przez chwilę.)
svn propset svn:ignore -F file.txt .
svn:ignorea nie svn::ignoretak jak ja. Możesz ustawić dowolne właściwości, więc ta druga będzie ustawiona OK, a będziesz mógł zobaczyć i edytować właściwość, ale nie spowoduje to, że SVN zignoruje wymienione pliki.
Oto przykładowa struktura katalogów:
\project
\source
\cache
\other
Gdy projectzobaczysz, że twój katalog pamięci podręcznej nie został dodany i jako taki jest wyświetlany.
> svn st
M source
? cache
Aby ustawić właściwość ignorowania, wykonaj
svn propset svn: ignore cache.
gdzie svn:ignorejest nazwa właściwości, którą ustawiasz, cachejest wartością właściwości i .katalog, w którym ustawiasz tę właściwość. Powinien to być katalog nadrzędny cachekatalogu, który potrzebuje tej właściwości.
Aby sprawdzić, jakie właściwości są ustawione:
> svn proplist
Properties on '.':
svn:ignore
Aby zobaczyć wartość svn:ignore:
> svn propget svn:ignore
cache
Aby usunąć ustawione wcześniej właściwości:
svn propdel svn:ignore
dirname. Na przykład, podczas pisania svn propset svn:ignore dirname, jeśli pozwolisz, aby powłoka (bash) wypełniła dla ciebie svn propset svn:ignore dirname/nazwę katalogu , doda to końcowe ukośnik, pozostawiając ci polecenie , które nie spowoduje zignorowania folderu. Przynajmniej takie było moje doświadczenie.
Ważne, aby wspomnieć:
W wierszu polecenia nie można użyć
svn add *
Spowoduje to również dodanie zignorowanych plików, ponieważ wiersz poleceń rozwija się *i dlatego svn adduważa, że chcesz dodać wszystkie pliki. Dlatego użyj tego zamiast:
svn add --force .
svn add --force *NIE DZIAŁA . Użyj kropki, a nie gwiazdy.
Ponieważ spędziłem trochę czasu próbując sprawić, aby to zadziałało, należy zauważyć, że jeśli pliki już istnieją w SVN, musisz svn deleteje, a następnie edytować svn:ignorewłaściwość.
Wiem, że to wydaje się oczywiste, ale wciąż pojawiały się jak ?na mojej svn statusliście, kiedy myślałem, że po prostu zignorują je lokalnie.
Aby nieznacznie rozwinąć, jeśli robisz to za pomocą narzędzia wiersza polecenia svn, wpisz:
svn propedit svn:ignore path/to/dir
który otworzy wybrany edytor tekstu, a następnie wpisz „*”, aby zignorować wszystko, co się w nim znajduje, i zapisz + quit - obejmie to sam katalog w svn, ale zignoruje wszystkie znajdujące się w nim pliki, aby zignorować katalog, użyj ścieżka rodzica, a następnie wpisz nazwę katalogu w pliku. Po zapisaniu uruchom aktualizację („svn up”), a następnie sprawdź odpowiednią ścieżkę.
Ustaw svn:ignorewłaściwość w katalogu nadrzędnym:
$ cd parentdir
$ svn ps svn:ignore . 'cachedir'
Spowoduje to zastąpienie dowolnej bieżącej wartości svn:ignore. Możesz edytować wartość za pomocą:
$ svn pe svn:ignore .
Który otworzy twój edytor. Możesz dodać wiele wzorów, po jednym w wierszu.
Możesz zobaczyć bieżącą wartość za pomocą:
$ svn pg svn:ignore .
Jeśli używasz GUI, powinna to zrobić opcja menu.
svn ps svn:ignore . 'cachedir'powoduje w cachedir is not under version control. zmiana na svn ps svn:ignore 'cachedir' .pracującą dla mnie
Dziękujemy za wszystkie powyższe uwagi. Chciałbym tylko podzielić się dodatkowymi informacjami z moich doświadczeń, ignorując pliki.
Gdy foldery są już pod kontrolą wersji
Po svn import i svn co pliki, co zwykle robimy po raz pierwszy.
Cała pamięć podręczna środowiska wykonawczego, foldery załączników będą pod kontrolą wersji. przed svn ps svn: zignoruj musimy usunąć go z repozytorium.
W wersji SVN 1.5 powyżej możemy używać svn del --keep-local your_folder, ale w przypadku wcześniejszej wersji moje rozwiązanie to:
.svnukrytego folderu)Kiedy potrzebujemy więcej niż jednego folderu do zignorowania
svn:ignoresvn pebędzie musiał edytować plik tekstowy. W razie potrzeby możesz użyć tego polecenia, aby ustawić edytor tekstu za pomocą vi :
export SVN_EDITOR=vi
Plik wygląda mniej więcej tak:
runtime
cache
attachments
assets
svn propset svn:ignore -F .ignorethesefiles ., który wykorzysta zawartość pliku. Lubię go trzymać, żebyś wiedział, co jest ignorowane. Edycje wymagają zestawu kontrolnego.
Jeśli twój katalog foojest już pod kontrolą wersji, usuń go najpierw za pomocą:
svn rm --keep-local foo
svn propset svn:ignore foo .
... a jeśli chcesz zignorować więcej niż jeden katalog (powiedz build/ temp/i *.tmppliki), możesz to zrobić w dwóch krokach (ignorując pierwszy i edytować właściwości ignorowania (zobacz inne odpowiedzi tutaj) lub napisać coś w stylu
svn propset svn:ignore "build
temp
*.tmp" .
w wierszu poleceń.
Jeśli używasz konkretnego klienta SVN TortoiseSVN , to po zatwierdzeniu masz opcję kliknięcia prawym przyciskiem myszy pozycji i wybrania „Dodaj do listy ignorowanych”.
Polecenie zignorowania wielu pozycji jest nieco trudne i wymaga odwrotnych ukośników.
svn propset svn:ignore "cache\
tmp\
null\
and_so_on" .
Polecenie to zignorować coś o nazwie cache, tmp, null, a and_so_onw bieżącym katalogu.
svn propset svn:ignore -F .ignorethesefiles .pozwoli ci użyć pliku. I jak wspomniano, zawsze miałeś propedit.
Miałem problemy z ignorowaniem zagnieżdżonych katalogów; górny katalog, który chciałem zignorować, nie wyświetlałby się z „svn status”, ale wszystkie podkatalogi tak. Jest to prawdopodobnie oczywiste dla wszystkich innych, ale pomyślałem, że podzielę się tym:
PRZYKŁAD:
/bagażnik samochodowy
/ trunk / cache
/ trunk / cache / subdir1
/ trunk / cache / subdir2
cd /trunk
svn ps svn:ignore . /cache
cd /trunk/cache
svn ps svn:ignore . *
svn ci
"Dziękuję Ci" svn za tak ohydny, fałszywy i trudny sposób ignorowania plików.
Napisałem więc skrypt svn-ignore-all :
#!/bin/sh
# svn-ignore-all
# usage:
# 1. run svn status to see what is going on at each step
# 2. add or commit all files that you DO want to have in svn
# 3. remove any random files that you don't want to svn:ignore
# 4. run this script to svn:ignore everything marked '?' in output of `svn status`
svn status |
grep '^?' |
sed 's/^? *//' |
while read f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
Ponadto, aby zignorować określoną listę plików / ścieżek, możemy użyć tego wariantu svn-ignore . Myślę, że svn-ignore-all powinno naprawdę być jak xargs svn-ignore.
#!/bin/sh
# svn-ignore
# usage:
# svn-ignore file/to/ignore ...
for f; do
d=`dirname "$f"`
b=`basename "$f"`
ignore=`svn propget svn:ignore "$d"`
if [ -n "$ignore" ]; then
ignore="$ignore
"
fi
ignore="$ignore$b"
svn propset svn:ignore "$ignore" "$d"
done
Jeszcze jedno: mam tendencję do zanieczyszczania moich kas svn wieloma losowymi plikami. Kiedy nadchodzi czas zatwierdzenia, przenoszę te pliki do „starego” podkatalogu i mówię svn, aby ignorował „stary”.
Bash oneliner dla wielu ignoruje:
svn propset svn:ignore ".project"$'\n'".settings"$'\n'".buildpath" "yourpath"
Jeśli katalog projektu ma nazwę / Project, a katalog pamięci podręcznej ma nazwę / Project / Cache, musisz ustawić właściwość subversion w / Project. Nazwą właściwości powinna być „svn: ignore”, a wartością właściwości powinna być „pamięć podręczna”.
Więcej informacji na temat właściwości można znaleźć na tej stronie w podręczniku Subversion.
Odpowiedź Jasona załatwi sprawę. Jednak zamiast ustawiać svn: ignore na „.” w katalogu pamięci podręcznej możesz dołączyć „pamięć podręczną” do właściwości svn: ignore katalogu nadrzędnego , na wypadek, gdyby katalog pamięci podręcznej nie zawsze był obecny. Robię to w wielu „wyrzucanych” folderach.
ABY ZACHOWAĆ KATALOGI, KTÓRE SVN BĘDĄ IGNOROWAĆ:
svn delete --keep-local path / directory_to_keep / *
svn propset svn: ignore "*" path / directory_to_keep
Jeśli używasz interfejsu użytkownika dla SVN, takiego jak TortoiseSVN, lub jakiegoś rodzaju integracji IDE, w tym samym menu powinna również znajdować się opcja ignorowania jako operacji zatwierdzania / dodawania.
Uważaj również na końcowe cięcia. Zauważyłem, że uwzględnienie images/*w moim pliku ustawień ignorowania nie ignorowało ./images/. Kiedy prowadziłem svn status -u, nadal się pokazywało ? images. Właśnie zmieniłem ustawienie ignorowania na just images, no slash. Przeprowadziłem kontrolę statusu i to wyjaśniło.
Rozwiązane za pomocą Eclipse w następujący sposób:
Przede wszystkim zsynchronizuj folder z projektem:
zespół -> synchronizacja
W następnym widoku, widoku zespołu, możesz zobaczyć wszystkie zasoby, które możesz zatwierdzić na serwerze SVN.
Wybierz folder zasobów zasobu, który chcesz zignorować, a następnie możesz go zignorować za pomocą
zespół -> dodaj do
svn:ignore.
Następnie w oknie potwierdzenia wybierz pierwszą opcję: „ignoruj według nazwy”.
Na przykład, jeśli chcę zignorować folder docelowy i jego zasoby klasy. Zsynchronizuję, aw widoku synchronizacji wybiorę folder docelowy. Następnie wybiorę
zespół-> dodaj
do, svn:ignorea następnie potwierdzę pierwszą opcję w oknie potwierdzenia.
Po tym, jak straciłem dużo czasu, szukając sposobu na wykonanie tej prostej czynności, postanowiłem napisać, że nie było trudno znaleźć dobre wyjaśnienie.
Najpierw pozwól strukturze próbki
$ svn st? projekt / bagażnik / cel? project / trunk / myfile.x
1 - najpierw skonfiguruj edytor, w eksport mycase vim SVN_EDITOR = vim
2 - „svn propedit svn: ignore project / trunk /” otworzy nowy plik i możesz dodać swoje pliki i podkatalog w naszym przypadku wpisz „cel” zapisz i zamknij plik i działa
$ svn st? project / trunk / myfile.x
dzięki.