2010-03-30 35 views
7

Tôi mới đến với thế giới của Git, GitHub và Heroku. Cho đến nay, tôi đang tận hưởng mô hình này nhưng đến từ một nền tảng với SVN, mọi thứ dường như hơi phức tạp với tôi trong thế giới của Git. Tôi đang đối mặt với một vấn đề mà tôi đang tìm kiếm một giải pháp.Git + GitHub + Heroku

Kịch bản:

1. Tôi đã thiết lập một dự án tư nhân mới trên GitHub. Tôi chia rẽ dự án riêng tư và bây giờ tôi có cấu trúc sau trong chi nhánh của tôi:

/project 
     /apps 
     /my-apps 
      /my-app-1 
      .... 
      /my-app-2 
      .... 
      /your-apps 
      /your-app-1 
       .... 
      /your-app-2 
       .... 
     /plugins 
     .... 

Tôi có thể cam kết mã trong Fork trên GitHub từ máy của tôi trong bất kỳ thư mục nào tôi muốn. Sau đó, chúng sẽ được quản trị viên của dự án kéo vào kho lưu trữ chính.

2. Đối với mỗi ứng dụng riêng lẻ trong thư mục ứng dụng, tôi đã thiết lập một ứng dụng trên Heroku là một Git Repo trong đó tôi đẩy các thay đổi của mình khi tôi hoàn thành câu chuyện của người dùng từ máy cục bộ. Tóm lại, mọi ứng dụng trong thư mục ứng dụng là một ứng dụng Rails được lưu trữ trên Heroku.

Vấn đề:

Những gì tôi muốn là khi tôi đẩy những thay đổi của tôi vào Heroku, họ có thể được cam kết vào ngã ba dự án của tôi trên GitHub là tốt, vì vậy, nó cũng có mã mới nhất tất cả các thời gian.

Vấn đề tôi thấy là mã trên Heroku là Git Repo trong khi các thư mục tôi có trên GitHub là một phần của Repo. Cho đến nay, những gì tôi đã nghiên cứu là có một cái gì đó được gọi là Submodule trong Git World mà có thể đến để giải cứu, tuy nhiên, tôi đã không thể tìm thấy một số hướng dẫn newbie.

Ai đó trong cộng đồng có thể chia sẻ suy nghĩ và giúp tôi xác định giải pháp của vấn đề này không?

Trả lời

9

Ý tưởng đằng sau mô-đun con là chúng là tất cả các kho lưu trữ git riêng biệt mà bạn có thể đưa vào một tệp chính và thay vào đó bao gồm tất cả các tệp nó bao gồm liên kết tới mô-đun con đó.

Làm thế nào để sử dụng các môđun con

Để sử dụng một submodule, trước tiên bạn phải giải nén ra thư mục và tạo ra nó như kho git riêng của mình bằng cách sử dụng git init. Sau đó, bạn có thể tải riêng phần này lên Github hoặc [địa điểm bạn chọn] và sử dụng nó làm mô-đun con, sử dụng lệnh: git submodule add [place/to/put/it] git://github.com/you/proj1.

Ly thân là tốt nhất

tôi sẽ nghĩ rằng nó tốt hơn để lại những tách ra như kho git của riêng mình và push to Heroku từ mỗi một. Nguyên nhân? Nó có nhiều khả năng (tôi cảm thấy) rằng bạn sẽ được làm việc trên một tại một thời điểm và làm một git commitgit push heroku master cho rằng chỉ có một.

Nếu bạn muốn tuy nhiên để triển khai tất cả các ứng dụng cùng một lúc bạn có thể recurse xuống cây thư mục sử dụng kịch bản Ruby này đặt trong thư mục cấp cao nhất:

Dir["**/*"].select { |dir| File.directory?(dir) }.each do |f| 
    Dir.chdir(dir) do 
    `git push origin master` 
    `git push heroku master` 
    end 
end 

Tất nhiên điều này sẽ chỉ làm việc nếu bạn đã dàn dựng tất cả các thay đổi của bạn.Tôi không thể nghĩ ra một cách để tự động hóa nó như Ruby < = 1.9 không có module để đọc suy nghĩ của bạn.

+0

Cảm ơn câu trả lời của bạn Ryan. Như bạn đã đề cập, submodules cần phải được tạo ra, tuy nhiên, tôi muốn biết nếu mọi submodule cần phải được lưu trữ riêng trên GitHub hoặc nó có thể nằm trong kho dự án là tốt. –

+1

Lưu trữ chúng một cách riêng biệt sẽ là cách tốt nhất. –

+1

Về cơ bản, chúng tôi không muốn lưu trữ chúng một cách riêng biệt, lý do chính là các kho lưu trữ không được công khai và do đó chúng tôi không muốn chia sẻ với mọi người. Ngoài ra, lưu trữ các kho lưu trữ riêng tư trên GitHub sẽ tốn tiền. –

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