2011-10-09 38 views
16

Đây là một tình huống phổ biến mà phải có một giải pháp hợp lý, nhưng bất chấp các trang đọc sách và thể dục dụng cụ Git, não tôi nhức nhối và tôi không thể thực hiện công việc này ...Git, sub-repos & libs bên ngoài để phát triển web - chiến lược tốt nhất một lần và cho tất cả?

Tôi đang làm việc với Wordpress, mặc dù điều này sẽ phù hợp với hầu hết các trang web của kịch bản dev. Tôi muốn quản lý các trang web cài đặt với một repo git và cũng quản lý các plugin WP, jQuery plugin và bit mã khác trong repos riêng biệt mà có thể dễ dàng được kéo/đẩy từ các nguồn bên ngoài của họ. Dường như đủ đơn giản cho đến khi bạn nhìn vào các chi tiết ...

Các tiêu chí

"Subfolders" tiêu chí Các thư mục cho mỗi plugin không nên bị ràng buộc vào thư mục gốc của repo nguồn của nó. Nhiều repos có nhiều thư mục lồng nhau như "my-repo-name/...", "dev /", "test /", "src /" trong đó nội dung của phần sau là điều bắt buộc. Điều này là quan trọng để giữ cho các URL tham chiếu được sạch sẽ và giảm thiểu rác công khai có sẵn.

"Không có Proxys" tiêu chí Giải pháp lý tưởng sẽ không yêu cầu thêm chi nhánh trung gian hoặc repos. Việc đẩy các thay đổi vào nguồn bên ngoài của plugin phải đơn giản và không yêu cầu nhiều lần kết hợp/đẩy trung gian.

"Real Files" tiêu chí Lý tưởng nhất là repo ngoài cho toàn bộ trang web nên thực sự chứa các tập tin của subrepos của plugin (tức là không có 'submodules'). Tôi có thể được thuyết phục xa này mặc dù ...

"xuất bản" tiêu chí Nó phải chơi tốt với rsync và/hoặc git push'ing đến máy chủ sống

Tôi đã nhìn vào những năm giải pháp

Git submodules đủ đơn giản để làm thay đổi và đẩy/kéo nhưng submodules thất bại trên "Thư mục con" và tiêu chí "Real file"

Git read-cây/subtr ee merge Giải quyết vấn đề "Real Files" và read-tree thực sự cho phép bạn tham khảo thư mục con của một nhánh nhưng khi tôi làm như vậy và cố gắng hợp nhất các thay đổi trên luồng ngược dòng, Git không nhớ được nó đến từ thư mục con và toàn bộ cấu trúc của tổng thể nhánh theo dõi lib libs ... vì vậy FAIL trên tiêu chí này.

Apenwarrs cây con mở rộng (here) Tuyệt vời cho các tiêu chí "Real Files" và khá đơn giản để đẩy/kéo cho đến khi bạn muốn thực thi các "thư mục con" quy tắc. Lúc tốt nhất nó sau đó dường như yêu cầu các chi nhánh trung gian nơi bạn tách ra các thư mục mà bạn muốn từ các chi nhánh theo dõi từ xa và sau đó thêm này như là một cây con để chi nhánh chủ của bạn. Tôi đã không có nhiều may mắn sáp nhập/đẩy các thay đổi trên master trở lại repo nguồn. Tôi vẫn nghĩ rằng có thể có khả năng ở đây ...

Liên kết tượng trưng với repo bên ngoài Giải pháp tuyệt vời cho đến khi GIT ngừng theo các liên kết tượng trưng.Bây giờ nó không thành công trên "Real Files" và "xuất bản" Tiêu chí

Repos Nested Một nơi nào đó tôi thấy một câu trả lời SO mà nếu bạn một cách rõ ràng git add một thư mục chứa repo khác và bao gồm các dấu gạch chéo, git sẽ KHÔNG submodule nó nhưng thay vì theo dõi các tệp riêng lẻ. Điều này có vẻ đầy hứa hẹn nhưng nó không thành công trên tiêu chí "Thư mục con".

