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:ignore
wł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 dirname
pierwszy. (Mój wynik svn statystyki był ogromny i wpadłem na to przez chwilę.)
svn propset svn:ignore -F file.txt .
svn:ignore
a nie svn::ignore
tak 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 project
zobaczysz, ż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:ignore
jest nazwa właściwości, którą ustawiasz, cache
jest wartością właściwości i .
katalog, w którym ustawiasz tę właściwość. Powinien to być katalog nadrzędny cache
katalogu, 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 add
uważ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 delete
je, a następnie edytować svn:ignore
właściwość.
Wiem, że to wydaje się oczywiste, ale wciąż pojawiały się jak ?
na mojej svn status
liś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:ignore
wł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:
.svn
ukrytego folderu)Kiedy potrzebujemy więcej niż jednego folderu do zignorowania
svn:ignore
svn pe
bę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 foo
jest 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 *.tmp
pliki), 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_on
w 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:ignore
a 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.