Jak radzić sobie z plikami projektu IntelliJ IDEA pod kontrolą Git source?

Wszyscy w naszym zespole używają IntelliJ IDEA, a my uważamy, że przydatne jest umieszczenie Plików projektu (.ipr i .iml) do kontroli źródła, dzięki czemu możemy udostępniać konfiguracje kompilacji, ustawienia i inspekcje. Dodatkowo możemy użyć ustawień inspekcji na naszym serwerze ciągłej integracji z TeamCity. (Mamy przestrzeń roboczą dla każdego użytkownika .plik iws w .plik gitignore i nie jest kontrolowany przez źródło.)

Jednak te pliki zmieniają się w niewielki sposób, gdy robisz prawie wszystko w pomyśle. Jest problem w bazie problemów IDEA (IDEA-64312), więc być może ktoś mógłby uznać to za błąd w IDEA, ale z nim będziemy musieli żyć w dającej się przewidzieć przyszłości.

Do niedawna używaliśmy Subversion, ale niedawno przełączyliśmy się na Git. Każdy z nas po prostu przyzwyczaił się do posiadania listy zmian plików projektu, które zignorowaliśmy i nie sprawdzaliśmy, chyba że były zmiany plików projektu, którymi chcieliśmy podzielić się z innymi. Ale z Gitem, prawdziwa moc wydaje się być (z tego, co badamy) ciągłym rozgałęzieniem, które zachęca, a przełączanie między gałęziami jest bólem z plikami projektu zawsze były modyfikowane. Często może po prostu scalić zmiany w jakiś sposób i próbuje radzić sobie ze zmianami w pliku projektu, które są teraz stosowane do nowej gałęzi. Jednakże, jeśli nowa gałąź zmieniła pliki projektu (np. gałąź pracuje nad nowym modułem, którego nie ma jeszcze w innych gałęziach), git po prostu wyrzuca błąd, który nie ma sensu scalanie w plikach, gdy zarówno gałąź ma zmiany, jak i Ty masz zmiany lokalnie, i Mogę raczej zrozumieć jego sens. Z linii poleceń, można użyć opcji"- f "w poleceniu" Git checkout", aby wymusić wyrzucenie lokalnych zmian i użycie zamiast nich gałęzi, ale (1) polecenie GIT Checkout GUI w IDEA (10.5.1) nie wydaje się mieć takiej opcji, którą możemy znaleźć, więc musielibyśmy przełączyć się na linię poleceń regularnie, i (2) nie jesteśmy pewni, czy chcemy mieć w zwyczaju używając tej flagi i każąc Gitowi wyrzucić nasze lokalne zmiany.

Oto kilka przemyśleń na temat opcji, z którymi musimy sobie z tym poradzić:

  1. pozbądź się całkowicie kontroli nad plikami projektu. Włóż je do.gitignore i rozpowszechniać je między każdą osobą i TeamCity za pomocą innych środków, może poprzez umieszczenie ich w kontroli źródła gdzie indziej lub pod innymi nazwami. Nasz zespół jest na tyle mały, że ta opcja jest wystarczająco możliwa do rozważenia, ale nie wydaje się świetnie.
  2. kontynuuj z nim życie, starając się być pewnym, aby zarządzać, które Pliki mamy na które gałęzie w danym czasie. W ramach tego możemy zachęcić każdego dewelopera do posiadania więcej niż jednej kopii każdego projektu w swoim systemie, aby każdy z nich mógł zostać sprawdzony do innej gałęzi z prawdopodobnie różnymi zestawami plików projektu.
  3. spróbuj mieć tylko projekt (.ipr) w kontroli źródła, z modułem (.iml) pliki nie znajdujące się w kontrolce źródłowej i wplik gitignore. Główne coś, co wydaje się samoistnie zmieniać wPWI na bieżąco to kolejność konfiguracji shared build, ale może po prostu podzielimy się informacjami na temat tego, jak je skonfigurować. Nie jestem do końca pewien, jak IDEA radzi sobie z tego rodzaju rzeczami, mając tylko niektóre pliki, szczególnie na nowej kasie.

Myślę, że mam nadzieję, że jest jakieś oczywiste (lub nieoczywiste) rozwiązanie, które przegapiliśmy, być może radzenie sobie z ogromną dostosowywalnością, że Git i IDEA wygląda na to, że oboje. Ale wygląda na to, że nie możemy być jedyną drużyną, która ma ten problem. Pytania, które są podobne na StackOverflow obejmują 3495191, 1000512, oraz 3873872, ale nie wiem, ponieważ są dokładnie tym samym problemem, i może ktoś może wymyślić plusy i minusy dla różnych podejść, które zarysowałem, podejścia wymienione w odpowiedziach na te pytania lub podejścia, które zalecają.

