kiểm tra một phần của kho git


8

Làm cách nào tôi có thể kiểm tra chỉ một phần của kho Git? Tôi có một kho lưu trữ có nhiều mô-đun và tôi chỉ muốn một trong các mô-đun được cài đặt trên một trang web cụ thể.

Trong Subversion, tôi sẽ làm svn export http://example.com/repository/path/to/module ./module-name.

Câu trả lời:


4

Như @Chris đã đề cập, các phiên bản hiện tại của Git không hỗ trợ thanh toán thưa thớt.

Để chuyển đổi một repo cục bộ để chỉ chứa các thư mục được chỉ định:

cd <repo/location>
git config core.sparsecheckout true
echo desiredDir/ >> .git/info/sparse-checkout    # repeat to add multiple subdirs (the rest will be removed)

Bây giờ, để loại bỏ tất cả, nhưng các thư mục được chỉ định:

 git read-tree -mu HEAD             # remove all, but those in .git/info/sparse-checkout

2

Tôi nghĩ rằng tương đương gần nhất với xuất khẩu svn sẽ là kho lưu trữ git . Bạn có thể kéo các thư mục path/to/moduletừ các bậc thầy chi nhánh của một kho lưu trữ và đặt trong thư mục địa phương module-namenhư thế này:

git archive --remote=url-of-Git-repository --prefix=module-name/ master:path/to/module |
tar xf -

Nếu máy chủ từ xa không hỗ trợ lưu trữ, thì hãy kéo kho lưu trữ từ một bản sao (cục bộ) cục bộ (sử dụng bản sao trần để tránh có một bản sao khác của tệp trong kho lưu trữ cục bộ, nếu điều đó quan trọng).


Tuy nhiên, việc bạn sử dụng kiểm tra trên mạng của bạn, hãy nói với tôi rằng bạn muốn có một cây công việc Git chức năng chỉ với một số tệp hiện có. Người ta có thể thực hiện điều này với chức năng kiểm tra thưa thớt trên mạng được giới thiệu trong Git 1.7.0.

Kích hoạt chức năng này bằng cách

  1. thiết lập các core.sparseCheckout tùy chọn cấu hình để “true” * , và
  2. điền vào $GIT_DIR/info/sparse-checkouttệp trên mỗi kho lưu trữ với các mẫu cho tên đường dẫn để giữ ** .

    Người ta có thể sử dụng bit Skip-worktree bit cấp thấp trong chỉ mục *** để quản lý độ thưa của các tệp riêng lẻ, nhưng có lẽ dễ sử dụng cơ chế cấp cao hơn thay thế.

Có một số lỗ hổng trong giao diện người dùng tổng thể (nghĩa là không có cách nào dễ dàng để nói rằng sao chép kho lưu trữ tại URL này mà chỉ kiểm tra X, Y và Z.

* Xem “core.sparseCheckout” trong git config manpage
** xem “thanh toán thưa thớt” trong git read-cây manpage
*** thấy “chút Skip-worktree” trong git update-index manpage


Tôi không cần cây công việc ( svn exportxuất bản sao không hoạt động để sử dụng sản xuất). Làm gì module-1tương ứng với? Các thư mục trong kho lưu trữ?
ceejayoz

Tôi viết lại ví dụ lưu trữ git để song song tốt hơn ví dụ SVN của bạn. Nhưng để trả lời cho câu hỏi của bạn, có module-1, module-2file-alà tất cả các ví dụ về tên đường dẫn của các tệp được lưu trữ trong cây được tham chiếu bởi cam kết được tham chiếu bởi ref mastertrong kho lưu trữ. Ví dụ mới đặt đặc tả thư mục trực tiếp vào đối số cây-ish để nó có thể sử dụng --prefixtùy chọn để trích xuất một thư mục từ kho lưu trữ trực tiếp vào một thư mục cục bộ của một tên khác.
Chris Johnsen

1

https://stackoverflow.com/questions/600079/is-there-any-way-to-clone-a-git-reposectives-sub-directory-only

Không, điều đó là không thể trong Git.

Việc thực hiện một cái gì đó như thế này trong Git sẽ là một nỗ lực đáng kể và điều đó có nghĩa là tính toàn vẹn của kho lưu trữ khách hàng không còn có thể được đảm bảo. Nếu bạn quan tâm, hãy tìm kiếm các cuộc thảo luận về "bản sao thưa thớt" và "tìm nạp thưa thớt" trong danh sách gửi thư git.


Vâng. Một thiếu sót khá khó hiểu, nếu bạn hỏi tôi. Có lẽ tôi sẽ kết thúc việc sử dụng thanh toán vào một thư mục và liên kết đến nó từ thư mục web của tôi. Tôi muốn chia nó thành các kho riêng biệt, nhưng Github tính phí cho mỗi kho lưu trữ cho các kho riêng.
ceejayoz

6
Git 1.7.0 giới thiệu kiểm tra thưa thớt.
Chris Johnsen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.