2011-02-08 25 views
28

Tôi đang làm việc trên một dự án hiện có trên SVN. Tuy nhiên, tôi sẽ không có quyền truy cập vào internet trong một vài ngày và sẽ làm việc trong dự án của tôi.Làm việc ngoại tuyến với SVN trên máy cục bộ tạm thời

Có cách nào để tạo bản sao của kho lưu trữ trên máy cục bộ của tôi, cam kết thay đổi nó và khi tôi truy cập Internet "đẩy" chúng vào kho lưu trữ được chia sẻ? Suy nghĩ về Mercurial ở đây, có đáng để di cư hoàn toàn không ?!

+7

Bởi vì anh ấy muốn làm cam kết ẩn của những thay đổi thay vì một changeset lớn tất cả ở cuối. –

+0

bởi vì tôi cam kết thay đổi nhỏ và do đó sẽ cần phải cam kết trên kho của tôi trong khi đi du lịch ... và do đó sẽ cần một kho lưu trữ cục bộ (có thể là nhân bản vô tính) để cam kết. – Karan

Trả lời

49

Vấn đề của bạn có vẻ với tôi như trường hợp sử dụng cho git-svn:

  • lập repo Git của bạn: git svn clone http://svn.example.com/project/trunk
  • trong khi được trực tuyến, cam kết thay đổi của bạn để SVN
  • trước khi đi offline, làm git svn rebase để nhận repo Git của bạn đồng bộ với SVN repo
  • khi ngoại tuyến, cam kết với repo Git sử dụng git commit
  • khi trở lại trực tuyến một lần nữa, làm một git svn dcommit để đẩy những thay đổi của bạn trở lại repo SVN

Tôi đang sử dụng dòng công việc này hàng ngày!

Bạn nhận được hai lợi thế rất lớn khi làm điều đó:

  • lịch sử SVN hoàn chỉnh của bạn được sao lưu trong repo Git và trong mọi repo Git đó được nhân bản từ đó một
  • khi đang ngoại tuyến, bạn có thể xem thông báo cam kết, thanh toán các chi nhánh khác, v.v.
+1

+1 Có, đây là * chính xác * những gì 'git-svn' được tạo ra. Tôi bắt đầu sử dụng git vì lý do chính xác này và nó hoạt động rất tốt. – sleske

+5

Điều gì sẽ xảy ra nếu tôi có SVN kiểm tra bản sao cục bộ. Bây giờ tôi không có quyền truy cập vào máy chủ. Bây giờ tôi muốn điều tương tự như trên và cũng tạo ra một chi nhánh mới. Có thể không? – karim

0

Hehehe, thời điểm thích hợp để khám phá mercurial hoặc git cho chính bạn !!

+1

một trong những điều làm tôi bực bội về tính thương xót là bạn không thể thay đổi tóm tắt cam kết. Tôi thấy điều này quan trọng vì nó dễ dàng hơn để theo dõi những cam kết nào là một phần của nhiệm vụ nào. Có cách tiếp cận kiểm soát/sửa đổi nhiệm vụ tốt hơn trên Mercurial không? – Karan

+0

@Newton Xin lỗi vì đã hỏi, nhưng tóm tắt cam kết chính xác là gì? Tôi chỉ biết tin nhắn cam kết văn bản, được hỗ trợ vì nó nằm trong svn – phihag

1

Luôn có SVK. Tôi đã không sử dụng nó trong nhiều năm mặc dù, vì vậy tôi không chắc chắn như thế nào nó hoạt động nữa.

+0

SVK bị gián đoạn. –

7

Câu trả lời vô lý sẽ là di chuyển sang một công cụ phiên bản khác, không có hành vi phạm tội!

Tôi gặp sự cố chính xác.
Đã sử dụng SVN trên máy chủ "thực sự" của tôi, nơi lưu trữ "thực".
Khi tôi đi ra ngoài với máy tính xách tay của mình, không có internet, tôi sẽ sao chép kho lưu trữ "thực" trên máy tính xách tay này (VisualSVN + TortoiseSVN), làm việc trên đó, thay đổi/cam kết bất cứ điều gì và khi trở lại đơn giản là "đồng bộ hóa" mới sửa đổi 'tập tin vào kho lưu trữ "thực".

Để rõ ràng hơn một chút: Có hai máy chủ SVN, một máy chủ cục bộ trên máy tính xách tay của bạn (sao chép) và một trên máy chủ "thực" của bạn (hiển nhiên). Chỉ cần đồng bộ giữa hai.

+1

Điều này chỉ hoạt động miễn là trên bất kỳ thời điểm nào chỉ có một máy chủ nhận được các thay đổi mới. Lược đồ này sẽ bị hỏng nếu đồng thời bạn đang ngoại tuyến và thực hiện các thay đổi đối với bản sao của bạn, một người nào đó cam kết thay đổi đối với các đường dẫn tương tự trong repo gốc. – Rudi

+1

làm cách nào để bạn đồng bộ hóa hai bản sao svn? Như @Rudi nói, nếu ai đó cam kết với repo gốc? – Karan

+0

Cách tiếp cận của tôi giả định bạn là người duy nhất. Nếu không thì nó có thể vỡ như Rudi gợi ý. – Poni

5

Tôi đã sử dụng git trên một dự án sử dụng SVN cho cùng một lý do bạn mô tả ở trên. Có một số nhận được sử dụng để git/mercurial nhưng sau một thời gian tôi thực sự thích cách tiếp cận mới. Tôi không bao giờ gặp vấn đề gì với việc sử dụng git-svn, không bao giờ thử dùng mercurial và svn ..

Nếu bạn đang ở Mercurial và vẫn đang tìm kiếm một hướng dẫn tốt với một hoặc hai chuckles ở giữa xem tutorial Joel Spolsky. Và như đã đề cập trước đây, chắc chắn là một cơ hội tuyệt vời để bắt đầu với DVCS.

1

Tuyên bố từ chối trách nhiệm: Tôi là tác giả của SOS (Hỗ trợ ngoại tuyến SVN).

Tôi đã viết điều này dễ sử dụng công cụ dòng lệnh để giải quyết chính xác vấn đề làm việc với SVN ngoại tuyến, nhưng nó không chỉ hoạt động trong SVN checkouts mà còn cho bất kỳ bản sao làm việc VCS nào (ví dụ: Bazaar, Git, hóa thạch), hoặc ngay cả trong cây tập tin không được theo dõi. SOS cho phép các cam kết đơn giản, phân nhánh, chuyển đổi/cập nhật các hoạt động, mà không có tất cả các kiến ​​thức nền ngữ nghĩa phức tạp được yêu cầu bởi VCS truyền thống. Sau khi trở lại trực tuyến, bạn có thể tích hợp tất cả các thay đổi về VCS cơ bản của mình.

Website

Cài đặt đòi hỏi một Python 3, và được xử lý qua pip install -U sos-vcs

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