2009-06-30 37 views
7

Tôi đang thực hiện một số công việc để theo dõi lỗi đã biết trong công cụ hỗ trợ git và tôi muốn sao chép kho lưu trữ (có thể nhiều lần) cho mục đích thử nghiệm. Tôi muốn các liên kết cứng được tạo ra cho cơ sở dữ liệu đối tượng kho lưu trữ ban đầu để không lãng phí không gian đĩa lưu trữ nhiều bản sao của các đối tượng giống hệt nhau với các giá trị SHA giống nhau. git clone thực hiện điều này một cách độc đáo, nhưng tiếc là tôi dường như không thể tìm cách tạo git clone cho tôi bản sao mới của kho lưu trữ được thiết lập như kho gốc:Làm cách nào để sao chép/sao chép kho lưu trữ git mà không lãng phí dung lượng?

  1. điểm nhân bản trở lại kho sao chép như nguồn gốc của nó, nhưng tôi muốn nó có nguồn gốc tương tự như kho lưu trữ sao chép
  2. clone gió lên chỉ với một chi nhánh, nhưng tôi muốn nó có tất cả các chi nhánh của các kho lưu trữ sao chép

tôi có thể cải thiện một số điều này bằng cách sử dụng git clone --mirror, nhưng điều đó sẽ chỉ hoạt động để tạo một kho lưu trữ trống và kho lưu trữ mà tôi đang thử nghiệm trên không phải là trần, và các công cụ hỗ trợ tôi đang cố gắng để gỡ lỗi không hoạt động trên kho trần.

Tôi đã nghĩ đến việc viết vòng lặp nhanh để tạo cơ sở dữ liệu đối tượng mới đầy đủ các liên kết cứng đến cơ sở dữ liệu đối tượng gốc, sau đó sao chép mọi thứ khác ra khỏi thư mục gốc .git, và sau đó thực hiện thanh toán git, nhưng tôi lo ngại rằng điều này là phức tạp, đủ để dễ bị lỗi và tôi không biết đủ để thực hiện loại phẫu thuật cấp thấp này một cách chính xác và sẽ xây dựng một kho lưu trữ với các lỗi tinh tế. Phương pháp này có nên hoạt động theo lý thuyết không?

Tốt hơn, có cách nào để chuyển tùy chọn để git clone để làm cho nó làm những gì tôi muốn?

Có cách nào tôi có thể tạo một kho lưu trữ mới nhưng nói với nó rằng cơ sở dữ liệu đối tượng của nó nằm trong một thư mục khác, về cơ bản bảo nó chia sẻ cơ sở dữ liệu đối tượng từ kho lưu trữ gốc?

Nếu không có công trình nào ở trên hoạt động, thì tôi chỉ còn lại một cp -pr, điều này sẽ tiêu tốn rất nhiều không gian và tốn thời gian.

Trả lời

5

Tôi nghĩ rằng bạn đang tìm kiếm

git clone --reference=/path/to/existing/repo url 

Trong git biệt ngữ này được biết đến như sử dụng "khuyết". Có những vấn đề tiềm năng với tùy chọn này, như đã đề cập trong git clone help nhưng có thể phù hợp với mục đích của bạn.

Trợ giúp của Dustin git-alternates.

0

Sử dụng "git clone --mirror", sau đó thay đổi từ kho trống sang không trần (đổi tên repo.git thành repo/.git, sao chép tệp .git/config, thư mục làm việc thanh toán bằng "git checkout HEAD"). Lưu ý: Tôi đã không kiểm tra nếu nó hoạt động như dự định!

0

Sử dụng git sao chép bằng tùy chọn --no-checkout. Cập nhật kho git với git fetch thay vì git pull để tránh thanh toán.

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