2013-02-13 1 views
1

저는 지금 고객을 위해 소프트웨어 업그레이드 (Atlassian 소프트웨어, jira, 합류 등)를하고 있습니다. 매번 만나는 문제는 고객이 처리해야하는 설치된 버전 (구성 변경, 변경된 웹 템플릿 등)에 대한 일부 사용자 지정을 수행했을 수도 있습니다 (유지 또는 무시). 어떤 파일이 바뀌 었는지 정확히 알지 못하고 무엇이든 놓치지 않도록해야합니다. 지금까지 내 솔루션은 설치된 버전의 tar.gz 설치를 추출하고 rsync (--verbose --dry-run --itemize-changes)를 사용하여 변경된 사항을 확인했습니다. 그런 다음 grep과 sed 마법을 사용하여 흥미로운 부분을 필터링하고 "수동으로"감지 된 변경 사항을 적용합니다.응용 프로그램 업그레이드 중에 변경 사항을 병합 할 수 있습니까?

그래서 기본적으로 세 개의 디렉토리가 있습니다. A (변경 이전 버전), B (이전 버전 정리) 및 C (새 버전). 나는 B와 비교하여 i A의 변화를 확인하고 선택적으로 C에 적용한다.

이제이 과정에서 나를 돕기 위해 git를 사용할 수 있을까? 나는 특히 변경 부분의 수동 적용을 좋아하지 않는다. 나는 상당히 새로운 자식, 누군가가 올바른 방향으로 나를 가리킬 수 또는 왜 이것이 끔찍한 생각인지 말해 줄래?

답변

2

전통적인 방법은 diffpatch입니다. 모두는 diff을 알고 있습니다 - 파일을 비교하고 차이점을 인쇄합니다. 전체 디렉토리에도 사용할 수 있습니다. 그러나 모든 사람이 diff (올바른 모드에서)의 출력을 받아 patch -p1 또는 이와 유사한 것으로 피드하고 diff 파일 (일반적으로 *.patch)에 지정된 변경 사항을 적용해야한다는 것을 아는 것은 아닙니다.

설치가 시작된 도구의 버전을 아는 경우 임시 디렉토리에 새로운 사본의 압축을 푼 다음 작업 사본과 대조하십시오. 그러면 패치 파일을 얻을 수 있습니다 (소스 제어에 저장할 수 있습니다!). 그런 다음 해당 파일을 병합 충돌이없는 한 다른 버전을 포함하여 설치된 다른 인스턴스에 적용 ("이식") 할 수 있습니다. 충돌이있을 경우 통보를 받고 손으로 고칠 수 있습니다.

덧붙여 말하자면, 이것은 배포판이 때때로 업스트림 소스와 자체 패치 파일을 가져 와서 빌드/패키징 시간에 함께 짜내는 방식입니다.

관련 문제