2010-01-06 28 views
13

Tôi có thể đặt móc để kéo "kéo"/"đẩy" từ/đến git-svn kho lưu trữ được quản lý không?Hooks cho git-svn

Tình huống là tôi có máy chủ dự án trên Mã Google và sử dụng git để quản lý bản sao làm việc cục bộ. Tôi muốn đặt một số móc để khi kiểm tra vào/ra dữ liệu từ/đến kho SVN với git svn fetchgit svn dcommit, tôi có thể thực hiện một số sửa đổi đối với cam kết. Vì tôi không lưu trữ SVN kho lưu trữ, tôi không thể đặt móc ở phía máy chủ.

Có móc nào tôi có thể sử dụng không? Hoặc có cách nào để "đánh dấu" một nhánh thông thường, để git pullgit push trên nhánh đó sẽ kiểm tra vào/ra từ/đến một kho lưu trữ SVN thay vào đó, do đó các móc git bình thường có thể được sử dụng?

Xin cảm ơn trước.

Trả lời

9

Như được minh họa bởi this thread, bạn có thể có móc ở bên Subversion có thể thực sự từ chối git svn dcommit của bạn dựa trên một số tiêu chí.

Nhưng nếu bạn cần git móc ở phía Git, tôi khuyên bạn nên thiết lập một trung gian bare Git repository (trần để đẩy/kéo dễ dàng).
On rằng repo trần, bạn có thể có bất cứ móc bạn cần, như thể hiện trong "how do I deploy multiple branches to different directories via git push?" (không phải về svn nhưng chỉ ở đây đến từng chi tiết một thiết lập tương tự của một repo thêm)

  • nếu repo trung gian xác nhận của bạn đẩy, nó có thể kích hoạt git svn dcommit.
  • cũng có thể, theo yêu cầu git fetch, kích hoạt git svn fetch và xác thực nó trước khi cho phép git fetch của riêng bạn tiến lên phía trước.

(2 năm sau)

David Souther đề xuất một giải pháp trong his blog (April 2012)

Các giải pháp tôi có là phải có một kho lưu trữ với người đứng đầu phân chia. Hầu hết thời gian, kho lưu trữ trung gian sẽ có một thư mục làm việc trống. Khi một sự cố xảy ra, nó sẽ kiểm tra chủ, xác minh việc xây dựng, và đẩy tới svn, trước khi trở về nhánh trống.

Chúng tôi sẽ thiết lập repo git trung gian với hai nhánh.

  • chủ vẫn sẽ trỏ đến các repo SVN,
  • và chi nhánh mới stage sẽ cho phép chúng tôi giữ thư mục làm việc sạch sẽ và đồng bộ với những thay đổi ở hạ lưu.

Kiểm tra his gist.

+0

Brilliant! Kho lưu trữ trung gian sẽ giải quyết được vấn đề của tôi. Nhưng tôi muốn giữ câu hỏi mở trong vài ngày để xem liệu có một giải pháp thanh lịch hơn không :) – iamamac

+0

@lamamac: tuyệt đối. Đó là những gì một tiền thưởng cho;) – VonC

+0

"nó cũng có thể, trên một git fetch yêu cầu, kích hoạt một git svn lấy và xác nhận nó" - móc nào bạn sẽ sử dụng cho điều này - tôi không thể nhìn thấy bất cứ điều gì rõ ràng trong githooks mà sẽ được kích hoạt trên máy chủ khi máy khách cố kéo. – Greg

0

Có một git-remote-cvs remote helper trong các tác phẩm; có lẽ ai đó sẽ làm tương tự cho svn. Móc bình thường cho các hoạt động từ xa nên được gọi trước và sau khi gọi những người trợ giúp này.

3

https://github.com/hkjels/.dotfiles/blob/master/zsh/git-svn.zsh

Nếu bạn sử dụng zsh, tôi tin rằng đây là người bạn đồng hành tốt cho git-svn. Chỉ cần đặt các móc của bạn vào .git/hooks và thêm tiền tố vào lệnh bằng svn-.

Ví dụ ".git/móc/post-svn-rebase"

Các kịch bản cũng cho phép việc sử dụng các bí danh

+0

Ai đó đã tạo phiên bản bash này dựa trên tập lệnh zsh này tại đây: https://github.com/rkitover/git-svn-hooks – tutuDajuju

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