2016-03-23 16 views
11

Tôi đã sử dụng git một lúc nhưng gần đây mới bắt đầu sử dụng packrat. Tôi muốn kho lưu trữ của mình được tự chứa nhưng đồng thời tôi không muốn bao gồm các gói CRAN khi chúng có sẵn. Có vẻ như một khi R được mở trong một dự án với packrat nó sẽ cố gắng sử dụng các gói từ thư viện dự án; nếu chúng không có sẵn thì nó sẽ cố gắng cài đặt từ src trong thư viện dự án; nếu chúng không có sẵn, nó sẽ xem xét các thư viện được cài đặt trong máy tính đó. Nếu một thư viện không có sẵn trong máy tính; nó sẽ xem xét CRAN tiếp theo?Sử dụng R với git và packrat

Tôi nên đưa những tệp nào vào repo git của mình ở mức tối thiểu (ví dụ: packrat.lock)?

+0

Trả lời câu hỏi này trên danh sách email: https://groups.google.com/d/msg/packrat-discuss/BDPQoHQOqcw/WASTdOEJZrYJ – Ben

Trả lời

24

Bạn có thể chọn đặt kho lưu trữ giống CRAN bên ngoài với tarballs nguồn của các gói và các phiên bản mà bạn muốn có sẵn cho dự án của bạn. Tuy nhiên, hành vi mặc định là xem CRAN tiếp theo, như bạn đã xác định trong câu hỏi của mình. Kiểm tra các tập tin packrat.lock, bạn sẽ thấy rằng đối với mỗi gói bạn sử dụng trong packrat, có một tùy chọn gọi là source: CRAN (nếu bạn đã tải xuống tệp từ CRAN, tức là).

Khi bạn có một tập tin nguồn gói lưu trữ cục bộ, các nội dung của khóa cho biết sự thay đổi gói như sau:

Package: FooPackage Source: source Version: 0.4-4 Hash: 44foo4036fb68e9foo9027048d28 SourcePath: /Users/MyName/Documents/code/myrepo/RNetica

tôi là một chút không rõ ràng về câu hỏi cuối cùng của bạn: What files should I include in my git repo as a minimum (e.g., packrat.lock)? Nhưng tôi sẽ thực hiện việc này dưới dạng một sự kết hợp của những tệp nào sẽ có mặt để packrat chạy, và b) tệp nào trong số những tệp đó phải được cam kết với git-repo. Để trả lời câu hỏi đầu tiên, tôi minh họa với gói khởi tạo trên một dự án R hiện có.

Khi bạn chạy packrat::init(), hai điều quan trọng xảy ra (trong số những thứ khác): 1. Tất cả giàn giáo packrat, bao gồm tarballs nguồn, vv được tạo theo: PackageName/packrat/. 2. packrat/lib*/ được thêm vào tệp .gitignore của bạn.

Vì vậy, từ điều này, chúng ta có thể thấy rằng mọi thứ dưới packrat/lib*/ không cần phải cam kết với git-repo của bạn. Điều này làm 3 file sau để được cam kết:

  1. packrat/init.R
  2. packrat/packrat.lock
  3. packrat/packrat.opts

packrat.lock là cần thiết cho cộng tác với người khác thông qua một hệ thống kiểm soát phiên bản; nó giúp giữ cho thư viện riêng của bạn được đồng bộ. packrat.opts cho phép bạn chỉ định các tùy chọn dự án cụ thể khác nhau cho packrat. Tệp được tạo tự động bằng cách sử dụng get_optsset_opts. Cam kết tệp này với git-repo sẽ đảm bảo rằng mọi tùy chọn bạn chỉ định được duy trì cho tất cả các cộng tác viên. Tệp cuối cùng được cam kết với repo là .Rprofile. Tập tin này yêu cầu R sử dụng thư viện gói riêng (khi R được bắt đầu từ thư mục dự án).

Tùy thuộc vào nhu cầu của bạn, bạn có thể chọn cam kết các bóng tar nguồn vào kho lưu trữ hay không. Nếu bạn không muốn chúng có sẵn trong git-repo của bạn, bạn chỉ cần thêm packrat/src/ vào .gitignore. Tuy nhiên, điều này có nghĩa là bất kỳ ai truy cập vào git-repo sẽ không có quyền truy cập vào mã nguồn gói và các tệp sẽ được tải xuống từ CRAN hoặc từ bất kỳ nơi nào dòng nguồn quyết định trong tệp packrat.lock.

Từ câu hỏi của bạn, có vẻ như cam kết nội dung thư mục packrat/src/ với repo của bạn có thể là những gì bạn cần.

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