Czy mogę zignorować folder na svn checkout? Muszę zignorować folder DOCs podczas pobierania na moim serwerze kompilacji.
edycja: Ignoruj zewnętrzne nie jest opcją. Mam kilka elementów zewnętrznych, których potrzebuję.
Czy mogę zignorować folder na svn checkout? Muszę zignorować folder DOCs podczas pobierania na moim serwerze kompilacji.
edycja: Ignoruj zewnętrzne nie jest opcją. Mam kilka elementów zewnętrznych, których potrzebuję.
Odpowiedzi:
Nie możesz bezpośrednio ignorować folderów przy pobieraniu, ale możesz użyć rzadkich pobrań w svn 1.5. Na przykład:
$ svn co http://subversion/project/trunk my_checkout --depth immediates
Spowoduje to sprawdzenie plików i katalogów z linii głównej twojego projektu do 'my_checkout', ale nie powtórzy w tych katalogach. Na przykład:
$ cd my_checkout && ls
bar/ baz foo xyzzy/
Następnie, aby pobrać zawartość „bar”:
$ cd bar && svn update --set-depth infinity
svn: Shallowing of working copy depths is not yet supported
Tak, możesz używać SVN 1.6. Najpierw musisz dokonać płatności, a następnie zaznaczyć folder do wykluczenia, a następnie usunąć niechciany folder.
svn checkout http://www.example.com/project
cd project
svn update --set-depth=exclude docs
rm -fr docs
Od teraz żadne aktualizacje kopii roboczej nie będą ponownie wypełniać folderu dokumentów.
Zobacz http://blogs.collab.net/subversion/2009/03/sparse-directories-now-with-exclusion/ i http://subversion.apache.org/docs/release-notes/1.6.html#sparse- wykluczenie katalogu, aby uzyskać więcej informacji.
Tomek
W wersjach wcześniejszych niż 1.5 stwierdziłem, że jeśli wyewidencjonujesz tylko najwyższy folder, a następnie wybiórczo zaktualizujesz, od tego momentu aktualizacje będą miały wpływ tylko na to, co wyewidencjonowałeś. To znaczy.
svn co -N foo
cd foo
svn up -N bar
svn up
Flaga -N sprawia, że operacja nie jest rekurencyjna. Powyższe nie spowoduje sprawdzenia niczego innego na poziomie foo, np. powiedzmy, że istnieje folder lala
, ostateczne svn up nie sprawdzi tego folderu, ale zostanie zaktualizowane bar
.
Ale później możesz svn up lala
i tym samym dodać go do kasy.
Przypuszczalnie działa to również z wersją 1.5.
Możesz umieścić folder docs w zewnętrznym repozytorium, a następnie użyć svn checkout --ignore-externals
.
external repository
znaczy. Możesz to wyjaśnić?
Tak, Subversion 1.5 ma funkcję o nazwie Sparse checkouts, która może zrobić dokładnie tego rodzaju rzeczy.
Znalazłem to pytanie, szukając sposobu na sprawdzenie źródeł WebKit z wyłączeniem testów regresji. Skończyło się na tym:
svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit \
--depth immediates
cd WebKit
find . \
-maxdepth 1 -type d \
-not -name '.*' \
-not -name '*Tests' \
-not -name 'Examples' \
-not -name 'Websites' \
| (while read SUBDIR; do svn update --set-depth infinity "$SUBDIR"; done)
Zauważ, że możesz zmienić wykluczenia według własnego uznania, ale. * Zaleca się pominięcie katalogu roboczego (który jest już aktualny) i wszystkich katalogów .svn.
Niedawno rozwiązałem to samo zadanie. Chodzi o to, aby uzyskać natychmiastową listę folderów / plików w repozytorium, z wyłączeniem potrzebnych wpisów, a następnie sprawdzić pozostałe foldery i zaktualizować najbliższe pliki, jeśli takie istnieją. Oto rozwiązanie:
# Path to the svn repository to be checked out
rpath=https://svn-repo.company.com/sw/trunk/ && \
# This files are to be excluded (folders are ending with '/')
# this is a regex pattern with OR ('|') between enties to be excluded
excludep='docs_folder/tests_folder/|huge_folder/|file1|file2' && \
# Get list of the files/folders right under the repository path
filtered=`svn ls $rpath | egrep -v $excludep` && \
# Get list of files out of filtered - they need to be 'uped'
files=`echo $filtered | sed 's| |\n|g' | egrep '^.*[^/]$'` && \
# Get list of folders out of filtered - they need to be 'coed'
folders=`echo $filtered | sed 's| |\n|g' | egrep '^.*[/]$'` && \
# Initial nonrecursive checkout of repository - just empty
# to the current (./) working directory
svn co $rpath ./ --depth empty && \
# Update the files
svn up $files &&\
# Check out the all other folders finally.
svn co `echo $folders | sed "s|\<|$rpath|g"`
Przejdź do źródłowego katalogu roboczego. Skopiuj polecenia. Pasta. Zmień odpowiedni adres URL i wyklucz wzorzec. Uruchom polecenie.
Dzięki,
Nie, ignorowanie służy tylko do dodawania plików.
Możesz użyć rzadkich kas (jeśli używasz svn 1.5)
Jak kilku innych wspomniało, możesz po prostu użyć właściwości svn: externals, a następnie opcji --ignore-externals podczas realizacji transakcji. Należy pamiętać jednak, że svn: externals jest nie koniecznie odnosić się do innego repozytorium. Może to być odniesienie do innego folderu w tym samym repozytorium.