2013-03-24 18 views
6

Wiem, że w Mercurial, "historia jest święta".Mercurial: Trwale usuwa poufne dane z repozytorium HG?

Ale powiedzmy, że ktoś przypadkowo popełnia coś, czego nie powinien, np. Plik ustawień zawierający hasło lub coś podobnego. Powiedzmy, że upłynie trochę czasu, zanim ktokolwiek zda sobie z tego sprawę, więc kręci się w nim kilka razy. Oczywiście, wykrywacz usuwa następnie wrażliwe dane z repozytorium.

Czy istnieje sposób na trwałe wyszorowanie tego pliku lub danych poufnych z historii zatwierdzenia, tak jak gdyby nigdy nie istniał? Czy te wrażliwe dane po prostu stałyby się stałym elementem repozytorium na zawsze?

+1

dupe: http://stackoverflow.com/questions/1029480/is-there-a-way-to-remove-the-history-for--single-file-in-mercurial –

+2

Podana tam odpowiedź niezbyt pomocny. W pewnym sensie jest to technicznie poprawne. Ale jeśli chcesz powiedzieć wszystkim osobom, które mogły sklonować twoje repozytorium, aby usunąć zmiany, możesz usunąć zestaw zmian, który wprowadza zmianę, a następnie użyć czegoś takiego jak przeszczep, aby przenieść wszystkie zmiany po tym i przekazać je nowe hashy commit. – Omnifarious

+1

Odpowiedź Martina Geislera jest znacznie lepsza i jest to kolejna metoda oprócz tej, którą zasugerowałem. – Omnifarious

Odpowiedz

2

Istnieje kilka metod, aby to osiągnąć. Wszystkie wymagają współpracy wszystkich, którzy sklonowali twoje repozytorium lub wyciągnęli z niego zestawy zmian po wprowadzeniu zmiany.

Wybór metody zależy od rodzaju popełnianych danych i ich miejsca w historii. Wszystkie z nich wymagają użycia rozszerzeń Mercurial i nie można ich osiągnąć za pomocą rdzenia Mercurial. Na szczęście wszystkie wymagane rozszerzenia są domyślnie dostarczane z Mercurial i po prostu muszą być włączone.

Nie wchodzę w szczegóły dotyczące metod, ponieważ istnieje kilka odpowiedzi, które podają różne metody w pytaniu, że jest to duplikat. Chcę tylko wyjaśnić, że zaakceptowana odpowiedź w tym pytaniu jest poprawna technicznie, ale nie jest użyteczna. Jest to faktycznie możliwe.

1

Nie sprawdzałem szczegółów działania haków, więc ten pomysł może nie zostać w pełni odtworzony. Może być możliwe ustawienie haczyków, aby uniemożliwić zatwierdzanie, pchanie i wyciąganie wrażliwych plików. Istnieją haki, które będą uruchamiane przed popełnieniem lub pchnięciem (precommit and preoutgoing). Ochrona haczyków, aby ich nie ominąć, to kolejna kwestia, o której dyskutuje także artykuł: "Definicyjny przewodnik Mercurial: The Definitive Guide.

0

Nie. Nie. Jeśli uda Ci się przekonać wszystkich, którzy mają dostęp do usuwania i ponownego wpisywania, możesz usunąć plik z przyszłego dostępu.

Ale jeśli np. Wprowadziłeś swoje hasło roota do publicznego repozytorium Bitbucket -? Powinieneś to zmienić. Twoje informacje są teraz jawne i wyciekły i powinny być traktowane jako takie. Przepraszam.

0

Jeśli i tylko wtedy, to repozytorium nie uciekł do dzikiego, można usunąć plik z historii, w zasadzie klonowania do nowego repozytorium podczas filtrowania plik poufnych w procesie, przy użyciu hg nawróconegoHg Convert Extension doc here

Zazwyczaj możemy znaleźć coś, kiedy badania repozytorium przed publikowania lub dostarczania do klienta, takich jak web.config lub pliku ini z hasłem.

Rozszerzenie nie jest włączone domyślnie, ale jest dołączone do wszystkich klientów, których używam, należy je włączyć, zanim Mercurial rozpozna polecenie convert.

przypadku korzystania tortoisehg lub pieca, na przykład:

  1. Otwarte tortoisehg -> Ustawienia globalne -> Rozszerzenia
  2. Zaznacz pole wyboru obok "Convert"
  3. kliknij OK

Lub bezpośrednio edytuj Mercurial.ini:

[extensions] 
convert = 

Przejdź do katalogu wyżej repozytorium (w moim przykładzie, moje repo jest HelloApp):

  1. Utwórz plik o nazwie filemap.txt

  2. Dodaj linię z pełną ścieżką do nazwy pliku chcesz wykluczyć.

    exclude HelloApp/sensitive.config 
    
  3. otworzyć wiersz polecenia cd do tego samego katalogu, zawierającego swoją filemap.txt i uruchomić hg przekonwertować

    cd C:\projects 
    
    hg convert --filemap filemap.txt HelloApp HelloApp_clean 
    
  4. Następnie uzyskać najnowszą kopię roboczą:

    cd HelloApp_clean 
    hg update 
    

Musisz utworzyć świeżego klona na serwerze przy użyciu czystej kopii.

Powiązane problemy