Jak otworzyć projekt, którego repozytorium git ma w historii prawa autorskie do multimediów?

15

Chcę wydać projekt oprogramowania do pobierania odcisków palców na podstawie bezpłatnej licencji, ale repozytorium zawiera pliki audio chronione prawem autorskim. Przypadki testowe również obecnie używają tych plików. Jak udostępnić kod publicznie z maksymalną historią wersji, ale bez naruszania praw autorskich?

Detale:

  • Kod jest wersjonowany pod git. Przed wydaniem zwiniemy wszystko z powrotem w jedną gałąź.
  • Istnieje 400 MB danych audio. Niektóre pliki są darmowymi utworami muzycznymi np. Jamendo, inne są plikami MP3 z naszych osobistych kolekcji.
  • Bez względu na to, jakie zastosujemy podejście, zawsze będziemy przechowywać niezmienną kopię oryginalnego repozytorium, aby nie zniszczyć historii projektu.

Główne pytanie: jak obsługiwać wydanie publiczne?

  1. Zniszcz całą historię danych plików z repozytorium git i zwolnij zmienione repozytorium. (v64 wskazał sposób, aby to zrobić.)
  2. Alternatywnie, zrób migawkę bieżącego stanu kodu i nawet nie zawracaj sobie głowy publiczną historią kodu przedpremierowego.

Pytanie poboczne: Jak mogliśmy uniknąć tego dylematu, biorąc pod uwagę, że czasami prywatny kod lub media są potrzebne na wczesnych etapach projektu?

traktujcie dobrze swoje mody
źródło

Odpowiedzi:

13

GitHub ma stronę wyjaśniającą, jak usunąć plik z całej historii: Usuń poufne dane .

Od czasu do czasu użytkownicy przypadkowo przekazują dane, takie jak hasła lub klucze, do repozytorium git. Chociaż możesz go użyć git rmdo usunięcia pliku, nadal będzie on w historii repozytorium. Na szczęście git sprawia, że ​​usunięcie pliku z całej historii repozytorium jest dość proste.

Niebezpieczeństwo: po przesunięciu zatwierdzenia powinieneś uznać dane za zagrożone. Jeśli podałeś hasło, zmień je! Jeśli popełniłeś klucz, wygeneruj nowy.

Usuń plik ze swojego repozytorium

Teraz, gdy hasło zostało zmienione, chcesz usunąć plik z historii i dodać go do, .gitignoreaby upewnić się, że nie zostanie przypadkowo ponownie zatwierdzony . Dla naszych przykładów usuniemy Rakefilez repozytorium klejnotów GitHub ...

v64
źródło
Wygląda na odpowiednie narzędzie do tego zadania. Nadal nie jestem pewien, czy jest to w moim przypadku najbardziej sensowne, niż rozpoczęcie od nowej migawki bazy kodu.
traktuj swoje mody dobrze
@phyzome: Zależy od tego, jak ważna jest historia. Usunięcie jest dość łatwe dzięki filter-branchpoleceniu --- po prostu uruchom go na klonie repozytorium, ponieważ jest destrukcyjny i nie można go cofnąć.
Sharpie
8

Pytanie poboczne: Jak mogliśmy uniknąć tego dylematu, biorąc pod uwagę, że czasami prywatny kod lub media są potrzebne na wczesnych etapach projektu?

Jeśli zamierzasz śledzić duże pliki multimedialne (400 MB dźwięku), umieść je w osobnym repozytorium.

To zabija dwa ptaki jednym kamieniem:

  1. Główne repozytorium jest mniejsze o 400 MB. (Ludzie nie muszą pobierać treści o wartości 400 MB za każdym razem, gdy klonują).
  2. Media mogą być prywatne i są oddzielone od wszystkich innych rzeczy. W związku z tym nie trzeba wykonywać żadnych dodatkowych czynności w celu zwolnienia publicznego repozytorium.

Jeśli chcesz, możesz sprawić, by praca z nim była wygodniejsza, czyniąc repozytorium multimediów podmodułem publicznego repozytorium (które planujesz wydać).

W ten sposób po prostu trzymasz wskaźnik do niego, a nie (wrażliwą) treść (na wczesnych etapach rozwoju). Następnie, kiedy zamierzasz publicznie wydać repozytorium, po prostu usuń odniesienie do podmodułu, co jest o wiele mniej kłopotliwe niż przepisywanie historii w celu odfiltrowania rzeczy o wartości 400 MB.

Alex Budovski
źródło