2010-01-08 28 views
5

Tôi có hai phiên bản của một dự án trong một kho lưu trữ git cục bộ. Tôi phải cam kết kho lưu trữ này thành 2 kho từ xa, một cho mỗi phiên bản;Làm thế nào để theo dõi hai phiên bản của một dự án trong một kho GIT?

GIT

ĐỊA PHƯƠNG (V1/V2) -> REMOTE GIT (V1), REMOTE GIT (V2)

Tôi có một số tập tin trong kho GIT LOCAL mà chỉ nên đi đến GIT REMOTE (V1) và khác nên chỉ vào REMOTE GIT (V2). Bây giờ tôi cam kết kho lưu trữ cục bộ đầy đủ cho cả hai điều khiển từ xa. Tôi có thể chỉ cam kết một số tệp cho REMOTE1 không?

Tôi cần phải có cả hai phiên bản của dự án trong một kho lưu trữ, nhưng muốn có một tùy chọn để chia lịch sử một chút. Tôi không nghĩ rằng bất kỳ nhánh nào cũng có thể giúp tôi vì vậy tôi sẽ phải thực hiện những thay đổi tương tự cho cả hai nhánh. Hầu hết mã, 90% mã là giống nhau cho VER 1 và VER 2. Mã mới thường giống nhau cho cả hai phiên bản.

+0

Sẽ rất tốt nếu bạn hiểu (và đăng ở đây) trước tiên, bạn đang cố gắng đạt được điều gì. Kích thước kho lưu trữ nhỏ nhất có thể? Cần hợp nhất với VER2 thứ gì đó đã được phân nhánh ra khỏi VER1? Còn gì nữa không? –

Trả lời

-1

Có vẻ như bạn cần sử dụng mô-đun phụ git-submodule. Bạn sẽ lưu trữ mã phổ biến trong kho lưu trữ chính, nhưng sau đó lưu trữ các phiên bản riêng biệt trong các mô-đun con. Bạn không thể chia nhỏ lịch sử với git. Mỗi cam kết được mã hóa dựa trên nội dung và phụ huynh.

+1

mô-đun con là để nhúng một dự án khác vào một kho lưu trữ nước ngoài tại một số vị trí trong cây nguồn của bạn. OP chỉ có một dự án (với các nhánh khác nhau) nên các mô đun con không liên quan. –

3

Phân nhánh chính xác là những gì bạn cần. Việc phân nhánh rất dễ dàng và nhanh chóng với Git, vì vậy bạn không mất bất cứ thứ gì ngoài một vài lần nhấn phím nữa.

Bạn có thể sử dụng 3 nhánh. Tạo một nhánh "phổ biến" nơi bạn sẽ làm việc trên các công cụ phổ biến cho cả hai "nhánh" và hợp nhất vào chúng sau khi cam kết. Đối với các công cụ cụ thể, làm việc tại một trong các chi nhánh.

Git sử dụng liên kết cứng trên hệ thống tệp để các chi nhánh rẻ cả về tốc độ và không gian đã sử dụng.

Cuối cùng, bạn luôn có thể chọn nhánh để đẩy/kéo.

+1

Chi nhánh không hề rẻ vì "liên kết cứng".Chi nhánh là giá rẻ vì nhánh chỉ là một cam kết, trong đó đề cập đến SHA1 id cho tất cả các phần của nó, và cùng một tệp trong các cây cam kết khác nhau sẽ có cùng SHA1 và chỉ được lưu trữ một lần. Bây giờ, SVN, mặt khác, lưu trữ các chi nhánh bằng cách có toàn bộ cấu trúc thư mục và * * sử dụng liên kết cứng để tối ưu hóa điều đó. Xin đừng nhầm lẫn SVN cũ, xấu xí, với git slick mới. –

+0

Cảm ơn bạn đã sửa, tôi đã sửa nó ngay bây giờ. –

+0

@Randal: SVN cũng không sử dụng liên kết cứng của hệ thống tệp. Một chi nhánh trong SVN cũng rẻ vì nó chỉ là "cam kết". Sự khác biệt duy nhất là trong SVN giá rẻ tập tin/thư mục bản sao, chi nhánh và thẻ đều được thực hiện bởi cùng một cơ chế, trong khi trong các chi nhánh git là một khái niệm riêng biệt. –

0

Tạo ba kho Git: core, app_1, app_2. Trong mỗi kho lưu trữ app, hãy tạo một mô-đun con Git tham chiếu đến kho lưu trữ core.

Treat kho core như một thư viện tinh khiết và app kho do người tiêu dùng thư viện thuần túy, cơ cấu ba dự án như vậy mà bạn có thể giữ tất cả mọi thứ chung cho hai "phiên bản" trong kho core và mọi thứ sẽ bất đồng giữa hai phiên bản trong kho app. Cấu trúc các kho app sao cho dự án core có thể được đặt bán buôn, không có sửa đổi, vào một thư mục con trong các kho lưu trữ app. Bạn có thể yêu cầu một tập lệnh khởi tạo chung tối thiểu được chia sẻ giữa tất cả các kho lưu trữ app, nhưng đó là một mức giá nhỏ để thanh toán.

Kịch bản cấu trúc mã theo cách này là rất phổ biến. Mặc dù sử dụng Git theo cách này để hỗ trợ kịch bản kiến ​​trúc mã này ít phổ biến hơn, nó được xem là một khả năng khả thi.

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