2008-08-25 31 views
6

Vì vậy, bạn biết rất nhiều ứng dụng Mac sử dụng "gói": Nó giống như một tệp đơn cho ứng dụng của bạn, nhưng thực ra đó là một thư mục có nhiều tệp bên trong.Cách tiếp cận tốt nhất để phiên bản tập tin "bó" Mac

Đối với một hệ thống kiểm soát phiên bản để xử lý này, nó cần phải:

  • kiểm tra tất cả các tập tin trong một thư mục, vì vậy ứng dụng có thể thay đổi chúng khi cần thiết
  • tại checkin,
    • cam kết tệp đã được sửa đổi
    • thêm tệp mới mà ứng dụng đã tạo ra
    • đánh dấu là tệp đã xóa không còn ở đó (Kể từ khi ứng dụng xoá chúng)
    • quản lý này là một sự thay đổi nguyên tử

Bất kỳ ý tưởng về cách tốt nhất để xử lý này với các hệ thống kiểm soát phiên bản hiện hành? Có bất kỳ hệ thống phiên bản nào chuyên nghiệp hơn trong lĩnh vực này không?

Trả lời

1

Đối với các hệ thống SCM được phân phối như git và mercurial không phải là vấn đề như Matthew đã đề cập.

Nếu bạn cần sử dụng SCM tập trung như Subversion hoặc CVS, bạn có thể nén (lưu trữ) các gói của mình trước khi kiểm tra chúng vào kiểm soát nguồn. Điều này có thể gây đau đớn và mất thêm một bước. Có một bài đăng blog tốt về vấn đề này tại Tapestry Trung ương:

Mac OS X bundles vs. Subversion

Bài viết này cho thấy một kịch bản ruby ​​rằng quản lý lưu trữ cho bạn.

2

Mercurial trong các phiên bản cụ thể dựa trên tệp chứ không phải cấu trúc thư mục. Do đó, cây làm việc của bạn, là một kho lưu trữ chính thức, không nhổ ra các thư mục .svn ở mỗi cấp.

Điều này cũng có nghĩa là thư mục được thay thế, như Ứng dụng hoặc Gói khác, sẽ vẫn tìm thấy nội dung của nó với tên tệp cụ thể trong kiểm soát sửa đổi. Tên tệp được theo dõi, không inode hoặc bất kỳ thứ gì lạ mắt như thế!

Rõ ràng, nếu một tệp mới được thêm vào Gói, bạn sẽ cần thêm rõ ràng tệp này vào kho lưu trữ của mình. Tương tự, việc xóa một tệp khỏi một Nhóm nên được thực hiện bằng 'hg rm'.

Hiện chưa có bất kỳ giao diện đồ họa Mercurial nào cho OS X, nhưng nếu tất cả những gì bạn làm là thêm/cam kết/hợp nhất, không khó sử dụng dòng lệnh.

1

Bản cập nhật từ tương lai:

Nếu tôi nhớ lại, vấn đề với việc quản lý bó trong SVN là tất cả các thư mục svn bị xóa mỗi khi bạn làm một bó. Đây không phải là một vấn đề nữa, bây giờ SVN lưu trữ mọi thứ trong một thư mục .svn ở gốc.

1

Mang chủ đề này trở lại ánh sáng ban ngày, kể từ tháng 10 năm 2013 iWork (Trang 5.0, v.v.) không còn cho phép lưu trữ trong 'tệp phẳng' (nén), nhưng chỉ như nhóm.

Vấn đề không phải là tạo ra các thư mục ẩn kiểm soát phiên bản bên trong cấu trúc như vậy (tốt, cho svn nó là), nhưng như Mark nói trong câu hỏi: nhận tự động, cập nhật nguyên tử của tệp được thêm hoặc xóa (bởi ứng dụng, trong trường hợp này iWork) vì vậy tôi sẽ không cần phải làm điều đó bằng tay.

Rõ ràng, iWork và Apple chỉ bị làm phiền bởi khả năng sử dụng của iCloud. Tuy nhiên, tôi có một trường hợp chính hãng để lưu trữ .pages, .numbers và .keynote trong một repo Mercurial. Sau khi cập nhật, nó thổi mọi thứ ra xa nhau. Phải làm gì?

Phụ Lục:

Tìm thấy 'hg addremove' mà hiện các trick cho tôi.

$ hg help addremove 
hg addremove [OPTION]... [FILE]... 

add all new files, delete all missing files 
Các vấn đề liên quan