2009-03-05 37 views
6

Có thể có nhiều kho lưu trữ cho cùng một dự án không?Kiểm soát nguồn: Nhiều kho lưu trữ cho cùng một dự án

Tôi hiện đang sử dụng SVN với TortoiseSVN với các kho lưu trữ trên đĩa cứng bên ngoài tại nhà của tôi, cũng như liên quan đến giải pháp sao lưu khôn ngoan, điều này không lý tưởng.

Vì vậy, những gì tôi có trong tâm trí của tôi đang thực hiện một tài khoản với unfuddle và có một thứ hai (nhà tôi một là người đầu tiên) kho đến nơi tôi có thể cam kết đó (ngay cả đối với một giải pháp điều khiển từ xa-backup). Bây giờ tất nhiên, tôi muốn tính toàn vẹn trong mã của tôi và tôi không muốn sự khác biệt giữa hai (hoặc nhiều hơn) kho lưu trữ, có nghĩa là cả hai kho đều phải được cập nhật khi tôi cam kết mã của tôi.

Vì vậy, tôi có thể làm gì để thực hiện điều này?

Điều mà tôi có trong tâm trí của mình là cam kết lưu trữ chính của tôi (trang chủ) và sau đó nó tự động chuyển đến kho lưu trữ trực tuyến (kho lưu trữ) tự động (vì dĩ nhiên tôi không muốn cam kết thủ công cho cả hai kho lưu trữ mỗi khi tôi cam kết mã của mình)

Điều này có thể không?

Trả lời

5

Everything's possible :)

EDIT: vội vàng không bao giờ dẫn đến chất lượng cũng không trả lời của tôi, thiếu tất cả các tài liệu tham khảo của Windows trong câu hỏi. Vì vậy, đây là một chạy xuống trên làm thế nào để có được đồng bộ làm việc trên Windows.

Bạn có 2 máy trong trường hợp này:

  • Máy A: nơi kho chạy bây giờ.
  • Máy B: nơi bạn muốn đồng bộ hóa.

Tạo kho lưu trữ mới trên B mà bạn muốn đồng bộ hóa với A. Điều rất quan trọng là kho lưu trữ này trống (chạy trên rev0).

On B, trong thư mục SVN của kho mới được tạo ra, duyệt đến/móc và tạo ra các tập tin BAT sau:

khởi commit.bat

IF "%2" == "someusername" (goto :label1) else (echo "Only the someusername account may commit new revisions" >&2) 

exit 1 
goto :eof 

:label1 
exit 0 

pre-revprop -change.bat

IF "%3" == "someuser" (goto :label1) else (echo "Only the someuser user may change revision properties" >&2) 

exit 1 
goto :eof 

:label1 
exit 0 

someuser là người đồng bộ hóa tồn tại trong kho lưu trữ của máy A và là người dùng duy nhất có quyền trong kho lưu trữ của máy B. Điều rất quan trọng là không có cam kết nào được thực hiện thủ công với kho lưu trữ của máy B.

Trong thư mục /hooks của kho lưu trữ trên máy A

sau cam kết.dơi

CD PATH_TO_SUBVERSION\bin 
svnsync sync svn://machineB/repos --non-interactive --no-auth-cache --source-username machineAusername --source-password machineApassword --sync-username machineBusername --sync-password machineBpassword 

Khi những tập tin batch được đưa ra, chúng tôi cần phải nói với các kho lưu trữ trên B chúng tôi muốn đồng bộ hóa với nó:

machineB/repos svn://Machineã/repos --non-interactive --no-auth-cache --source-usernamemachineAusername--source-passwordmachineApassword--sync-usernamemáyBên tên--sync-passwordmachineBpassword

mà phải trả lại một cái gì đó như: Copied properties for revision 0.

Bây giờ mỗi khi bạn cam kết vào kho lưu trữ trên máy A nó sẽ được sao chép sang kho máy B. Điều quan trọng cần lưu ý là nếu bạn muốn đồng bộ hóa với Google Code hoặc kho lưu trữ trực tuyến khác mà họ cam kết cấu trúc thân cây/nhánh/thẻ vào bản sửa đổi 1. Bạn phải liên hệ với họ để đặt lại kho lưu trữ nếu bạn muốn sử dụng vị trí kho lưu trữ của bên thứ ba làm kho lưu trữ đồng bộ hóa.

