2010-01-31 12 views
5

pragnę dwie rzeczy:Xcode, Git, a pośredni budować foldery

  1. aby móc zmienić oddziały w git, a następnie uruchomić lub zbudować w Xcode bez rekompilacji całego projektu.

  2. git ignorować pośrednie pliki kompilacji podczas scalania, więc nie poprosi mnie, aby rozwiązać wszelkie konflikty.

Umieszczenie folderu pośrednich kompilacji poza projektem lub użycie .gitignore do zignorowania tego folderu, realizuje # 2, ale nie # 1; Muszę odbudować cały projekt, gdy zmieniam gałęzie, nawet jeśli nie modyfikuję żadnych plików.

+0

Sugerowałbym ccache, ale Google sugeruje, że nie działa z xcode z jakiegoś powodu. Być może inne pytanie, czy to też jest twoje doświadczenie. – ergosys

+0

Jeśli dobrze rozumiem, twoja konfiguracja kompilacji xcode zmienia się z gałęzi na gałąź, więc wszystko jest rekompilowane za każdym razem; chciałbyś móc zdefiniować inną pośrednią ścieżkę kompilacji dla każdej gałęzi. Tego właśnie szukam, tak jak ty. – moala

+0

szybko przewiń do Xcode 8.1.2 i nadal napotykam ten problem, chociaż katalog kompilacji i/lub pośredni nie są już domyślnie w hierarchii katalogów projektu – Zennichimaro

Odpowiedz

1

Dobrze odpowiedziałeś na pytanie nr 2, więc twoje pytanie dotyczy tylko # 1. Naprawdę nie rozumiem, dlaczego Xcode musiałby przekompilować rzeczy - git nie zmieni znacznika czasu w niezmienionych plikach podczas przełączania gałęzi.

Czy rzeczywiście zaimplementowałeś rozwiązanie # 2, więc cały problem nie jest spowodowany przez deptanie git na twoim katalogu kompilacji, który powinien być .gitignore 'd?

+0

Pliki znajdują się w domyślnym folderze build /, a .gitignore ignoruje kompilację /. (Myślę, że większość robi to.) Kiedy robisz kompilację bez edytowania plików źródłowych, git pokazuje, że nic się nie zmieniło. Dobry.Zamykam projekt w Xcode, zmieniam gałąź w git i ponownie otwieram projekt w Xcode. Pliki kompilacji nie były w git, więc nie zostały zmienione, co oznacza, że ​​są błędnymi plikami kompilacji dla bieżącej gałęzi i Xcode musi wszystko odbudować. Następnie wracam do pierwszej gałęzi i Xcode musi ponownie wszystko odbudować. Rozumiem, dlaczego Xcode musi rekompilować. –

+0

Ale jeśli pliki nie uległy zmianie (ani w zawartości, ani w sygnaturze czasowej), pliki kompilacji nie są "złe". O ile oczywiście nowa gałąź używa różnych ustawień kompilacji, w takim przypadku nie ma możliwości uniknięcia ponownej kompilacji. Nie jestem silna w Xcode, ale czy to możliwe, że zamknięcie i ponowne otwarcie projektu spowoduje odbudowę? –

+0

Pliki kompilacji są niepoprawne, ponieważ pliki źródłowe są różne. Zmiana na inną gałąź zmienia się na inny zestaw plików źródłowych, ale nie zmienia towarzyszących plików kompilacji; nadal używasz plików kompilacji ze starego oddziału i są one różne. Dylemat polega na tym, że jeśli git ignoruje pliki budowania, to nie zostaną przełączeni po zmianie gałęzi i muszą zostać przebudowane; OTOH jeśli git nie ignoruje plików kompilacji, to próbuje je scalić, czego też nie chcesz. –

0

Xcode zamierza wykonać wszystkie swoje dane na podstawie znaczników czasu tych plików. Jeśli zastąpisz plik nowszym plikiem, to Xcode powinien zauważyć, że znacznik czasu pliku jest nowszy od znacznika czasowego produktu kompilacji i przekompilować go.

Jednak jeśli zmienisz go przy użyciu starszej wersji pliku źródłowego, nie będzie wiedział, że plik kompilacji jest nieprawidłowy. Po prostu zobaczy, że wynik kompilacji jest wciąż nowszy od pliku źródłowego, więc nie rekompiluj go.

Krótko mówiąc, nie można stwierdzić, które pliki uległy definitywnej zmianie, a które zdecydowanie nie. Lepiej zrób to w pełni clean + przebuduj, aby się upewnić; w przeciwnym razie stracisz czas na debugowanie, gdy to nie zadziała.

1

Można zdefiniować dwie zmienne:

  • MY_BRANCH_NAME = branch_foo (dostosowane w każdym oddziale)
  • TARGET_TEMP_DIR = $(CONFIGURATION_TEMP_DIR)/$(TARGET_NAME)$(MY_BRANCH_NAME).build (taka sama dla wszystkich branż)

ten sposób buduje dla różnych gałęzi będzie tworzyć i przechowywać w oddzielnych folderach, bez konieczności przekompilowywania wszystkiego z powodu zmiany konfiguracji oddziału do zespołu.

Można to zrobić w plikach xcconfig lub automatycznie zdefiniować MY_BRANCH_NAME jako argument xcodebuild w skrypcie budowania, między innymi.

+0

Podoba mi się ten pomysł i spróbuję. –