Nhận một bản sửa đổi từ Git


14

Có lịch sử sửa đổi Git đầy đủ có rất nhiều lợi ích như là một phần của quá trình phát triển.

Nhưng sản phẩm của chúng tôi là mã nguồn, chúng tôi đang sử dụng các ngôn ngữ theo kịch bản không cần biên dịch hoặc xử lý, và sau đó lịch sử Git trở thành gánh nặng cho việc triển khai - trong ví dụ của chúng tôi, chúng tôi triển khai một môi trường ảo sạch sau mỗi thay đổi, có một số triển khai trên một máy duy nhất.

Có một số cách để giảm số lượng lịch sử, ví dụ như các bản sao nông có hiệu quả phụ thuộc vào mức độ sửa đổi sâu trong nhánh, thực hiện tìm nạp thay vì sao chép nhưng sau đó bạn vẫn nhận được lịch sử từ sửa đổi và quay lại hoặc nhận được đầy đủ repo một lần sau đó kéo khi cần nhưng điều này là lãng phí về không gian đĩa và có xu hướng ít đáng tin cậy hơn.

Có cách nào để có được một bản sửa đổi từ Git mà không có lịch sử không?


1
Câu hỏi và trả lời liên quan tại SO stackoverflow.com/questions/26135216/ từ
Evgeny

Câu trả lời:


16

Bản sao nông

Bạn thực sự có thể lấy một bản sao nông từ Git bằng cách sử dụng:

git clone --depth=1 <url>

Điều này vẫn sẽ sao chép repo và tạo một .gitthư mục với các đối tượng, chỉ có kích thước nhỏ hơn (sự khác biệt tùy thuộc vào tổng kích thước tệp của bạn so với kích thước lịch sử).

Lưu trữ Git

Bạn cũng có thể sử dụng git-archive để trích xuất kho lưu trữ của repo:

Tạo một kho lưu trữ định dạng đã chỉ định chứa cấu trúc cây cho cây được đặt tên và ghi nó ra đầu ra tiêu chuẩn. Nếu được chỉ định, nó được thêm vào tên tệp trong kho lưu trữ.

Trong các ví dụ, nó hiển thị ví dụ:

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz

Tạo một tarball nén cho bản phát hành .

Lưu trữ Git, lưu trữ API

Nếu bạn đang lưu trữ repo của mình trên GitHub, thì bạn có thể sử dụng API lưu trữ của họ :

https://api.github.com/repos/<username>/<repository>/zipball/<commit_hash>

Bitbucket.org có chức năng tương tự cho việc này:

https://bitbucket.org/<username>/<repository>/get/<branch_name|commit_hash|tag>.zip


7ochem, có thể lệnh gzip cần phải là gzip -c ....
Romeo Ninov

11

Đừng triển khai repo git của bạn. Phát triển một phương pháp triển khai thực sự. Ngay cả khi nó đơn giản như sắp xếp một kho lưu trữ (= xây dựng một tạo phẩm chỉ với các tệp cần thiết được triển khai) của các tập lệnh được triển khai.

Ngay cả khi bạn không sao chép phần đầu của kho lưu trữ nguồn, bạn có thể không cần kiểm tra đơn vị, tài liệu, hồ sơ lint và các phù du hỗ trợ khác trong môi trường được triển khai của bạn.

Lưu ý : đối với kho ngôn ngữ được viết theo kịch bản không thực sự có bước "xây dựng", một cách tầm thường để phát hành một vật phẩm sẽ là đóng gói chúng trong một kho lưu trữ, chẳng hạn như tar hoặc vòng / phút. Sau đó, để "triển khai", bạn gỡ bỏ tệp lưu trữ hoặc cài đặt vòng / phút. điều này loại bỏ sự cần thiết của công cụ git trong chuỗi triển khai của bạn (không phải tất cả các máy chủ prod sẽ có những công cụ dev đó).


Không có vấn đề gì (hoặc thậm chí là thách thức!) một câu trả lời - đó là điều làm cho Stack Exchange trở nên tuyệt vời :) đối với kho ngôn ngữ được viết theo kịch bản không thực sự có bước "xây dựng", một cách tầm thường để phát hành một tạo tác sẽ là gói chúng trong một kho lưu trữ, chẳng hạn như tar hoặc vòng / phút. sau đó, để "triển khai", bạn gỡ bỏ tệp lưu trữ hoặc cài đặt vòng / phút. điều này loại bỏ sự cần thiết của công cụ git trong chuỗi triển khai của bạn (không phải tất cả các máy chủ prod sẽ có những công cụ dev đó)
RubyTuesdayDONO

1
@ Pierre.Vriens vâng, bạn đang thiếu những gì được đề xuất là lưu trữ một kho lưu trữ, tức là xây dựng một tạo phẩm chỉ với các tệp cần thiết trong đó sẽ được triển khai. Điều đó nói rằng tôi đồng ý rằng đó không phải là một câu trả lời chất lượng và điểm này nên được mở rộng. Chúng tôi đang ở giai đoạn thử nghiệm riêng tư và câu trả lời nên tránh rõ ràng
Tensibai

Sau đó, tôi không thấy điều này mang lại nhiều hơn câu trả lời được chấp nhận, nếu nó hướng đến kho lưu trữ phù hợp ... nó chỉ là dư thừa, bạn nên chỉnh sửa để mở rộng theo cách này iMHo
Tensibai

1
Vui lòng kiểm tra chỉnh sửa câu trả lời của bạn (chỉ tích hợp nhận xét thú vị của bạn). Tất nhiên, vui lòng cải thiện / làm lại, hoặc chỉ quay lại nếu bạn không thích chỉnh sửa của tôi. BTW: nhận xét của bạn (= ghi chú tôi đã thêm) khiến tôi nghĩ như "thực sự, đơn giản vậy sao? Lại là một ví dụ về cách chúng tôi hoàn thành công việc trong zOS ... với z cho thời gian chết không ...". Tôi nghĩ rằng đã đến lúc bắt đầu đặt câu hỏi cho nhiều câu hỏi / câu trả lời hơn thông qua các bình luận tương tự ... Đừng thách thức tôi quá nhiều ...
Pierre.Vriens

Tôi không có ý định rằng đây là câu trả lời hoàn chỉnh hoặc kiểu mẫu, nhưng tôi không thấy ai khác giải quyết con voi trong phòng: nếu bạn sử dụng git để "triển khai" dự án của mình, bạn sẽ "có một khoảng thời gian tồi tệ" ;)
RubyTuesdayDONO

6

Câu hỏi có cách nào để có được một bản sửa đổi từ Git mà không có lịch sử không?

Để có được một kho lưu trữ, không có cách nào, chủ yếu là vì không có "sửa đổi". Cửa hàng Git cam kết, đó là những thay đổi từ trạng thái trước đó.
Nếu bạn muốn kho lưu trữ của mình tại một thời điểm cụ thể, bạn phải thực hiện cam kết tại thời điểm này và tất cả đó là tổ tiên hoặc bạn sẽ chỉ nhận được các thay đổi được thực hiện trong cam kết.

Để tránh nhầm lẫn: Nhân bản nông đang lấy lịch sử cần thiết và sau đó cắt nó ra không gian trống, cây vẫn được tạo ra từ lịch sử.

Đối với các giải pháp, câu trả lời @ 7ochem không bao gồm chúng.

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.