Để cung cấp tín dụng hợp do tôi đã sao chép pre-revprop-change.bat và khởi động commit.bat từ http://www.svnforum.org/2017/viewtopic.php?t=5745&sid=06551a22d9c0b5780cf1faab6b0e8ce9

tôi chỉ thực hiện điều này bản thân mình vào một kho lưu trữ thử nghiệm và dường như làm việc như một nét duyên dáng. Tôi vui vì tôi nhận thấy câu hỏi này mặc dù svnsync đã chìm quá sâu trong hộp sọ của tôi. Tôi có nghĩa là để làm thiết lập nó khi thiết lập svn tại nơi làm việc. Vì vậy, tôi biết điều đầu tiên tôi sẽ làm vào ngày mai là gì, cảm ơn vì điều đó!

EDIT 2:

Nếu bạn, như tôi, có tấn kho generic hậu commit.bat này có thể thu hút bạn:

SET REPOS=%1 
SET REV=%2 
SET REPOS=%REPOS:D:\SVN=% 

CD "C:\Program Files\Subversion\bin" 

svnsync sync svn://machineB/%REPOS%-sync --non-interactive --no-auth-cache --source-username usernameA --source-password passwordA --sync-username usernameB --sync-password passwordB 

này bắt tên kho và sử dụng nó để tự động xác định URL đồng bộ hóa. Tôi đã trộn tất cả các kho lưu trữ đồng bộ hóa trên máy B với -sync để rõ ràng. Các bit D:\SVN là gốc svnserve trên machineB mặc dù tệp BAT chung này phải được đặt trong/hooks của gốc svnserve của máyA.

+1

Anh ấy sử dụng TortoiseSVN miễn phí, vì vậy anh ấy trên Windows. Một giải pháp Linux có thể không hữu ích. –

+0

heh thực sự, tôi đang ở trên một máy tính Windows ... –

+1

làm tha thứ cho câu trả lời vội vàng của tôi! tôi sẽ đăng lên cách tạo móc của riêng bạn trên cửa sổ. –

1

Tôi không chắc tôi đã hiểu rõ vấn đề của bạn, nhưng tôi nghĩ rằng những gì bạn đang tìm kiếm là svnsync.

Bạn có thể có kho lưu trữ chính bên trong ổ đĩa cứng của máy tính xách tay và kho lưu trữ gương tại máy chủ của bạn/máy chủ.

Chỉ cam kết thay đổi của bạn với kho lưu trữ chính và sau đó đồng bộ hóa các thay đổi đó với kho lưu trữ bản sao của bạn. Quá trình này được gia tăng, vì vậy chỉ có các sửa đổi kể từ lần đồng bộ cuối cùng được trasferred, nhưng hãy cẩn thận với các thuộc tính không phiên bản.

Ngoài ra, bạn có thể muốn xem qua số herehere.

-1

Từ góc nhìn SVN thuần túy, bạn chỉ có thể có một.Thư mục svn trỏ đến chỉ 1 repo trong thư mục làm việc của bạn.

Bạn có thể sử dụng các móc hậu-móc trên repo svn của bạn để thử và giữ cả hai repos đồng bộ .. nhưng thực sự bạn chỉ có công cụ sai nếu đó là những gì bạn muốn.

Vấn đề bạn đang mô tả nằm trong trái tim của nó là hệ thống kiểm soát phiên bản được phân phối như GIT. Cho phép bạn thực hiện các cam kết cục bộ và cũng để đẩy nó vào một kho lưu trữ từ xa.

Bạn thậm chí có thể sử dụng GIT cục bộ và SVN làm repo từ xa nếu bạn nghiêng.

  • thấy GIT cho công cụ
  • thấy GitHub cho công chúng lưu trữ
Các vấn đề liên quan