2014-09-12 3 views
0

Ruby on Rails 프로젝트가 포함 된 zip 파일이 있습니다. 또한 Ruby on Rails 프로젝트의 전체 Git 저장소가 있습니다. zip 파일은 본질적으로 전체 git 저장소의 분리 된 주제 분기입니다. Git 저장소에 제대로 포함 되었다면 현재 마스터의 HEAD 개정판 뒤에 몇 가지 수정 사항이 마스터와 다를 것입니다. 불행히도 저에게 zip 파일에는 Git 저장소가 없으며 zip 파일에서 변경 사항을 감사해야하는 플랫 파일 일뿐입니다. 말할 필요도없이, 이것은 다소 지루한 일입니다. 그래서 제가 작업하면서, SO가이 문제를 해결하는 더 좋은 방법으로 나를 도울 수 있기를 희망합니다!Git - 같은 폴더의 git 저장소와 폴더를 비교합니다.

는 내가 도움을 요청하고있어 이것이다 :

자식의 제어하에있는 폴더와 자식 저장소가 아닌 폴더를 비교하는 방법이 있나요? 디렉토리가 모두 같음 프로젝트의 Ruby on Rails 프로젝트이고 Git에 하나만 있고 다른 하나는 그렇지 않다는 것을 기억하십시오. 따라서 병합을 쉽게 기반으로하는 모든 역사적 컨텍스트가 부족합니다.

이미 프로젝트의 기본 디렉토리 상단에 zip 파일 내용을 붙이고 그 차이점을 검사 해 보았습니다. 이것은 단지 1.5 개월의 작업을 삭제합니다. 삭제 작업과 잠재적 인 회귀가 수반되는 git diff가 생성됩니다. 아마도 zip 파일이 master에서 분기되어 해당 커밋과 다른 분기를 만들 때이 정보를 확인하는 방법이 있을까요? 그런 다음 변경 사항을 걱정하지 않고 관련 변경 사항을 병합하거나 리베이스 할 수 있습니다.

어느 쪽이든, 미리 감사드립니다.

답변

2

간단한 해결책 : git clonediff 비 제어 된 dir에 대한 복제 된 레포.

더 복잡한 솔루션은 제어되지 않은 리포를 별도의 분기로 가져오고 병합을 수행 할 수 있습니다.

0

포크 포인트 (날짜 범위를 기반으로 한 추측) 일 수있는 커밋 범위를 수동으로 선택하고 프로그래밍 방식으로 비교하여 가장 적은 양의 diff를 생성하는 커밋을 선택하고 싶습니다.

git checkout --orphan zip_extract 
git rm -rf . 

의 압축을 풀고, 자식은 자식이 그런 다음 당신은 DIFF와 파이프를 이눔 특정 합계 옵션을 실험 할 수

for sha in ($git rev-list OLDEST_POTENTIAL_SHA..NEWEST_POTENTIAL_SHA) 
do 
    git diff [options] ${sha} zip_extract | analysis_script 
done 

했다으로 스크립트 뭔가 위로를 필요

커밋, --all 추가 awk, 또는 당신은 그냥 전체 diff 및 파이프 wc -l 밖으로 덤프 수 있습니다.

낙천적으로 그들 중 하나는 다른 것보다 더 옳다고 나와 있습니다. 그런 다음 해당 지점에서 분기하여 거기에 추출한 다음 (또는 고아 분기에서 병합) 병합하여 마스터에 병합을 시도합니다.

행운을 빈다.

0

시도해 보셨습니까 git bisect ??? 그러면 커밋을 찾는 데 도움이됩니다. repo start에서 HEAD에서 일부 커밋까지 bisect를 수행합니다.이 커밋은 확실하지 않은 폴더에 있습니다.각 후

좋은 또는 나쁜 중 하나로 양분 마크 (일부 디렉토리 유틸리티를 비교하여) 다른 얼마나 많은 파일을 볼 수 있습니다 이등분. 및 에서 git repo가 ​​분기 된 지점에서 커밋을 0으로 만들 수 있습니다. 샘플 명령은 내가이에게 자신을 해결할 수있는 방법을 찾는 끝났다이

git bisect start HEAD some_old_commit_id 
git bisect bad 
git bisect good 
git bisect bad 
1

처럼 될 것입니다.

압축을 푼 폴더에서 git init을 실행하고 모든 파일을 추가하고 커밋하여 "초기 커밋"을 만들었습니다. 그런 다음 프로젝트 폴더 저장소를 새 git 저장소의 원격 저장소로 설정했습니다. 이렇게하면 고아가 된 코드 위에 새로운 코드 인 git merge local/HEAD master이 병합됩니다. 병합을 완료하고 충돌을 처리하면이 프로세스를 역으로 실행할 준비가되었습니다.

프로젝트 디렉토리에 zip 폴더 git 저장소를 가리키는 리모컨을 추가하고 거기에 팁 수정본을 주제 분기로 병합했습니다. git merge orphaned_directory/HEAD orphaned_code_branch. 나는 회귀를 도입하지 않도록주의하면서 갈등을 다시 다루었습니다.

이 작업이 끝난 후, voila. 테스트 합격 및 코드 통합. 이 문제에 대한 브레인 스토밍을 도와 주신 모든 분들께 감사드립니다.

관련 문제