2010-07-14 35 views
12

Tôi có nhiều dự án mà tôi muốn đưa lên GitHub.com. Tất cả các dự án này đều nằm trong kho lưu trữ Git cục bộ của tôi. Tôi chỉ có một kho lưu trữ, nhưng đối với mỗi dự án, tôi muốn có 1 dự án GitHub. Bằng cách đó, các lỗi có thể được tổ chức bởi dự án.Git nhiều tiểu dự án từ thư mục phụ?

Làm cách nào để thiết lập tính năng này để khó quản lý? Tôi có cần phải làm lại bố cục kho lưu trữ của mình và tạo kho lưu trữ git mới cục bộ cho từng dự án không? Đó sẽ là thời gian thực sự có liên quan và tôi có thể bị mất lịch sử Git.

Walter

Trả lời

15

Tùy thuộc vào cách tổ chức repo của bạn, bạn có thể sử dụng git filter-branch để tạo repo mới cho từng dự án, giữ lại lịch sử cho từng dự án riêng lẻ chỉ.

Giả sử cấu trúc repo hiện tại của bạn là như thế này:

repo/ 
    project1/ 
    project1-file 
    project2/ 
    project2-file 
    project3/ 
    project3-file 

Bạn có thể đầu tiên bản sao repo của bạn (git filter-branchsẽ gỡ bỏ những file lịch sử của họ, do sao chép repo ban đầu của bạn đầu tiên) . Sau đó, trong repo nhân bản, bạn có thể sử dụng git filter-branch để tạo ra một repo mới (với tất cả lịch sử cũ) tại thư mục gốc của project1:

$ git filter-branch --subdirectory-filter project1 HEAD 

Bây giờ, repo của bạn sẽ trông giống như sau:

repo/ 
    project1-file 

Và nó sẽ vẫn chứa lịch sử cho tất cả các tệp được lưu trữ dưới project1/ trong repo cũ.

Lặp lại bước đó cho từng dự án, và bây giờ bạn sẽ có ba repos độc lập, với tất cả lịch sử cho các dự án có liên quan của họ.

+0

Cảm ơn, mà trông giống như chính xác những gì tôi muốn. –

5

Nếu tôi hiểu câu hỏi, bạn có một repo lớn chứa một số dự án. Bạn muốn chia nhỏ từng dự án đó thành các bản thử nghiệm cá nhân mà không làm mất lịch sử. Điểm mấu chốt là có, bạn phải làm lại bố cục kho lưu trữ của mình và tạo kho lưu trữ git mới cho từng dự án. Tuy nhiên, bạn không cần mất lịch sử.

  1. Tạo bản sao của repo hiện tại của bạn, một bản sao cho mỗi dự án phụ.
  2. Trong mỗi repos mới, xóa tất cả các dự án khác ngoại trừ các dự án liên quan đến repo đó.

Bạn vẫn có tất cả lịch sử trước khi phá vỡ bản gốc, nhưng bây giờ mỗi dự án là kho lưu trữ của chính nó.

Nếu bạn không nhớ mất lịch sử của mình, hãy biến từng dự án thành repo git riêng của nó cũng đơn giản như chạy git init trong thư mục dự án. Điều này sẽ tạo ra một repo mới cho dự án đó.

+0

Điều đó có ý nghĩa. Tôi nghĩ rằng những gì tôi sẽ làm là làm thứ hai, git init cho mỗi dự án. Khi tôi đã sẵn sàng để xuất bản để github, tôi muốn có một codebase tương đối sạch sẽ ... –

Các vấn đề liên quan