Các tệp * .xccheckout trong Xcode5 có nên bị bỏ qua trong VCS không?


157

Apple đã giới thiệu một loại tệp liên quan đến dự án mới trong Xcode 5: "xccheckout".

Tệp này nằm trong thư mục ".xcodeproj / project.xcworkspace / xc Shareddata /" và có vẻ như nó có liên quan đến hệ thống kiểm soát phiên bản của dự án.

Một tệp ví dụ ở đây: http://pastebin.com/5EP63iRa

Tôi cho rằng loại tệp này nên được bỏ qua trong VCS, nhưng tôi không chắc chắn.

Vì vậy, đây là những câu hỏi:

  1. Có nên bỏ qua "xccheckout"?
  2. Mục đích của nó là gì?

Câu hỏi này có xu hướng khá liên quan; do đó tôi muốn nó đúng hơn về mặt ngữ pháp và cú pháp. Nếu bạn là người nói tiếng Anh bản ngữ hoặc bạn cực kỳ thành thạo tiếng Anh, tôi muốn nhờ giúp đỡ kiểm tra ngôn ngữ của tôi. Cảm ơn bạn!
Artem Abramov

1
Những thay đổi nhỏ được đề xuất: "Apple đã giới thiệu một tệp mới", "Một ví dụ ở đây:". Có một câu trích dẫn không khớp trong câu hỏi 1.
Sofi Software LLC

3
Tôi luôn tham khảo repo github / gitignore để biết những tập tin nào nên được bỏ qua -> github.com/github/gitignore/blob/master/Objective-C.gitignore
eliocs

Câu trả lời:


109

Bạn nên kiểm tra .xccheckouttệp Xcode 5 ; nói chung, các tập tin xcshareddatanên được cam kết.

Một .xccheckouttệp chứa siêu dữ liệu về những kho lưu trữ được sử dụng trong không gian làm việc. Đối với một dự án duy nhất trong một kho lưu trữ duy nhất không tạo ra nhiều khác biệt. Nhưng nếu bạn đang sử dụng một không gian làm việc có nhiều dự án từ các kho lưu trữ khác nhau, sự hiện diện của một .xccheckouttệp trong không gian làm việc cho phép Xcode biết tất cả các thành phần tạo nên một không gian làm việc là gì và lấy chúng ở đâu.


8
Nếu nó không được chia sẻ, Apple sẽ lưu trữ nó .xcuserdatađể nó được đưa vào.
Joshcodes

4
Như tôi đã nói trong câu trả lời của mình, tệp xccheckout chứa thông tin cho tất cả các kho lưu trữ được sử dụng trong một không gian làm việc. Đó là trường hợp bất kể họ sử dụng hệ thống SCM nào - không gian làm việc như vậy có thể ở svn hoặc git, và các dự án của nó có thể nằm trong hỗn hợp của kho svn và git.
Chris Hanson

72
Dường như xccheckout chứa các khóa và tên dành riêng cho từng máy của nhà phát triển ... Ngay khi tôi chạy xcode, nó sẽ thay đổi một số khóa trong tệp và nó thay đổi một cái gì đó gọi là IDESourceControlWCCName từ <string> OurCompanyAPI </ string> thành <string > our_company_api / string> - sau này là tên tôi đã sử dụng khi nhân bản repo. Nếu tập tin này được cho là được chia sẻ, thì Apple đã làm một công việc khá kém.
Herr Grumps

7
Khi chúng tôi kiểm tra tệp này, tất cả đồng nghiệp của tôi nhận được một IDESourceControlProjectIdentifier khác nhau ... vì vậy .xccheckout của chúng tôi được sửa đổi với mỗi cam kết. -_-
Cœur

9
Bất kể những gì Apple dự định ban đầu, các .xccheckouttệp đang gây ra một số vấn đề điên rồ trên Xcode 6 beta và tôi đã quyết định xóa chúng khỏi VCS. Có vẻ như có liên quan đến một số lỗi bộ nhớ đệm và tôi tin rằng Xcode có thể tự động tái tạo chúng từ VCS.
eonil

63

Các *.xccheckouttập tin chứa VCS siêu dữ liệu, và vì thế không nên kiểm tra vào VCS.

Mặt khác: kiểm tra trong tệp này có thể sẽ không tạo ra khó khăn hợp nhất hoặc các vấn đề khác.

Nếu bạn muốn bỏ qua tệp này (mà tôi khuyên dùng), bạn nên thêm dòng này vào dự án của bạn .gitignore:

*.xccheckout

Giải pháp của Abizern sẽ không hoạt động cho các dự án bên trong không gian làm việc. Bởi vì, khi bạn sử dụng một không gian làm việc, đường dẫn đến *.xccheckouttệp sẽ là : <workspace-name>.xcworkspace/xcshareddata/<workspace-name>.xcchekout. Và nó thực sự bỏ qua nhiều hơn bạn muốn.

Chỉnh sửa: Tệp này tồn tại để quản lý kiến ​​thức của Xcode về nhiều hệ thống VCS có thể có trong dự án của bạn, xem câu trả lời của Chris Hanson . Đối với> 99% dự án, tệp .xccheckout là cấu hình quá mức cần thiết.


1
Sẽ thật tuyệt vời nếu bạn có thể mở rộng về tuyên bố này "nó thực sự bỏ qua nhiều hơn bạn muốn". Cụ thể, một số ví dụ về các tệp khác đi vào thư mục đó cần được kiểm tra.
Đánh dấu Edington

Theo dõi: Tôi đang sử dụng .gitignore từ Adam từ câu hỏi này . Nó có sẵn như là một ý chính và nó có một số mô tả về nội dung thư mục xc Shareddata.
Đánh dấu Edington

