2012-03-08 9 views
9

Używanie Gita z Xcode (4.3) to prawdziwy koszmar.Kontrola źródła w XCode to koszmar - czy ktoś może zaoferować radę?

Oto scenariusz ...

Chcę dodać nową funkcję, więc tworzę nowy temat oddziału.

dodaję moją nową funkcję i jestem gotowy do popełnienia, rebase i scalania ...

oddaję moje zmiany - w porządku.

Przeskakuję z powrotem do wzorca, aby pobrać zmiany (na wypadek, gdyby ktoś inny zaktualizował kod). Nagle pojawia się:

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

co? Właśnie popełniłem.

Xcode lubi zmieniać moje pliki project.xcworkspace co drugą sekundę, co sprawia, że ​​prawie niemożliwe jest wykonywanie czystych, atomowych zatwierdzeń.

Co więcej, jeśli zatwierdzę zmiany w project.xcworkspace i szybko przejdę z powrotem do innej gałęzi (aby na przykład połączyć się z Master), Xcode będzie skarżyć się, że pliki się zmieniły i prawdopodobnie również się zawiesił.

albo z tego, co zbieram, I can't add these files to my .gitignore.

Czy muszę zaakceptować, że zwięzła i uporządkowana strategia git nie jest możliwa z Xcode, zamknij Xcode przed wykonaniem jakiegokolwiek zarządzania Git, czy jest dostępna inna opcja?

Odpowiedz

12

Właśnie dodajemy te pliki do mojego pliku .gitignore. Nie ma potrzeby dzielenia się nimi z innymi programistami.

Więc mam:

*.xcworkspace 

W .gitignore

Należy zauważyć, że pytanie stackoverflow ty związana mówi nie wyklucza project.pbxproj, ale to nie znaczy, aby nie wykluczać *.xcworkspace.

Jednak obecnie nie używam funkcji obszaru roboczego. Jeśli używasz funkcji obszaru roboczego, możesz dołączyć te pliki, ale zignoruj ​​pliki xcuserdata.

+0

OK - cool - mogę dodać '.xcuserstate' do .gitignore zbyt ? – bodacious

+0

@bodacious yes. – ThomasW

+0

dzięki za pomoc! – bodacious

2

Pytanie, które łączysz, odnosi się tylko do pliku xcodeproject/project.pbxproj. Powinieneś być w stanie bezpiecznie .gitignore innych plików.

0

Jeśli nie można wypchnąć popełnić tylko dlatego UserInterfaceState.xcuserstate został zmodyfikowany, oto szybkie ustalenie:

  1. Otwórz Organizator, przejdź do repozytoriów, skopiuj commit na kod (coś jak f01a2147218d by username)
  2. Otwórz terminal, przejdź do folderu projektu, wykonaj git reset --hard f01a2147218d
  3. Przeprowadź zatwierdzenie!
0

Oto, co działało dla mnie na Xcode 5.1:

  1. Zatwierdź zmiany w oddziale, w którym się znajdujesz.
  2. Przejdź do Xcode> Kontrola źródła> Odrzuć wszystkie zmiany (należy tylko odrzucić problem związany z obszarem roboczym)
  3. Sprawdź gałąź, którą chcesz i połącz lub cokolwiek chcesz zrobić.

Uwaga: W przypadku zbyt długiego oczekiwania, czy coś w Xcode przed sprawdzeniem się nowy oddział, może trzeba odrzucić zmiany ponownie

Powiązane problemy