Tôi muốn cập nhật một repo trần, và có nó làm điều gì đó sau khi một cái gì đó đã được đẩy vào nó bằng cách sử dụng một cái móc. Tôi nên sử dụng cái nào? Cuốn sách git-scm nói rằng cả hai đều cháy sau khi tất cả các ref đã được cập nhật, vì vậy tôi không biết sự khác biệt là gì.Sự khác nhau giữa sau khi nhận và sau khi cập nhật là gì?
Trả lời
Từ documentation:
hậu nhận:
này thay thế móc
<post-update>
ở chỗ nó được cả hai giá trị cũ và mới của tất cả các refs ngoài tên của họ.
sau update:
Các 'post-update' móc có thể nói gì được người đứng đầu đã được đẩy, nhưng nó không biết những gì giá trị ban đầu và cập nhật của họ, vì vậy nó là một nơi nghèo để làm đăng nhập cũ..new. Móc
<post-receive>
không nhận được cả giá trị ban đầu và được cập nhật của các lần chỉnh sửa. Bạn có thể xem xét nó thay vào đó nếu bạn cần chúng.
Một recent commit cho Git 2.2 + (November 2014), bởi Junio C Hamano (gitster
) làm đề cập đến:
Các
pre-receive
vàpost-receive
móc được thiết kế để có một sự cải tiến so với phong cách cũupdate
vàpost-update
móc, mà mất thông tin cập nhật trên dòng lệnh của họ và bị giới hạn bởi giới hạn độ dài dòng lệnh.Thông tin tương tự được nạp từ đầu vào tiêu chuẩn vào móc trước/sau khi nhận để thay thế giới hạn này.
Bắt buộc phải sử dụng các móc kiểu mới này để tiêu thụ thông tin cập nhật hoàn toàn từ luồng đầu vào tiêu chuẩn. Nếu không, họ sẽ có nguy cơ giết chết quá trình nhận gói thông qua
SIGPIPE
.
tại Nó cho biết thêm:
Nếu một cái móc không muốn nhìn vào tất cả các thông tin, nó rất dễ dàng để gửi đầu vào tiêu chuẩn của nó để
/dev/null
(có lẽ việc sử dụng thích hợp của móc có thể cần phải biết chỉ một thực tế là một cú đẩy được thực hiện, mà không cần phải biết những gì các đối tượng đã được đẩy để cập nhật mà refs), và điều này đã được thực hiện bởi móc hiện có được viết cẩn thận. Tuy nhiên, bởi vì không có cách nào tốt để luôn thất bại móc không tiêu thụ đầy đủ đầu vào (một cú đẩy nhỏ có thể dẫn đến bản ghi cập nhật ngắn có thể vừa với bộ đệm ống mà quá trìnhreceive-pack
có thể quản lý viết trước khi móc có cơ hội thoát ra mà không đọc bất kỳ thứ gì, điều này sẽ không dẫn đến chết theo SIGPIPE củareceive-pack
), có thể dẫn đến khó chẩn đoán lỗi ảo "một lần trong một mặt trăng xanh".Nhấc "móc này phải tiêu thụ đầy đủ đầu vào" của họ.
Hmm. Chỉ cần làm rõ. 'Nâng này "móc phải tiêu thụ đầy đủ đầu vào của họ" ủy nhiệm. " - nó có nghĩa là chính xác những gì nó đọc: nó * đã không * được dỡ bỏ, nhưng chỉ là một điều ước cho ông già Noel, bị thất lạc một cách kỳ lạ trong một thông điệp cam kết? Hoặc là nó thực sự "nâng * ed *", vì vậy chúng tôi cuối cùng có thể ăn mừng? :) Cảm ơn! –
@Sz. Nó được nâng lên. Đó là bởi vì "Nhiệm vụ không được thực thi nghiêm ngặt không giúp chúng tôi bắt lỗi trong số móc" Do hậu quả của nhiệm vụ được dỡ bỏ đó: "Nếu móc có lý do chính đáng để quyết định kết quả hoạt động mà không đọc thông tin chúng tôi cho nó ăn, hãy để nó làm như vậy. ” – VonC
OK, cảm ơn. Vấn đề là với từ ngữ, căng thẳng không chính xác được sử dụng trong thông điệp, làm cho nó mơ hồ. Và git đã dạy tôi không bao giờ tin vào sự lựa chọn mơ hồ của nó về những lời nói theo mệnh giá. Và bây giờ tôi có thể +1 câu trả lời của bạn, mà tôi có thể xem xét hoàn chỉnh với nhận xét của bạn. –
- 1. SafeModeResult là null sau khi cập nhật
- 2. Sự khác nhau giữa Bước xây dựng tùy chỉnh và Sự kiện sau khi xây dựng là gì?
- 3. postgres cập nhật sau khi chọn
- 4. Sự khác biệt giữa CẬP NHẬT VÀ CẬP NHẬT
- 5. Sự khác nhau giữa XSL Pattern và XPath là gì?
- 6. Sự khác nhau giữa WebConfigurationManager và ConfigurationManager là gì?
- 7. Warnings sau khi cập nhật Xamarin Studio
- 8. tạo trình kích hoạt cho Sau khi chèn, sau khi cập nhật và sau khi xóa trong SQL
- 9. Sự khác nhau giữa cập nhật Mercurial và backout
- 10. Sự khác nhau giữa ImageMagick và GraphicsMagick là gì?
- 11. Sự khác nhau giữa proxy và reify là gì?
- 12. Sự khác nhau giữa "Cập nhật ảnh chụp nhanh" và "Cập nhật phụ thuộc" trong m2eclipse là gì?
- 13. Sự khác nhau giữa `after_create` và` after_save` là gì và khi nào nên sử dụng?
- 14. là gì sự khác biệt giữa những điều sau đây khi sử dụng Rùa SVN
- 15. Sự khác nhau giữa init() và window.init() là gì?
- 16. Sự khác nhau giữa Ctrl-C và SIGINT là gì?
- 17. Sự khác nhau giữa "<>" và "! =" Là gì?
- 18. Sự khác nhau giữa NHibernate và iBATIS.NET là gì?
- 19. Sự khác nhau giữa Model, ModelMap và ModelAndView là gì?
- 20. Sự khác nhau giữa @dynamic và @synthesize là gì?
- 21. Sự khác nhau giữa WebRequest.DefaultWebProxy và WebRequest.GetSystemWebProxy() là gì?
- 22. Sự khác nhau giữa CreateObject và Wscript.CreateObject là gì?
- 23. Sự khác nhau giữa innerText và outerText là gì?
- 24. Sự khác nhau giữa Pyrus và Composer là gì?
- 25. Sự khác nhau giữa toGMTstring() và toUTCstring() là gì?
- 26. Sự khác nhau giữa // và /// trong Visual Studio là gì?
- 27. Sự khác nhau giữa Request.Url.Query và Request.QueryString là gì?
- 28. Sự khác nhau giữa git reflog và log là gì?
- 29. Sự khác nhau giữa ~> và> = khi chỉ định rubygem trong Gemfile là gì?
- 30. Sự khác nhau giữa `Enum.name()` và `Enum.toString()` là gì?
Tất cả những gì tôi muốn làm là khởi chạy tập lệnh sẽ cập nhật tệp trên máy chủ của tôi (qua FTP) dựa trên cây đang hoạt động sau khi tôi đã đẩy tới repo đó. Vì vậy, nó là ba nơi: một repo địa phương, một repo địa phương, và một vị trí FTP (không git).Khi tôi đẩy vào một repo, tôi sẽ là thời điểm tốt nhất để khởi chạy một kịch bản như vậy (tôi sẽ sử dụng 'git diff' để tìm ra những file nào trên FTP)? – trusktr
sau khi nhận là một tập hợp siêu chức năng của bản cập nhật, và sau khi người đứng đầu được đẩy nên tôi tưởng tượng sau khi nhận được là đủ. –
Tôi đồng ý với Waynn Lue - chúng tôi làm điều gì đó tương tự và sử dụng 'post-receive' – Nic