2009-08-27 6 views
25

Moje repozytorium git zawiera poufne hasła, których z przyczyn, na które nie mam wpływu, nie można teraz usunąć. Teraz wszystko jest w porządku, ponieważ to repozytorium ma charakter wyłącznie wewnętrzny. Zostałem poproszony o utworzenie oddziału, który można bezpiecznie udostępniać partnerom.git branch without history

Czy istnieje sposób na utworzenie oddziału w git, a następnie usunięcie z niego plików w taki sposób, że nie można ich odzyskać za pomocą dziennika?

Wydaje się, że to długi strzał, ale myślałem, że zapytam. Jedyne rozwiązanie, jakie mogę wymyślić to skopiowanie drzewa plików do nowego repozytorium git bez wrażliwego pliku - ale straciłbym możliwość scalania zmian z partnerem z powrotem do mojego repozytorium.

Odpowiedz

29

Jedną z rzeczy, którą można zrobić, jest utworzenie gałęzi repozytorium, edycja haseł, a następnie utworzenie płytkiego klonu (z głębokością 1) tego repozytorium, który można przekazać partnerom. Mogą tworzyć poprawki i inne rzeczy przeciwko temu klonowi, ale nie widzą całej historii i nie mogą popychać repozytorium nigdzie indziej. Jeśli tylko wprowadzają zmiany, powinno to być możliwe do zrealizowania. Nadal możesz akceptować poprawki z nich i stosować je do swojego głównego repozytorium.

Aby uzyskać więcej informacji, zobacz opcję --depth pod numerem git clone.

+0

Myślę, że to rozwiązanie będzie działać lepiej dla sytuacji Bena. Łatwiej zarządzać dostępem na podstawie repozytorium, niż na poziomie oddziału. – Apreche

+4

'git clone --depth 1 [email protected]: project/projectname.git' - skopiuj i wklej – YumYumYum

5

Zastosowanie filter-branch:

Załóżmy, że chcesz usunąć plik (zawierające informacje poufne lub naruszenie praw autorskich) ze wszystkich zobowiązuje:

git filter-branch --tree filtr „rm nazwa pliku "HEAD

+0

1.)' --index-filter' powinien być szybszy niż '--tree-filter' do usuwania plików. 2.) Jeśli nie chcesz zmieniać repozytorium, najpierw utwórz nowy oddział i przepisz go ponownie. –

+0

Tak, jest bardzo dobra dyskusja na temat różnych technik w dokumentacji, którą –

0

Pójdę ukłuć kilka odpowiedzi. Załóżmy, że możesz utworzyć oddział, który nie zawiera poufnych danych. Obłaskawiasz, a następnie tworzysz płytki klon gałęzi, który nie zawierałby historii, a zatem nie mógłbyś od niej odciągnąć, ale mógł się z ciebie wyciągnąć.

Inną sprawą byłoby sklonowanie nowego repozytorium i użycie narzędzi do usuwania git w celu niszczenia poufnych danych. W ten sposób utworzy się odrębne repozytorium, które nie będzie mogło wchodzić w interakcje z wyjątkiem sytuacji, w których będzie to łatanie z pierwszym, ale będzie miało całą historię.

5

git clone --depth 1 url_of_your_remote_repository

Ograniczenie płytkiej repozytorium

  • nie można sklonować lub pobrać z płytkiej repozytorium (Oznacza to, że nie można zrobić przy użyciu tego nowego repozytorium płytka kopia)

  • Nie można wyświetlić całej historii za pomocą polecenia git log.

  • To funkcjonalne rozwiązanie, twój partner może wprowadzić pewne zmiany i uczynić go "łatką" i wysłać go do partnera, jeśli chcesz zmienić partnera. Następnie zastosuj te poprawki w bieżącym drzewie roboczym/dowolnych gałęziach, które chcesz zastosować.

    More