Dziękuję.

Author: Community, 2011-08-15

6 answers

Możesz użyć struktury projektu IDEA opartej na katalogach , Gdzie ustawienia są przechowywane .katalog idea zamiast .plik ipr. Daje więcej drobnoziarnistej kontroli niż tego, co jest przechowywane w kontroli wersji. The .pliki iml nadal będzie wokół, więc to nie rozwiązuje przypadkowych zmian w nich(może zachować je poza kontrolą źródła?), ale udostępnianie rzeczy takich jak styl kodu i profile inspekcji jest łatwe, ponieważ każdy z nich będzie w swoim własnym pliku Pod.katalog idea.

 44
Author: Esko Luontola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-11 09:03:14

Z oficjalnego dokumentu: http://devnet.jetbrains.com/docs/DOC-1186

W zależności od formatu projektu IntelliJ IDEA (.plik ipr oparty lub .idea directory based), należy umieścić następujący IntelliJ IDEA pliki projektów pod kontrolą wersji:

.ipr file based format

Podziel się projektem .akta ipr i inne .pliki modułów iml, nie podziel się .plik iws, ponieważ przechowuje ustawienia użytkownika.

.idea directory based format

Udostępnij wszystkie pliki pod .katalog idea w katalogu głównym projektu miejsce pracy.xml i zadania.pliki xml, które przechowują specyficzne dla użytkownika Ustawienia, również udostępnić wszystkie .pliki modułów iml.

Włożyłem go do mojego .gitignore: {]}
#Project
workspace.xml
tasks.xml
 29
Author: Felipe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-18 00:57:25

Oficjalna odpowiedź jest dostępna . Zakładając, że używasz nowoczesnego (a teraz domyślnego) formatu projektu folderu .idea:

  • Dodaj wszystko...
  • z wyjątkiem .idea/workspaces.xml (który jest specyficzny dla użytkownika)
  • z wyjątkiem .idea/tasks.xml (który jest specyficzny dla użytkownika)
  • Z Wyjątkiem niektórych innych plików, które mogą zawierać hasła / klucze / itp (szczegóły patrz wyżej link)

Ta próbka .plik gitignore może być użytecznym odniesieniem, chociaż powinieneś przeczytać powyższy link do zrozum, dlaczego pojawiają się te wpisy i zdecyduj, czy ich potrzebujesz.

Osobiście ignoruję również plik .idea/find.xml, ponieważ wydaje się to zmieniać za każdym razem, gdy wykonujesz operację wyszukiwania.

 22
Author: Drew Noakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-25 19:24:22

Wziąłem workspace.xml poza kontrolą źródłową (+dodany do .gitignore).

 16
Author: ripper234,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-07 14:25:11

Nasz zespół nie sprawdza plików IntelliJ specyficznych dla ścieżki. Zakładamy, że ludzie wiedzą, jak używać IDE i konfigurować projekt. Pliki IntelliJ trafiają na listę 'ignorowanych' zmian.

Aktualizacja:

Odpowiedź jest łatwiejsza teraz, gdy używam Mavena i jego domyślnej struktury katalogów.

IntelliJ powinien zostać poproszony o zignorowanie wszystkich plików w /.svn, /.idea i /target foldery. Wszystkie informacje dotyczące ścieżki danej osoby są przechowywane w /.idea.

Wszystko inne jest uczciwa gra, aby być zaangażowanym w Subversion lub Git.
 10
Author: duffymo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-24 17:53:01

Aby podzielić się innym podejściem mojego zespołu: po prostu przenieś pliki związane z IDE do innej lokalizacji, w której IntelliJ nie rozpoznaje, i Utwórz skrypt, aby skopiować je do żądanej 'aktywnej' lokalizacji, która jest ignorowana przez GIT.

Zaletą tego podejścia jest to, że zachowano opcję udostępniania ustawień IDE poprzez kontrolę wersji. Jedyną wadą jest to, że musisz zdecydować, kiedy uruchomić skrypt (prawdopodobnie raz na klon obszaru roboczego lub kiedy zmiany są pożądane), i można zautomatyzuj to poprzez włączenie skryptu do procesu budowania lub Hooka po połączeniu.

To podejście polega na tym, że IntelliJ wyszukuje tylko określone lokalizacje dla swoich plików konfiguracyjnych, więc ma zastosowanie również w plikach konfiguracyjnych frameworka. Właściwie to zignorowaliśmy Graila .właściwości pliku w ten sam sposób, więc deweloperzy nie będzie przypadkowo sprawdzić swoje lokalne zmiany konfiguracyjne.

 2
Author: Shawn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-11 21:25:33