2012-05-13 33 views
18

Chúng tôi có một dự án dựa trên git với một người bạn và một chi nhánh chính. Anh ấy đã thực hiện một số thay đổi đối với một số tệp, tôi đã thực hiện thay đổi đối với một số tệp khác và có thể chúng tôi đã thực hiện thay đổi đối với một vài tệp giống nhau. Ông đã cam kết và đẩy tất cả những thay đổi của mình vào repo. Sau đó, tôi đã đi và cam kết những thay đổi của tôi và cố gắng để kéo những thay đổi của mình. Tôi đã được trình bày với một vài xung đột mà tôi chủ yếu giải quyết ủng hộ những thay đổi của mình bởi vì họ là những tập tin tôi không thay đổi. Sau đó, khi tôi cố gắng để đẩy, tôi đã có một tử vong: không thể làm một cam kết một phần trong một hợp nhất.Thất bại Xcode Git Merge bị kẹt

Đây là những màn hình tôi nhận được. showing the files with source control status

The window when i try to commit

The error message

tôi có thể làm gì? Dự án hoạt động tốt ngoại trừ menu chính của trò chơi không hiển thị hình ảnh của nó, đó là những thứ anh ta đang làm và các tệp lớp anh ta làm việc, ngoài một vài thứ khác.

+0

Cảm ơn câu trả lời của bạn, nó đã giúp tôi !!! – NSPratik

+0

Xcode vẫn còn hút. –

Trả lời

1

Xcode có vấn đề với các tập tin xcuserdata và tôi đã phải hủy thay đổi và recommitt

4

Bạn không thể cam kết cho đến khi tất cả xung đột hợp nhất được giải quyết. Dựa trên những gì bạn mô tả có các tệp mà bạn vừa thay đổi. Họ là những xung đột mà bạn phải giải quyết.

Tôi chưa bao giờ giải quyết xung đột trong Xcode. Bạn luôn có thể giải quyết xung đột từ ứng dụng Thiết bị đầu cuối. Khi ở trong thiết bị đầu cuối và giả sử bạn đã cài đặt các công cụ dòng lệnh Xcode, hãy thử:

git mergetool 
git commit 

Cửa sổ FileMerge này sẽ cho phép bạn chọn chỉnh sửa của mình. Tùy chọn khác mà bạn có từ Terminal là để giải quyết các xung đột bằng cách đơn giản chấp nhận các thay đổi của mình. Điều này sẽ phá vỡ mã của bạn nhưng bạn có thể quay lại và sửa nó. Để dùng thử:

git status 
git checkout --theirs -- /path/to/a/conflicted/file ... 
git add -- /path/to/a/conflicted/file ... 
git commit 

Sau đó, chỉnh sửa tệp để sửa chức năng của bạn. Khi tất cả các xung đột được giải quyết, bạn sẽ có thể cam kết trở lại trong Xcode.

17

Đây là một tình huống bực bội chung:

  1. Mở terminal
  2. Đến thư mục kho lưu trữ dự án của bạn (một trong có chứa các tập tin ẩn .git)
  3. Di chuyển đầu hợp nhất của bạn sang một bên gõ mv .git/MERGE_HEAD .git/MERGE_HEAD_STUCK

Vấn đề của bạn phải được giải quyết một nửa, trong một số trường hợp bạn cần thực hiện thao tác kéo từ người tổ chức:

  1. Mở Organizer - Repositories "File> kiểm soát nguồn> kho ..."
  2. Tìm kho của dự án của bạn và thực hiện một kéo từ đây.

Sau đó, bạn có thể sử dụng lại Git từ Xcode, có thể bạn sẽ phải giải quyết một số xung đột hợp nhất nhưng ít nhất điều này sẽ dưới Xcode chứ không phải trên thiết bị đầu cuối.

Lưu ý: Xem xét removing the .DS_Stores from your git repository

1

mở terminal và tận dụng những điều sau đây:

Để tìm các tập tin có mâu thuẫn: git status

Để hợp nhất và khắc phục xung đột git mergetool

