2012-03-08 27 views
9

Sử dụng Git với Xcode (4.3) là một cơn ác mộng thực sự.Kiểm soát nguồn trong XCode là một cơn ác mộng - bất kỳ ai cũng có thể đưa ra lời khuyên?

Đây là một trường hợp ...

Tôi muốn thêm một tính năng mới, vì vậy tôi tạo một nhánh chủ đề mới.

tôi thêm tính năng mới của tôi và tôi đã sẵn sàng để thực hiện, rebase và merge ...

tôi cam kết thay đổi của tôi - tốt.

Tôi quay lại trang cái để kéo các thay đổi (trong trường hợp ai đó đã cập nhật mã). Đột nhiên tôi nhận được:

error: Your local changes to the following files would be overwritten by checkout: 
myProject/project.xcworkspace/xcuserdata/Bodacious.xcuserdatad/UserInterfaceState.xcuserstate 

huh? Tôi chỉ cam kết.

Xcode thích thay đổi các tệp project.xcworkspace mỗi giây thứ hai của chúng tôi khiến hầu như không thể thực hiện các cam kết nguyên tử, sạch sẽ.

Còn gì nữa, nếu tôi cam kết thay đổi trong project.xcworkspace và nhanh chóng quay trở lại nhánh khác (ví dụ để hợp nhất vào Master) thì Xcode sẽ phàn nàn rằng tệp đã thay đổi và có thể bị lỗi.

Từ những gì tôi thu thập, I can't add these files to my .gitignore một trong hai.

Tôi có phải chấp nhận rằng một chiến lược ngắn gọn và có trật tự không thể thực hiện với Xcode, đóng Xcode trước khi thực hiện bất kỳ quản lý Git nào hoặc có tùy chọn khác không?

Trả lời

12

Tôi chỉ thêm các tệp đó vào tệp .gitignore của mình. Không cần chia sẻ chúng với các nhà phát triển khác.

Vì vậy, tôi có:

*.xcworkspace 

Trong .gitignore

Lưu ý rằng vấn đề stackoverflow bạn liên quan đến nói với không loại trừ project.pbxproj, nhưng nó không nói không loại trừ *.xcworkspace.

Tuy nhiên, tôi không sử dụng tính năng không gian làm việc tại thời điểm này. Nếu bạn sử dụng tính năng không gian làm việc, bạn có thể muốn bao gồm các tệp đó, nhưng bỏ qua các tệp xcuserdata.

+0

OK - mát - tôi có thể thêm '.xcuserstate' để .gitignore quá ? – bodacious

+0

@bodacious yes. – ThomasW

+0

cảm ơn sự giúp đỡ! – bodacious

2

Câu hỏi bạn đã liên kết chỉ đề cập đến tệp xcodeproject/project.pbxproj. Bạn sẽ có thể an toàn .gitignore các tệp khác.

0

Nếu bạn không thể đẩy cam kết của bạn chỉ vì UserInterfaceState.xcuserstate đã được sửa đổi, đây là một sửa chữa nhanh chóng:

  1. Mở Organizer, đi đến Repositories, sao chép của bạn của cam mã (giống như f01a2147218d by username)
  2. Mở thiết bị đầu cuối, chuyển đến thư mục dự án của bạn, làm git reset --hard f01a2147218d
  3. Đẩy cam kết!
0

Đây là những gì hiệu quả đối với tôi trên Xcode 5.1:

  1. Cam kết và đẩy các thay đổi của bạn cho chi nhánh bạn đang truy cập.
  2. Đi tới Xcode> Kiểm soát nguồn> Hủy tất cả thay đổi (chỉ nên loại bỏ vấn đề không gian làm việc)
  3. Thanh toán chi nhánh bạn muốn và hợp nhất hoặc bất kỳ điều gì bạn đang cố gắng làm.

Lưu ý: nếu bạn chờ đợi quá lâu hoặc làm gì trong Xcode trước khi kiểm tra ra các chi nhánh mới, bạn có thể phải loại bỏ những thay đổi một lần nữa

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