2014-10-08 3 views
1

저는 JIRA 나 Confluence와 같은 소프트웨어를위한 구성 관리 솔루션을 구현하는 방법을 찾고 있습니다.이 솔루션은 아카이브로 사용되지만 몇 가지 구성 파일을 수정하거나 누락 된 jars 파일을 추가해야하는 곳입니다.소프트웨어 배포 위에 이루어진 구성 변경 사항을 유지하는 방법은 무엇입니까?

새 버전이 나올 때마다 변경 사항을 다시 적용해야합니다.

분명히 패치 대기열을 사용하려고 생각했지만이 경우 아카이브가 일반적으로 200MB 이상이고 대부분의 바이너리 파일이 변경되기 때문에 제대로 작동하지 않으므로 SCM에 넣으면 크기가 쉽게 커집니다 너무 빨라. 또한 repo에서 이러한 파일을 유지할 필요가 없습니다. 변경 사항, 파일 추가 (바이너리가 될 수 있음) 또는 텍스트 파일 변경 만 있으면됩니다.

새 버전이있을 때 업그레이드/패치를 자동화 할 수있는 방법으로이를 구현하는 올바른 방법은 무엇입니까? 분명히 패치 적용에 실패하면 자동화 된 프로세스를 멈출 수 있지만 구성 파일의 변경 사항에 따라이 변경이 거의 발생하지 않습니다.

참고 : 가능한 경우 git을 사용하여 이러한 변경 사항을 추적 할 수 있습니다.

+1

Git을 사용하는 이유는 무엇입니까? 수정을 기반으로 diff를 만들고 패치를 적용하기 만하면됩니다. – rlegendi

+0

가끔은 jar 파일과 같은 바이너리 파일과 추가 된 파일이 있습니다. 패치는 이것들에별로 쓸모가 없습니다. 또한 거대한 패치 파일을 가지고 있으면 도움이되지 않습니다. – sorin

답변

1

업스트림에서 git을 사용하지 않는 경우 처리하는 가장 좋은 방법은 공급 업체 분기 (branch)라는 실제 이름을 사용하여 해당 기능을 수동으로 복제하는 것입니다 (분기의 실제 이름은 중요하지 않습니다. 여기서는이를 "업스트림"이라고합니다). 하지만 검색을 할 때는 공급 업체 지점이 예술의 용어라고 생각합니다.

BEFORE 로컬 수정 작업을 수행하면 git에서 무슨 일이 일어나고 있는지 추적 할 수 있습니다. 만약 당신이 역사를 다시 쓸 수 있다면 (강제 푸시, 다른 모든 사람들이 본질적으로 reclone 또는 rebase하게 만든다) 그런 다음 당신은 그것을 할 수있다. (나는 그것을 권장하지 않는 몇 가지 더 까다로운 방법이있다.)

이 작업을 수행하는 방법은 다음과 같습니다

  • git add -Af .
  • (이 진정한 신선한 것을 가정하고 자식 저장소를 생성하는 새로운 디렉토리를 만들고
  • git init으로 공급 업체의 소스 코드를 풀고 그 안에 불필요한 파일을 풀지 마십시오.)
  • git commit -m "Some text describing where you got the source code, how the vendor identified it, etc"
  • 이 단계에서
  • 마스터, 당신은 당신이 어떤 나중에에서

를 원하는 것을 할 수있는 마스터 지점을 수정, 공급 업체는 새로운 릴리스를한다. 그럼 너.

  • git statusgit stash -a과 친구가 있는지 모든 것을 확인합니다 (추적, 비 추적, 무엇이든), 최선을 다하고 은닉 또는 삭제 될 수 있습니다.
  • git checkout upstream
  • find . -maxdepth 1 -mindepth 1 ! -name .git -print0 | xargs -0 rm -f 청소 모든의 디렉토리.
  • git checkout master; git merge upstream 한 변경 벤더에 병합 될 벤더 정보를 저지한다 벤더 코드
  • git add -Af .; git commit -m "similar description as above"을 푼다. 정상적인 충돌 해결을 수행합니다.
  • 공급 업체 패키지를 계속 변경하십시오.

패치를 공급 업체에 다시 보내려는 경우 공급 업체의 새 분기를 패치에 적용한 다음 해당 패치를 다시 마스터로 병합하십시오. 그 패치를 공급 업체에 보낼 수 있으며, 픽업하면 모든 것이 잘되며 모든 것이 자동으로 작동해야합니다. 수정하면 정상적으로 충돌 해결을해야합니다. 그러나 여기서 핵심은 공급 업체 지점 자체가 항상 원시 상태를 유지해야한다는 것입니다.

바이너리를 무시하고 구성 파일 만 처리하려는 경우 공급 업체 분기 커밋을 수행하기 전에 .gitignore에 바이너리를 추가 할 수 있습니다 (또한 -f를 git add -A으로 사용하지 마십시오).

+0

복사 - 붙여 넣기의 목적으로, 아마도 두 번째 "자식 추가"는 플래그로 소문자 'f'를 사용해야합니까? – chrisinmtown

+0

@chrisinmtown 감사합니다. –

관련 문제