„Nie można wyewidencjonować pojedynczego pliku. Najlepszy poziom realizacji transakcji, jaki można wykonać, to poziom katalogu”.
Jak obejść ten problem podczas korzystania z Subversion?
Mamy ten folder w Subversion, w którym przechowujemy wszystkie nasze obrazy. Chcę tylko sprawdzić jeden plik (obraz) z tego. Ten folder jest naprawdę duży i zawiera mnóstwo innych rzeczy, których nie potrzebuję teraz.
svn
version-control
bluegene
źródło
źródło
svn up
do lokalnego katalogu na swoim komputerze.Odpowiedzi:
Prostą odpowiedzią jest to, że masz
svn export
plik zamiast go sprawdzać.Ale to może nie być to, czego chcesz. Możesz popracować nad plikiem i sprawdzić go ponownie, bez konieczności pobierania niepotrzebnych śmieci.
Jeśli masz Subversion 1.5+, wykonaj rzadkie wypłaty:
W przypadku starszej wersji SVN możesz skorzystać z następujących opcji:
Alternatywą (na przykład, jeśli katalog zawiera zbyt wiele śmieci bezpośrednio od wersji, w której został utworzony) jest wykonanie kopii URL-> URL pliku, który chcesz w nowym miejscu w repozytorium (w rzeczywistości jest to działająca gałąź pliku). Sprawdź ten katalog i dokonaj modyfikacji.
Nie jestem pewien, czy możesz następnie scalić zmodyfikowaną kopię z powrotem w repozytorium bez roboczej kopii celu - nigdy nie potrzebowałem. Jeśli tak, to zrób to.
Jeśli nie, możesz niestety znaleźć kogoś, kto ma cały katalog wyewidencjonowany i zmusić go do zrobienia tego. A może do czasu wprowadzenia modyfikacji reszta zakończy pobieranie ...
źródło
svn export
niż w interfejsie internetowym, jeśli wiem, jakiego pliku chcę. Pytający używa już SVN, więc myślę, że zależy to od tego, jakiego klienta i czy ten klient ułatwia korzystanie z niegosvn export
. Uważam, że interfejs sieciowy jest lepszy do przeglądania niżsvn ls
:-)Spróbuj
svn export
zamiastsvn checkout
. To działa na pojedyncze pliki.Powodem tego ograniczenia jest to, że
checkout
tworzy kopię roboczą, która zawiera meta-informacje o repozytorium, rewizji, atrybutach itp. Metadane są przechowywane w podkatalogach o nazwie „.svn”. A pojedyncze pliki nie mają podkatalogów.źródło
svn
nie będą eksportować pojedynczych plików.svn cat $url_to_file_in_repo > $local_file_name
.Użyj
svn cat
lubsvn export
.W tym celu nie musisz pobierać katalogu roboczego, ale nie będziesz mógł zatwierdzić wprowadzonych zmian. Jeśli chcesz wprowadzić zmiany i zatwierdzić je, potrzebujesz katalogu roboczego, ale nie musisz go całkowicie pobierać. Sprawdź wersję, w której katalog był nadal / prawie pusty, a następnie użyj „svn cat”, aby wyodrębnić plik z HEAD.
źródło
svn cat svn://.../my_file.txt
było dokładnie tym, czego szukałem. Pracuję wsvn://
jedynym (niehttp://
) repozytorium i wygląda na to, że najnowsze interfejsy websvn nie zapewniają pobierania surowego pliku (lub mamy go źle skonfigurowane lub jestem niewidomy). Łatwiej to zrobić niżcheckout
+up
tylko w celu pobrania pliku.Źródło
źródło
curl
lubwget
.Poniżej przedstawiono równoważne rozwiązanie TortoiseSVN z zaakceptowaną odpowiedzią (napisałem to w wewnętrznym dokumencie dla mojej firmy, ponieważ nowo przyjmujemy SVN). Pomyślałem, że warto również udostępnić tutaj:
Sprawdzanie pojedynczego pliku: Subversion nie obsługuje pobierania pojedynczego pliku, obsługuje tylko pobieranie struktur katalogów. (Odwołanie: http://subversion.tigris.org/faq.html#single-file-checkout ). Wynika to z faktu, że przy każdym katalogu wyewidencjonowanym jako kopia robocza metadane dotyczące modyfikacji / wersji pliku są przechowywane jako wewnętrzny ukryty folder (.svn / _svn). To nie jest obecnie obsługiwane (v1.6) dla pojedynczych plików.
Alternatywna zalecana strategia: będziesz musiał wykonać część katalogu kasy tylko raz, po czym możesz bezpośrednio przejść do kasy pojedynczych plików. Wykonaj rzadkie pobieranie folderu nadrzędnego i struktury katalogów. Rzadkie pobieranie polega na sprawdzeniu tylko struktury folderów bez zapełniania plików zawartości. Kasujesz więc tylko struktury katalogów i nie musisz kasować WSZYSTKICH plików, co było przedmiotem zainteresowania. Odniesienie: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html
Krok 1 : Przejdź do przeglądarki repozytorium
Krok 2 : Kliknij prawym przyciskiem myszy folder nadrzędny w repozytorium zawierający wszystkie pliki, nad którymi chcesz pracować, i wybierz Zamówienie.
Krok 3 : W nowym wyskakującym oknie upewnij się, że katalog kasy wskazuje prawidłową lokalizację na komputerze lokalnym. Pojawi się również menu rozwijane z etykietą „głębokość kasy”. Wybierz „Tylko ten element” lub „Natychmiastowe dzieci, w tym foldery”, w zależności od wymagań. Druga opcja jest zalecana, ponieważ jeśli chcesz pracować nad zagnieżdżonym folderem, możesz przejść bezpośrednio następnym razem, w przeciwnym razie będziesz musiał ponownie wykonać całą procedurę dla zagnieżdżonego folderu.
Krok 4 : Foldery nadrzędne powinny być teraz dostępne w folderze wybranym lokalnie i są teraz monitorowane za pomocą SVN (ukryty folder „.svn” lub „_svn” powinien być teraz obecny). Teraz w repozytorium kliknij prawym przyciskiem myszy pojedynczy plik, który chcesz wyewidencjonować sam, i wybierz opcję „Aktualizuj element do wersji”. Można teraz pracować nad pojedynczym plikiem i wrócić do repozytorium.
Mam nadzieję, że to pomoże.
źródło
Możesz to zrobić w dwóch krokach:
Kasy puste repozytorium SVN zawierające tylko meta informacje:
Uruchom,
svn up
aby zaktualizować określony plik:źródło
Aktualizacja na wypadek, gdyby to, czego naprawdę potrzebujesz, mogło zostać pokryte poprzez włączenie pliku do kasy innego folderu.
Od wersji SVN 1.6 możesz tworzyć zewnętrzne pliki , rodzaj linków svn. Oznacza to, że możesz mieć inny wersjonowany folder, który zawiera pojedynczy plik. Możliwe jest także zatwierdzanie zmian w pliku podczas pobierania tego folderu.
To bardzo proste, sprawdź folder, w którym chcesz dołączyć plik, i po prostu dodaj właściwość do folderu
o treści takiej jak ta:
Po zatwierdzeniu plik pojawi się w przyszłych kasach tego folderu. Zasadniczo to działa, ale istnieją pewne ograniczenia, jak opisano w dokumentacji połączonej powyżej.
źródło
Przejdź do przeglądarki repo, kliknij prawym przyciskiem myszy plik i użyj „Zapisz jako”, ale używam TortoiseSVN.
źródło
(Edytuj plik.log)
źródło
Odpowiedź Steve'a Jessopa nie zadziałała dla mnie. Czytam pliki pomocy dla SVN i jeśli masz tylko obraz, prawdopodobnie nie chcesz go ponownie zameldować, chyba że robisz Photoshop, więc eksport jest lepszym poleceniem niż pobieranie, ponieważ jest niewersjonowany (ale jest niewielki).
A ARG --depth nie powinno być puste, ale pliki, aby uzyskać pliki w bezpośrednim katalogu. Otrzymasz wszystkie pola, nie tylko jedno, ale puste zwróci nic z repozytorium.
lub
Jeśli chodzi o inne odpowiedzi, cat pozwala ci czytać treści, które są dobre tylko dla tekstu, a nie obrazów wszystkich rzeczy.
źródło
--depth empty
to, że inne pliki nie powinny być wyewidencjonowane, a następnie możesz uzyskać tylko jeden plik za pomocąsvn up <source/file>
. Dziękisvn export
nie musisz tego robić, wystarczy podać plik.Po prostu przejrzę go i wyeksportuję pojedynczy plik. Jeśli masz dostęp HTTP, po prostu użyj przeglądarki internetowej, aby znaleźć plik i pobrać go.
Jeśli musisz odzyskać go po edycji, może to być nieco bardziej nużące, ale jestem pewien, że może istnieć
svn import
funkcja ...źródło
Zrób coś takiego:
Zasadniczo chodzi o utworzenie katalogu, w którym chcesz pobrać plik z SVN. Użyj
svn cat
polecenia i przekieruj dane wyjściowe do tego samego pliku o nazwie. Domyślnie kot zrzuca informacje na stdio.źródło
Jeśli chcesz tylko plik bez informacji o wersji, użyj
źródło
Dzięki Subversion 1.5 możliwe jest wyewidencjonowanie (wszystkich) plików katalogu bez sprawdzania żadnych podkatalogów (różne flagi --depth). Nie do końca to, o co prosiłeś, ale forma „mniej niż wszyscy”.
źródło
Korzystając z techniki rzadkiego wyewidencjonowywania, możesz sprawdzić konkretny plik, który został już wyewidencjonowany lub istnieje ... za pomocą prostej sztuczki:
Po wyewidencjonowaniu najwyższego poziomu repozytorium przy użyciu opcji „tylko ten element” w Eksploratorze Windows MUSISZ najpierw kliknąć prawym przyciskiem myszy plik, który chcesz zaktualizować; wybierz Repo Browser w menu kontekstowym; znajdź ten plik PONOWNIE w przeglądarce repozytorium i kliknij prawym przyciskiem myszy. Powinieneś teraz zobaczyć „aktualizuj element do wersji” w menu kontekstowym.
Nie jestem pewien, czy jest to funkcja nieudokumentowana, czy po prostu błąd. Znalezienie tej sztuczki zajęło mi dłuższe godziny po pracy. Używam TortoiseSVN 1.6.2.
źródło
Chciałem pobrać pojedynczy plik do katalogu, który nie był częścią kopii roboczej.
Pobierzmy plik pod następującym adresem URL: http: //subversion.repository.server/repository/module/directory/myfile
Więc sprawdziłem podany katalog zawierający plik docelowy, który chciałem dostać do katalogu fikcyjnego (powiedz etcb dla adresu URL kończącego się na
/etc
).Następnie opróżniłem plik .svn / wpisy ze wszystkich plików katalogu docelowego, których nie potrzebowałem, aby zostawić tylko żądany plik. W tym pliku .svn / wpisy masz rekord dla każdego pliku z jego atrybutami, więc zostaw tylko rekord dotyczący pliku, który chcesz pobrać i zapisać.
Teraz wystarczy skopiować plik „.svn” do katalogu, który będzie nową „kopią roboczą”. Następnie wystarczy:
Teraz katalog katalogu jest pod kontrolą wersji. Nie zapomnij usunąć katalogu directoryb, który był tylko „tymczasową kopią roboczą”.
źródło
Ponieważ żadna z pozostałych odpowiedzi nie działała dla mnie, zrobiłem to przy użyciu tego hacka:
Spowoduje to utworzenie nowego folderu lokalnego zawierającego tylko pliki ze zdalnej ścieżki. Następnie możesz zrobić symboliczny link do plików, które chcesz tutaj mieć.
źródło
svn co
jeden plik, aby uniknąć całego katalogu pełnego plików graficznych. Ponadto dodanie dowiązania symbolicznego może tylko zwiększyć złożoność, przejście z katalogu tymczasowego może działać, ale nadal musisz sprawdzić cały katalog zdjęć tylko dla jednego obrazu. @ steve-jessop miał dobry pomysłTen problem obejmuje:
http://subversion.tigris.org/issues/show_bug.cgi?id=823
Dołączony jest skrypt, który pozwala wyewidencjonować pojedynczy plik z svn, wprowadzić zmiany i zatwierdzić zmiany z powrotem do repozytorium, ale nie można uruchomić polecenia „svn up”, aby pobrać resztę katalogu. Został przetestowany z svn-1.3, 1.4 i 1.6.
źródło
Jeśli chcesz tylko wyeksportować plik i nie będziesz musiał go później aktualizować, możesz to zrobić bez konieczności używania poleceń SVN.
Za pomocą przeglądarki repozytorium TortoiseSVN wybierz plik, kliknij prawym przyciskiem myszy, a następnie wybierz „ Kopiuj adres URL do schowka ”. Wklej ten adres URL do przeglądarki, a po zalogowaniu pojawi się monit o pobranie pliku.
W ten sposób możesz również wybrać żądaną wersję i pobrać starszą wersję pliku.
Pamiętaj, że jest to ważne, jeśli serwer SVN ma interfejs sieciowy.
źródło