Làm thế nào để nguồn mở một dự án có kho git có phương tiện có bản quyền trong lịch sử?


15

Tôi muốn phát hành một dự án phần mềm lấy dấu vân tay âm thanh theo giấy phép miễn phí, nhưng kho chứa các tệp âm thanh có bản quyền. Các trường hợp thử nghiệm hiện cũng sử dụng các tập tin này. Làm cách nào để phát hành mã ra công chúng với lịch sử phiên bản tối đa nhưng không vi phạm bản quyền?

Chi tiết:

  • Mã được phiên bản dưới git. Chúng tôi sẽ thu gọn tất cả lại thành một nhánh trước khi phát hành.
  • Có 400 MB dữ liệu âm thanh. Một số tệp là nhạc được cấp phép miễn phí từ Jamendo, một số khác là MP3 từ các bộ sưu tập cá nhân của chúng tôi.
  • Cho dù chúng tôi sử dụng phương pháp nào, chúng tôi sẽ luôn giữ một bản sao bất biến của repo gốc, để không phá hủy lịch sử dự án.

Câu hỏi chính: Làm thế nào để xử lý việc phát hành công khai?

  1. Hủy bỏ tất cả lịch sử của các tệp được đề cập từ kho git và phát hành repo đã thay đổi. (v64 chỉ ra một cách để làm điều này.)
  2. Ngoài ra, hãy chụp nhanh trạng thái hiện tại của mã và thậm chí không bận tâm đến lịch sử công khai của mã trước khi phát hành.

Câu hỏi phụ: Làm thế nào chúng ta có thể tránh được tình trạng khó xử này ngay từ đầu, với điều kiện là đôi khi mã riêng hoặc phương tiện truyền thông là cần thiết cho giai đoạn đầu của một dự án?

Câu trả lời:


13

GitHub có một trang giải thích cách loại bỏ một tệp khỏi tất cả lịch sử: Xóa dữ liệu nhạy cảm .

Thỉnh thoảng người dùng vô tình cam kết dữ liệu như mật khẩu hoặc khóa vào kho git. Mặc dù bạn có thể sử dụng git rmđể xóa tệp, nhưng nó vẫn sẽ nằm trong lịch sử của kho lưu trữ. May mắn thay, git làm cho nó khá đơn giản để loại bỏ tệp khỏi toàn bộ lịch sử kho lưu trữ.

Nguy hiểm: Một khi cam kết đã được đẩy, bạn nên xem xét dữ liệu bị xâm phạm. Nếu bạn đã cam kết mật khẩu, hãy thay đổi nó! Nếu bạn đã cam kết một khóa, tạo một cái mới.

Lọc tệp khỏi kho lưu trữ của bạn

Bây giờ mật khẩu đã được thay đổi, bạn muốn xóa tệp khỏi lịch sử và thêm nó vào .gitignoređể đảm bảo nó không bị vô tình tái cam kết. Ví dụ, chúng tôi sẽ xóa Rakefilekhỏi kho lưu trữ đá quý GitHub ...


Có vẻ như công cụ phù hợp cho công việc đó. Tôi vẫn không chắc chắn liệu điều này có ý nghĩa nhất trong trường hợp của tôi hay không, bắt đầu bằng một ảnh chụp mới của cơ sở mã.
đối xử tốt với các mod của bạn vào

@phyzome: Phụ thuộc vào tầm quan trọng của bạn trong lịch sử. Expunging khá dễ dàng với filter-branchlệnh --- chỉ cần đảm bảo chạy nó trên một bản sao của kho lưu trữ vì nó bị phá hủy và không thể hoàn tác.
Sharpie

8

Câu hỏi phụ: Làm thế nào chúng ta có thể tránh được tình trạng khó xử này ngay từ đầu, với điều kiện là đôi khi mã riêng hoặc phương tiện truyền thông là cần thiết cho giai đoạn đầu của một dự án?

Nếu bạn sẽ theo dõi các tệp phương tiện lớn (400 MB âm thanh), hãy đặt nó vào một kho lưu trữ riêng.

Điều đó giết chết hai con chim bằng một hòn đá:

  1. Repo chính nhỏ hơn 400MB. (Mọi người không phải tải xuống nội dung trị giá 400 MB mỗi lần họ sao chép.)
  2. Các phương tiện truyền thông có thể là riêng tư và được giữ tách biệt với tất cả những thứ khác. Vì vậy, không có việc làm thêm cần phải được thực hiện để phát hành kho lưu trữ công cộng.

Nếu bạn thích, bạn có thể làm việc thuận tiện hơn bằng cách làm cho kho lưu trữ phương tiện trở thành mô hình con của repo công khai (mà bạn dự định phát hành).

Bằng cách đó, bạn chỉ cần giữ một con trỏ đến nó, chứ không phải chính nội dung (nhạy cảm) (cho giai đoạn đầu phát triển). Sau đó, khi bạn sẽ phát hành repo công khai, chỉ cần xóa tham chiếu mô hình con, điều này ít rắc rối hơn nhiều so với việc viết lại lịch sử của bạn để lọc ra những thứ đáng giá 400 MB.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.