@ Mark : Nó bỏ qua project.xcworkspace/. Điều đó có thể là oke cho đến bây giờ, nhưng tôi sẽ không tin vào điều đó cho các phiên bản Xcode mới.
Berik

6
Câu trả lời này không chính xác và tiêu chuẩn của GitHub .gitignoremà nó cung cấp cho các nhà phát triển không nên chỉ định*.xccheckout
Chris Hanson

2
Sau khi bao gồm tệp này trong repos của tôi kể từ khi nó được giới thiệu, gần đây tôi đã bắt đầu loại bỏ nó khỏi tất cả các repos của tôi. Điều này đang tạo ra xung đột hợp nhất mọi lúc, chủ yếu là trong các dự án bao gồm các khung riêng của tôi dưới dạng mô hình con. Và sau đó tôi không thu được gì từ tệp này vì tôi sử dụng git để quản lý mô hình con. Cố gắng tốt, Apple, cảm ơn, nhưng không cảm ơn.
Pascal

38

Nó phụ thuộc. Tệp này chứa các tham chiếu đến kho lưu trữ từ xa mà bạn đang sử dụng. Nếu bạn đang sử dụng một VCS tập trung như Perforce hoặc Subversion, kho lưu trữ từ xa của mọi người sẽ giống nhau và do đó bạn có thể và nên kiểm tra tệp trong đó.

Nếu bạn đang sử dụng một VCS phân tán như Mercurial hoặc git, nhưng sử dụng nó như thể đó là CVCS (nói cách khác, mọi người được nhân bản từ kho lưu trữ được chia sẻ trực tiếp vào không gian làm việc cá nhân của họ trên máy của họ) thì bạn vẫn có thể muốn kiểm tra nó trong.

Tuy nhiên, nếu bạn đang sử dụng DVCS với mọi người có bản sao từ xa của riêng họ, ví dụ như sử dụng GitHub trong mẫu sử dụng tiêu chuẩn của nó, bạn KHÔNG muốn kiểm tra tệp này. Nếu bạn đã yêu cầu Kéo của bạn sẽ yêu cầu cài đặt kho lưu trữ của bạn để được sao chép vào tệp xccheckout của người khác, nhưng cài đặt kho lưu trữ của bạn sẽ khác với mọi người khác vì tất cả bạn đều sử dụng các kho lưu trữ từ xa khác nhau.


1
Câu trả lời này có vẻ với tôi là tốt nhất. Kiểm tra chúng là gây ra sự phiền toái không cần thiết đối với các khác biệt cho các cam kết của nhóm chúng tôi. Tôi thêm vào .gitignore những điều sau đây để loại bỏ chúng: * / .xcworkspace / xc Shareddata / *. Xccheckout Tôi vẫn không hiểu tại sao Apple lại chọn lưu trữ thông tin này mà dù sao cũng nằm trong thư mục .git (tôi chỉ đoán là làm cho mọi thứ hoạt động ổn định trên toàn VCS)
Juan Carlos Méndez

20

Có, Project.xccheckouttập tin nên được cam kết vào kho lưu trữ của bạn. Xcode sử dụng tệp này để báo cho những người khác mở không gian làm việc toàn bộ danh sách các kho điều khiển nguồn được sử dụng bởi không gian làm việc và vị trí của bản sao làm việc liên quan đến không gian làm việc, cho dù các kho đó là Git, SVN hay cả hai.

Khi bạn mở không gian làm việc, Xcode sử dụng Project.xccheckouttệp để thông báo cho người dùng rằng có các kho lưu trữ khác tạo thành một phần của không gian làm việc và hỏi xem nên kiểm tra cái nào. Khi kiểm tra các kho lưu trữ bổ sung, Xcode đặt các bản sao làm việc trong cùng cấu trúc thư mục liên quan đến không gian làm việc giống như khi Project.xccheckouttệp được tạo.

Như Chris Hanson đã nói, có lẽ không có vấn đề gì đối với một kho lưu trữ, không gian làm việc một dự án, nhưng đối với các vấn đề phức tạp hơn, nó thực sự sẽ rất tiện dụng.

Bạn có thể tìm hiểu thêm về điều này trong video phiên WWDC 2013 Hiểu về Kiểm soát nguồn trong Xcode ; phần liên quan bắt đầu vào khoảng 15 phút.


Tệp này chỉ hữu ích nếu bạn sử dụng Xcode cho SCM, nếu không, bạn hoàn toàn không cần tệp đó. Và thậm chí ít hơn nếu bạn làm việc với git forks, trong trường hợp đó, đường dẫn repo sẽ là duy nhất cho mỗi nhà phát triển
Carlos Ricardo

3

Đây là những gì tôi có trong .gitignore cho Xcode của mình.

#Xcode
*.xcuserstate
project.xcworkspace/
xcuserdata/

Nó giữ bất cứ điều gì liên quan đến trạng thái cục bộ của cách các dự án tìm kiếm tôi ra khỏi kho lưu trữ.

Tệp xccheckout ở dưới đây vì vậy nó không được theo dõi trên hệ thống của tôi theo mặc định.

Xcode đã trở nên tốt hơn và tách biệt những gì cần chia sẻ và những gì cần được lưu giữ cục bộ. Ví dụ; những dòng này sẽ bỏ qua các lược đồ xây dựng mặc định, điều này tốt vì bạn có thể đánh dấu các lược đồ xây dựng cụ thể là được chia sẻ và chúng được đặt trong một thư mục không bị bỏ qua.

Điểm dừng được bỏ qua, nhưng bạn có thể đánh dấu các điểm dừng cụ thể là được chia sẻ giữa các dự án và chúng cũng được đặt trong một thư mục không bị bỏ qua.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.