2008-10-15 9 views
15

Posiadam lokalny repozytorium svn na moim komputerze, używam go do projektu hobby i nie miał on być dostępny dla nikogo, więc zobowiązałem się do przechowywania plików z hasłami.Usuwanie zawartości pliku z historii SVN

Pomyślę teraz o udostępnieniu repozytorium innym osobom i nie chcę mieć tam tych danych.

Czy istnieje sposób na zaindeksowanie repozytorium i zastąpienie wszystkich haseł i danych konta tekstem takim jak "xxxxxxxxxx"?

Odpowiedz

0

Najłatwiej byłoby sprawdzić zawartość repozytorium, usunąć wszystkie poufne informacje, zaimportować katalog roboczy do nowego repozytorium i udostępnić go publicznie. Jest bardzo prawdopodobne, że ktokolwiek będzie używał twojego projektu, będzie zainteresowany jego obecnym stanem, a nie historią zmian.

9

Jeśli zrobić

svnadmin dump > mysvn 

dostaniesz plik płaski wszystkich danych o wszystkich zmianach w swoim repozytorium. Stamtąd powinieneś mieć możliwość ręcznej edycji pliku (jeśli twoje repozyty miało w ogóle znaczący rozmiar, możesz potrzebować edytora liniowego, takiego jak pico, nano, vi itd.).

Na koniec można ponownie załadować ten zrzut do nowego repozytorium. Pozwoli to zachować historię Twojego projektu.

svnadmin load /path/to/new/repo < mysvn 

Praktyka ta będzie traktowana jako nie-nie w każdym środowisku korporacyjnym, gdzie poddawane inspekcji, etc, ale na projekt hobby może po prostu zrobić trick dla Ciebie.

EDYCJA: Musiałem to zrobić przed próbą scalenia dwóch różnych repozytoriów, więc wymagało to dodania nowego "węzła katalogów" do pliku płaskiego. Nie jestem pewien, czy SVN przydziela pliki lub zmiany w celu ustalenia, czy zostało naruszone.

+1

Sprawdza sumy kontrolne podczas ponownego ładowania danych. Po prostu próbowałem tego podejścia dla podobnego problemu. :) – Iain

+0

To zadziała, ale będziesz musiał zaktualizować sumę md5 dla dowolnych plików (ścieżek węzłów), które są edytowane. W vimie możesz użyć ctrl-v, aby podświetlić sekcję reprezentującą plik, a następnie wpisać ":! Md5sum", aby uzyskać nowy skrót. Plik rozpoczyna się po linii PROPS-END i kończy się dwoma pustymi wierszami, po których następuje następna linia "Węzeł-ścieżka:". –

13
+0

Najczęściej zadawane pytania zostały przeniesione na http://subversion.apache.org/faq.html#removal – Witek

+0

Dzięki, Witku. Zaktualizowałem link. –

+1

Czy mógłbyś dodać polecenie do wykonania? Nie rozumiem, co mówią w pomocy. Co to znaczy "do svnadmin zrzutu swojego repozytorium, a następnie potokować plik dumpfile poprzez svndumpfilter (z wyłączeniem złej ścieżki) do polecenia ładowania svnadmin". Żadne szczegóły w linku nie podały. – Hunsu

7

Wydaje się, że było to nieporozumienie. Nie chciałem usuwać pliku. Chcę usunąć hasła przechowywane w repozytorium. Nie chcę stracić plików, ani wersji, modyfikacji ani historii.

Co zrobiłem, to co zasugerował Matt, zrzuć repozytorium i edytuj je.

Aby to zrobić, użyłem edytora szesnastkowego (khexedit) i zastąpiłem ciąg hasła łańcuchem o tej samej długości. W ten sposób nie muszę aktualizować pól rozmiaru.

Następnie należy zaktualizować pola md5 za pomocą skrótu zawartości pliku. W tym celu napisałem skrypt, który używał wyjścia "svnadmin load", aby wygenerować błąd i pobrać stary i nowy md5 z tego błędu. Następnie zamień stary hash na sed, a następnie powtarzaj, aż nie będzie żadnych błędów.

+2

czy mógłbyś opublikować kod? – BCS

+0

'svnadmin dump repo> svn.dump', a następnie znajdź wersje pliku, które chcesz edytować. Wyeksportuj te pliki ('svn export file @ r1234 file.1234'). Skopiuj wyeksportowane pliki do pliku.1234.modified. Zastąp je hasłami 'x', więc mają ten sam rozmiar. Uzyskaj nowe sumy md5 i sumy sha1 ('plik md5sum. *, Plik sha1sum. *'). Otwórz svn.dump w vim i wyszukaj wstępną modyfikację md5sum. Zastąpić hasło dokładnie tak samo jak w zmodyfikowanym pliku i zaktualizować sumę md5 i sha1sum. następnie 'mv repo repo.bak && svnadmin ładuje repo dannysauer

4

Miałem ten sam problem, ale na stronie code.google.com: sprawdziłem kilka plików, które nie powinny być dostępne przez historię na tagu Google, ale nie chciałem zrezygnować z całej historii, po przeszukaniu, próbie, ponownej próbie i Ponowna próba się udała. Poniżej przepis na mój mały projekt (6,5 MB, 90 wersji).Większość wiedza pochodzi googlecode, reszta głównie z svn redbook

pierwsze utworzenie lokalnego repo gdzie można pobrać repo googlecode do:

svnadmin create /tmp/your_local_repo 

utworzyć plik/tmp/isd_gc/haki/pre-revprop- zmienia się z treścią

#!/bin/bash 
exit 0 

uczynić go wykonywalnym:

chmod +x /tmp/isd_gc/hooks/pre-revprop-change 

jeśli nie uda ci się w tej sekcji, najprawdopodobniej pojawi się błąd: zmiana Revprop jest blokowana przez przechwycenie przed zmianą stanu (kod zakończenia 255) bez danych wyjściowych.

teraz możesz init synchronizację svn od code.google.com

svnsync init --username [email protected] file:///tmp/your_local_repo https://yourproject.googlecode.com/svn 

i rozpocząć pobieranie całą historię:

svnsync sync --username [email protected] file:///tmp/your_local_repo 

Committed przegląd 1.

skopiowane właściwości rewizji 1

Przesyłanie danych pliku .......................

Skopiowane właściwości rewizji 87.

Teraz możemy utworzyć zrzut pamięci, który zostanie podany do svndumpfilter usunąć niepotrzebne pliki.

svnadmin dump . > /tmp/tst_dump_gc.dmp 

użyj svndumpfilter, aby usunąć z niego pierwszy niepotrzebny plik.

svndumpfilter exclude /trunk/unwanted file_1.jsvg </tmp/tst_dump_gc.dmp> /tmp/tst_dump_clean1.dmp 

Wypada 1 węzeł:

'/ trunk/niechciana file_new.jsvg'

usunąć niechciane drugi plik:

svndumpfilter exclude /trunk/unwanted file_2.jsvg </tmp/tst_dump_clean1.dmp> /tmp/tst_dump_clean2.dmp 

odtworzenie "starego repo Temp"

rm -rf /tmp/your_local_repo 

svnadmin create /tmp/your_local_repo 

obciążenie filtrowane dum p do repo

[/tmp]$svnadmin load --ignore-uuid your_local_repo < /tmp/tst_dump_clean2.dmp 

sprawdzić, czy wszystko jest w porządku w kliencie (svn robi czek na pniu Historia pokazuje tylko 25 pierwszych wyników w moim klientem SVN).

svnsync sync --username [email protected] https://yourproject.googlecode.com/svn