Điều gì tiếp theo?

Tôi đã xem các tham chiếu đến "thanh toán thưa thớt" - hoặc có thể là một thứ liên quan đến việc cắt cành. Tôi hy vọng sẽ tránh được một giải pháp có liên quan đến các kịch bản shell hoặc quá phức tạp đến nỗi nó đòi hỏi tôi phải học lại nó mọi lúc (không thường xuyên) tôi thực hiện một thay đổi cho một plugin. Nó cần phải được dễ dàng hơn việc duy trì một repo riêng biệt cho mỗi plugin và sao chép qua lại từ cài đặt CMS chính.

Chắc chắn một người nào đó có một cách chức năng đơn giản để thực hiện công việc kịch bản phổ biến này? Cảm ơn trước sự giúp đỡ ...

Trả lời

1

Rõ ràng là bạn đã nghĩ về điều này, và tôi chỉ là người mới ở git, nhưng bản năng đầu tiên của tôi là thêm .gitignore vào thư mục plugin và có mỗi plugin có đó là git repo của riêng nó. Bạn có thể làm tương tự cho các chủ đề. Vì vậy, tôi đoán đây là câu hỏi nhiều hơn là một câu trả lời - tại sao phương pháp tiếp cận đơn giản này lại không hiệu quả?

+0

Cảm ơn Mahalie. Một lý do là rất nhiều repos không đặt các tập tin lõi của họ trong thư mục gốc và thường thêm kiểm tra đơn vị và các thư mục khác trong nhánh master. Điều này dẫn đến các URL dài, xấu, đặc biệt đối với các thư viện JS cũng như quyền truy cập công khai vào nhiều tệp không cần thiết. Lý do khác là nếu bạn sử dụng git để đẩy đến một máy chủ trực tiếp (bằng cách nhân bản repo cục bộ và sau đó đẩy từ địa phương và hợp nhất trên máy chủ) thì điều này sẽ yêu cầu đẩy/sáp nhập thủ công mỗi repo. Là tất cả mọi người đang sử dụng GIT ngày nay ngay cả đối với phích cắm jquery, một chủ đề trang web điển hình có thể có 10 hoặc nhiều hơn repos trong đó. –

1

Tôi không biết nếu điều này sẽ trả lời câu hỏi của bạn đầy đủ, hoặc thậm chí bao gồm kịch bản cụ thể của bạn, nhưng tôi nghĩ rằng tôi muốn cho nó một đi trong mọi trường hợp.

Chúng tôi có nhiều dự án, nhiều dự án tham chiếu lẫn nhau, mỗi tài khoản trong kho lưu trữ Git của riêng họ. Chúng cũng được chứa trong nhiều cấp độ của các thư mục, ví dụ:

Repos 
    - Utilities 
     - Util repo1 
     - Util repo2 
    - Common 
     - Lib repo1 
     - Lib repo2 
    - Projects 
     - Client1 
      - Git repo1 
      - Git repo2 
     - Client2 repo 
     - Client3 
     ... 

Chúng tôi gặp vấn đề với việc phải đẩy/kéo/cam kết từng kho lưu trữ, trở thành cơn ác mộng. Vì vậy, chúng tôi đã viết một chương trình tiện ích nhỏ có khả năng thực hiện các thao tác đẩy, kéo, cam kết, gắn thẻ, từ xa và khác nhau Git trên nhiều thư mục cùng một lúc, cũng như xây dựng nhiều tệp giải pháp VS cùng một lúc. Nó cũng sẽ kiểm tra trong các thư mục con cho kho.

Hiện tại chúng tôi đã sử dụng nó và nó hoạt động tốt cho chúng tôi. Bạn có thể kiểm tra xem nó ra từ đây: Gitter.7z

Mở tệp ReadMe.html để xem cách sử dụng. Hy vọng điều này sẽ giúp, hãy cho tôi biết.

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