2009-10-20 31 views
37

Trong dự án của tôi, tôi cần sử dụng mã của bên thứ ba, được lưu trữ trong một số kho Git. Dự án của tôi cũng được lưu trữ trong kho lưu trữ Git (riêng biệt). Có một số người làm việc với tôi trong dự án chính, và tôi là người bảo trì.Git submodules workflow

Trong các dự án trước đó, tôi đã sử dụng để sao chép các phụ thuộc theo cách thủ công vào cây làm việc Git, thêm một tệp nhỏ chỉ định phiên bản tôi sử dụng.

Bây giờ điều này khá khó chịu vì tôi cần phải cập nhật phụ thuộc hàng ngày và thường tự đóng góp mã cho nó, phần lớn thời gian cùng với những thay đổi trong dự án chính.

Tôi đã quyết định thử Git submodules để thực hiện việc quản lý. Càng cố gắng, tôi càng trở nên thất vọng hơn. Nó thậm chí có vẻ như bản sao thủ công, có lẽ, tốt hơn.

Dưới đây là một số những mối quan tâm của tôi:

  • Chúng tôi không còn khả năng để có được trạng thái kho phù hợp với một lệnh đơn (git checkout bây giờ cần git submodule update --init).
  • Chúng tôi không thể sử dụng một số công cụ Git đúng cách (git archive là đáng chú ý nhất).
  • Chúng tôi không thể thấy các thay đổi trạng thái/khác biệt thành các mô-đun con từ dự án chính.
  • Vì tôi vừa tìm thấy một cách khó khăn, git submodule không hoạt động với các tùy chọn --git-dir--work-tree và yêu cầu thay đổi vật lý của thư mục hiện tại thành "toplevel of the working tree".

Dường như để sắp xếp dòng công việc con của chúng tôi (đó là một thao tác == một lệnh), chúng ta phải viết một trình bao bọc khá dày quanh Git. Chuyện này buồn.

Lưu ý rằng nó không phải là một tùy chọn để di chuyển ra khỏi Git hoặc để hợp nhất phát triển tiểu dự án hoàn toàn vào dự án chính.

Có lẽ tôi đang sử dụng git submodules theo cách không đúng? Có hướng dẫn nào tốt về quy trình làm việc không?

Hãy nói ngay cả khi bạn không biết câu trả lời đúng, nhưng hãy chia sẻ mối quan tâm của tôi. :-)

+6

Một trong những gotchas yêu thích khác của tôi submodules là nếu bạn xóa một submodule, và thay thế bằng một submodule mới trong cùng một vị trí, nó phá vỡ các kho lưu trữ cho tất cả mọi người khác. (ví dụ: Ai đó dĩa thư viện trên github, và bạn chuyển submodule để trỏ vào ngã ba thay thế.) Công việc xung quanh là để xóa submodule, có tất cả mọi người kéo và cập nhật, sau đó thay thế submodule và có tất cả mọi người kéo và cập nhật một lần nữa. –

+0

Tôi nghĩ rằng ai đó đã đánh cắp bài đăng này và xuất bản nó trên habr mà không cần tham khảo, nhưng sau đó tôi nhìn vào tên ... :-D Tuy nhiên, một tham chiếu đến SO sẽ được tốt đẹp, tôi đoán. –

+1

Có một.Xem xét kỹ hơn các liên kết trong văn bản. –

Trả lời

11

Bạn có thể muốn thử git subtree (alt link) thay thế. Tôi đã có rất nhiều may mắn với nó, sử dụng cả repos từ xa và chi nhánh sạch (untied to master) trong dự án của tôi.

+1

Tôi đã thử git subtree, và nó vượt trội hơn nhiều so với git submodules cho nhiệm vụ của tôi. Cảm ơn! –

+0

Liên kết đầu tiên bị hỏng. Tôi biết bạn cung cấp một liên kết alt. Nhưng tôi chỉ muốn cho bạn biết. – Eduardo

+0

@EduardoCereto - cả hai liên kết đều hoạt động tốt tại thời điểm này. – FooF

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