Bạn có thể cần phải thêm một số file untracked: git add .

Cuối cùng cam kết thay đổi git commit

0

tôi giải quyết điều này với một cách tiếp cận hoàn toàn khác nhau, chỉ sử dụng kiểm soát Nguồn Xcode của.

Bối cảnh: Một nhóm khác Đã thay đổi các thay đổi đối với kho lưu trữ Git từ xa (qua Cây đậu). Kết thúc của tôi, các tập tin .xcodeproj đến trong thư mục khác nhau, và những thay đổi không mất. Sau đó, khi tôi cố gắng cam kết, tôi đã nhận được lỗi Xung đột về cây trong Xcode.
Tree Conflict Screenshot

Gần như không thể sửa bằng Xcode, tôi đã thay thế tệp .xcodeproj bằng phiên bản đã tải xuống từ máy chủ Git. Kết quả ... dự án Xcode xuất hiện để dọn sạch, tuy nhiên tất cả các cập nhật từ Pull bị hỏng đã được hiển thị như những thay đổi tôi đã thực hiện và được tổ chức cho một Cam kết. Look at all these Mods and Added files Tuy nhiên khi cố gắng Cam kết, tôi nhận được cùng một lỗi "gây tử vong: không thể thực hiện một phần cam kết trong khi hợp nhất", được thảo luận tại đây. Đây là cách tôi giải quyết vấn đề ... (Bây giờ, hiểu rằng tôi là một lập trình tân binh, vì vậy tôi có thể thiếu hiểu biết ... nhưng sự thiếu hiểu biết của tôi đã dẫn tôi tìm cách khác để làm điều này.) Đầu tiên, Tôi nhân bản chi nhánh chính của mình thành chi nhánh thứ cấp và chuyển sang chi nhánh đó. Sau đó, tôi tạo một bản sao làm việc và đặt thư mục cho bản sao làm việc đó bên ngoài thư mục dự án ban đầu. (Tôi không biết nếu điều này là cần thiết, nhưng những gì tôi đã làm khi tôi đọc các kỹ thuật xử lý sự cố khác.) Sau đó tôi chuyển nhánh sang master, nơi tôi nhận ra tất cả các file Staged của tôi (thay đổi thành Commit) đã biến mất. Để đảm bảo tất cả các tập tin được cập nhật cho những thay đổi mới nhất của bên kia, tôi tạo ra một nhánh mới có tên là ThirdBranch, sao chép tất cả các tập tin, đẩy nó vào máy chủ Git và để Beanstalk so sánh phiên bản máy chủ của tôi với nhánh ThirdBrach branch Tôi vừa Pushed (từng dòng một), và tất cả những thay đổi của bên kia đều xuất hiện trên Xcode của tôi. Điều này có nghĩa rằng kho lưu trữ chủ của tôi và kho lưu trữ chính của Git giống nhau, điều này xác minh rằng tôi đã giải quyết vấn đề bằng cách sử dụng Xcode, chỉ.

Đừng hỏi tôi như thế nào, ngoài những gì tôi vừa mô tả ... và chắc chắn điền vào những khoảng trống tôi bỏ ra. Tôi mới ở đây và tôi không hiểu mọi thứ. Có thể một lập trình viên có kinh nghiệm có thể tách riêng thông tin không liên quan khỏi liên quan và tạo lại kỹ thuật này rõ ràng hơn, đó là một phần lý do tại sao tôi đăng bài này.

1

Khi tôi gặp sự cố với XCode, tôi chỉ cần hoàn nguyên về Mã AppCode (phiên bản dùng thử nếu bạn phải) và thực hiện cam kết từ thư mục dự án cấp cao nhất.

AppCode phát hiện trường hợp hợp nhất và sắp xếp vấn đề với phần Hợp nhất một phần. Tương tự như vậy nếu AppCode không thể sắp xếp nó ra, tôi sử dụng Github Desktop. Chỉ khi tất cả điều này không thành công, tôi sẽ hoàn nguyên về các lệnh mức thấp.