Cũng giống như một giải pháp thay thế cho câu hỏi SO " Làm cách nào để hợp nhất các tệp chọn lọc với git-merge? ", Tôi vừa tìm thấy luồng GitHub này có thể thích nghi hơn để hợp nhất toàn bộ thư mục con, dựa trên git read-tree :
- Kho lưu trữ của tôi => Thư
cookbooks
mục đích kho lưu trữ của tôi =>cookbooks/cassandra
- Kho lưu trữ từ xa =>
infochimps
Nguồn kho lưu trữ từ xa tôi muốn hợp nhất vào cookbooks/cassandra
=>infochimps/cookbooks/cassandra
Đây là các lệnh tôi đã sử dụng để hợp nhất chúng
- Thêm kho lưu trữ và tìm nạp nó
git từ xa add -f infochimps git: //github.com/infochimps/cluster_chef.git
hợp nhất git - cho phép-không liên quan-lịch sử-của chúng tôi - không cam kết thông tin / chính
(điều này thực hiện hợp nhất bằng cách sử dụng chiến lược 'của chúng tôi' ( -s ours
), loại bỏ các thay đổi từ nhánh nguồn. Điều này ghi lại thực tế là infochimps/master
đã được hợp nhất, mà không thực sự sửa đổi bất kỳ tệp nào trong nhánh đích)
- Chỉ hợp nhất
infochimps/cookbooks/cassandra
vàocassandra
git read-tree --prefix = cassandra / -u infochimps / master: cookbooks / cassandra
Điều này chỉ đọc cây cho thư mục con nguồn bắt buộc cookbooks/cassandra
, tức là trên nhánh ngược của kho lưu trữ nguồn .
Lưu ý rằng tên thư mục con đích cũng phải là cookbooks/cassandra
, hoặc bạn sẽ thấy:
fatal: Not a valid object name
git commit -m 'merge in infochimps cassandra'
Phụ lục
Thật kỳ lạ, [sửa cho tôi] - nhưng read-tree
bước này có thể thất bại như thế này:
error: Entry 'infochimps/cookbooks/cassandra/README' overlaps with 'cookbooks/cassandra/README'. Cannot bind.
... ngay cả khi cả hai tệp đều giống hệt nhau . Điều này có thể giúp:
git rm -r cassandra
git read-tree --prefix=cassandra/ -u infochimps/master:cookbooks/cassandra
Nhưng tất nhiên, hãy xác minh theo cách thủ công rằng điều này làm những gì bạn muốn.