끊임없이 변화하는 Git 소스 제어에서 IntelliJ IDEA 프로젝트 파일을 처리하는 방법은 무엇입니까?

사용자 65839

팀원 모두가 IntelliJ IDEA를 사용하고 있으며, 빌드 구성, 설정 및 검사를 공유 할 수 있도록 프로젝트 파일 (.ipr 및 .iml)을 소스 제어에 넣는 것이 유용하다는 것을 알게되었습니다. 또한 TeamCity와 함께 지속적 통합 서버에서 이러한 검사 설정을 사용할 수 있습니다. (우리는 소스 제어가 아닌 .gitignore 파일에 사용자 별 작업 공간 .iws 파일이 있습니다.)

그러나 이러한 파일은 IDEA에서 거의 모든 작업을 수행 할 때 거의 변경되지 않습니다. IDEA의 문제 데이터베이스 ( IDEA-64312 )에 문제 가 있으므로이 버그를 IDEA의 버그로 간주 할 수 있지만 가까운 장래에 우리가 함께 살아야 할 문제입니다.

최근까지 Subversion을 사용했지만 최근에 Git으로 전환했습니다. 우리는 무시하고 다른 사람들과 공유하고 싶은 프로젝트 파일 변경 사항이 있지 않는 한 체크인하지 않은 프로젝트 파일의 변경 목록에 익숙해졌습니다. 그러나 Git을 사용하면 실제 힘은 (우리가 탐구하는 것에서) 장려하는 연속 분기 인 것처럼 보이며 분기 간 전환은 프로젝트 파일이 항상 수정 되었기 때문에 고통입니다. 종종 어떻게 든 변경 사항을 병합 할 수 있으며 현재 새 분기에 적용되는 프로젝트 파일 변경 사항을 처리하려고합니다. 그러나 새 브랜치가 프로젝트 파일을 변경 한 경우 (예 : 브랜치가 아직 다른 브랜치에없는 새 모듈에서 작업 중임) git은 그렇지 않다는 오류를 던집니다. 두 가지가 모두 변경되고 로컬로 변경된 경우 파일을 병합하는 것이 합리적이며 그 요점을 이해할 수 있습니다. 명령 줄에서 "git checkout"명령에 "-f"를 사용하여 로컬 변경 사항을 버리고 대신 브랜치를 사용하도록 할 수 있지만 (1) IDEA (10.5.1)의 Git Checkout GUI 명령 우리가 찾을 수있는 옵션이없는 것 같기 때문에 정기적으로 명령 줄로 전환해야합니다. (2) 우리는 그것을 사용하는 습관을 갖고 싶어하지 않습니다. 플래그를 지정하고 Git에 로컬 변경 사항을 버리도록 지시합니다.

그래서, 우리가이 문제를 다루어야 할 옵션에 대한 몇 가지 생각이 있습니다 :

  1. 소스 제어에서 프로젝트 파일을 완전히 제거하십시오. .gitignore에 넣고 다른 곳이나 다른 이름으로 소스 제어에 두는 등 다른 수단을 통해 각 사람과 TeamCity에 배포합니다. 우리 팀은이 옵션을 고려할만큼 충분히 작지만 그다지 좋지는 않습니다.
  2. 주어진 시간에 어떤 브랜치에 어떤 파일이 있는지 관리하려고 노력하면서 계속 유지하십시오. 그 일환으로 각 개발자가 시스템에 각 프로젝트의 사본을 두 개 이상 보유하도록 권장 할 수 있으므로 각 개발자는 서로 다른 프로젝트 파일 세트가있는 다른 브랜치로 체크 아웃 할 수 있습니다.
  3. 모듈 (.iml) 파일은 소스 제어 및 .gitignore 파일에없는 소스 제어에서 프로젝트 (.ipr) 만 사용하십시오. 정기적으로 .ipr에서 자체적으로 전환되는 것처럼 보이는 가장 중요한 것은 공유 빌드 구성의 순서이지만 설정 방법에 대한 정보를 별도로 공유 할 수도 있습니다. 나는 IDEA가 특히 새로운 체크 아웃에서 일부 파일 만 가지고있는 이런 종류의 일을 어떻게 처리하는지 잘 모르겠습니다.

나는 우리가 놓친 명백한 (또는 분명하지 않은) 해결책이 있기를 바라고 있으며 아마도 Git과 IDEA가 모두 가지고있는 것처럼 보이는 거대한 사용자 정의 가능성을 다루고 있습니다. 하지만 우리가이 문제를 안고있는 유일한 팀은 아닐 것 같습니다. 스택 오버플로에 가지 유사하다 질문을 포함 3,495,191 , 1,000,5123,873,872 하지만 정확히 같은 문제가있는 한 나도 몰라, 어쩌면 누군가가 내가했습니다 다양한 접근 방식에 대한 장단점을 가지고 올 수 해당 질문에 대한 답변에 나열된 접근 방식 또는 권장하는 접근 방식.

Esko Luontola

설정이 .ipr 파일 대신 .idea 디렉토리에 저장되는 IDEA의 디렉토리 기반 프로젝트 구조를 사용할 수 있습니다 . 버전 제어에 저장되는 내용을보다 세밀하게 제어 할 수 있습니다. .iml 파일은 여전히 ​​주변에 있으므로 임의의 변경 사항을 해결하지 못하지만 (아마도 소스 제어에서 벗어날 수 있습니까?) 코드 스타일 및 검사 프로필과 같은 항목을 공유하는 것은 쉽습니다. .idea 디렉토리의 자체 파일에 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

TOP 리스트

  1. 1

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  2. 2

    std :: regex의 일관성없는 동작

  3. 3

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  4. 4

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  5. 5

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  6. 6

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  7. 7

    Ionic 2 로더가 적시에 표시되지 않음

  8. 8

    Seaborn에서 축 제목 숨기기

  9. 9

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  10. 10

    복사 / 붙여 넣기 비활성화

  11. 11

    ArrayBufferLike의 typescript 정의의 깊은 의미

  12. 12

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  13. 13

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  14. 14

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  15. 15

    PRNG 기간보다 순열이 더 많은 목록을 무작위로 섞는 방법은 무엇입니까?

  16. 16

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  17. 17

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  18. 18

    잘못된 구성 개체입니다. Webpack이 Angular의 API 스키마와 일치하지 않는 구성 개체를 사용하여 초기화되었습니다.

  19. 19

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  20. 20

    R의 마침표와 숫자 사이에 문자열 삽입

  21. 21

    Assets의 BitmapFactory.decodeStream이 Android 7에서 null을 반환합니다.

뜨겁다태그

보관