나는 일부 소프트웨어 버전 1.2.0
(버전이라고 부르겠습니다 120
)을 가지고 있고 동료들이 이 소프트웨어를 변경했습니다(그들은 소스 코드를 변경하여 소프트웨어에 대한 사용자 정의 모듈을 만들었습니다). 우리는 이를 120-fr
버전이라고 부릅니다. 그 이후로 소프트웨어 공급업체는 소프트웨어를 변경했으며 현재는 소프트웨어의 최신 버전이 되었습니다 1.2.6
. 나는 사용자 정의 모듈을 버전에서 (소프트웨어는 Java로 제작됨) 1.2.0-fr
로 마이그레이션하는 임무를 맡았으며 1.2.6
버전에서 원본 소스 코드를 얻었습니다 1.2.0
.
1.2.0
지금부터 내가 한 일: 1. 나는 다음과 같은 차이점을 만들었습니다 1.2.0-fr
.
$: diff 1.2.0/ 1.2.0-fr/ > patch-120-fr.patch
$: cat patch-120-fr.patch | wc -l
> 407
나는
1.2.0
다음의 차이점을 만들었습니다1.2.6
.$: diff 1.2.0/ 1.2.6/> 패치-120-126.patch
$: cat-patch-120-126.patch 화장실-l |
1265
이제 (내가 아는 한) 동료가 소스 코드에서 만든 첫 번째 파일에 변경 사항이 있고 두 번째 파일에는 공급업체 버전 간에 변경 사항이 적용되었습니다. 내 질문은 1.2.6
버전 1.2.0에서 너무 많이 이동하지 않고 사용자 정의 모듈을 버전에 연결하기 위해 이러한 파일을 어떻게 비교합니까 ? 나는 이것을 시도했지만 interdiff
행운이 없습니다.
답변1
git을 사용하지 않는 이유가 있나요? 이와 같은 변경 사항을 자동으로 병합하는 데 매우 뛰어나며 설계된 목적을 정확하게 수행합니다. 이는 질문에 대한 직접적인 답변이 아니라 대체 솔루션입니다. diff 대신 git을 사용하면 다음과 같습니다.
# copy your original code to a new folder
cp -r 1.2.0 mysoftware_git
cd mysoftware_git/
# make the original source code a git repository
git init
# add everything to the repo
git add --all
# make your first commit
git commit -m 'original source code'
# make a branch for your colleagues' work:
git checkout -b 1.2.0-fr
# overwrite the source with the appropriate changes
cp ../1.2.0-fr/* .
# update and commit
git add --all
git commit -m 'new stuff written by Alice and Bob'
# switch back to the master branch
git checkout master
# add the 1.2.6 updates to the master
cp ../1.2.6/* .
git add --all
git commit -m 'Changes to the main software branch'
# merge the changes from 1.2.0-fr into 1.2.6
git merge 1.2.6-fr
일부 충돌은 수동으로 해결해야 할 수도 있지만 이는 git 분기 및 병합의 기본입니다...
자세한 내용을 확인하실 수 있습니다여기